![]() |
XE2 Bios Daten auslesen
Anbei ein Code Fragment zum Auslesen der Biosdaten, unter D7 alles prima, nur Delphi XE2 mault jetzt
a) N : DWORD scheint falsch zu sein b) array of Char nach Array of AnsiChar war nicht hilfreich procedure BiosDaten(var Name, Copyright, Datum, SN : string); var Buffer : Array[0..8] Of Char; N : DWORD; ------->>>> [DCC Fehler] E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen begin ReadProcessMemory( GetCurrentProcess,Ptr( $FE061),@Buffer,8,N); Buffer[8]:=#0; ----->>>>> [DCC Fehler]Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen Name:=StrPas(Buffer); ........ end; |
AW: XE2 Bios Daten auslesen
Jetzt ist die Frage: Welches ReadProcessMemory wird denn da verwendet? Schau Dir mal die Deklaration an.
|
AW: XE2 Bios Daten auslesen
Mach aus dem N ein NativeUInt.
|
AW: XE2 Bios Daten auslesen
Und m.E.n muss es dann
Delphi-Quellcode:
heißen.
ReadProcessMemory( GetCurrentProcess,Ptr( $FE061),@Buffer,8 * SizeOf(Char),N);
|
AW: XE2 Bios Daten auslesen
Zitat:
Delphi-Quellcode:
Buffer : Array[0..8] Of Char;
9 Chars sind und nicht 8. |
AW: XE2 Bios Daten auslesen
Zitat:
|
AW: XE2 Bios Daten auslesen
Zitat:
|
AW: XE2 Bios Daten auslesen
Naja, nicht wenn er nur 8 Chars liest... Sonst steht in Buffer[8] ein zufälliger Stack-Inhalt.
Quatsch! Jetzt weiß ich was du meinst :wall: PS: Sind die BIOS-Infos wirklich WideStrings? Ich schätze mal man muss da AnsiChars nehmen. (Es sei denn ich irre mich) |
AW: XE2 Bios Daten auslesen
Zitat:
Delphi-Quellcode:
funktioniert.
array of char
|
AW: XE2 Bios Daten auslesen
Ich hätte ja gedacht, dass es dann so gehen müsste:
Delphi-Quellcode:
Allerdings bekomme ich da auch kein gescheites Ergebnis (XE auf Vista 32).
procedure BiosDaten(var Name, Copyright, Datum, SN: AnsiString);
const BUFDATASIZE = 8; var Buffer: Array[0..BUFDATASIZE] Of AnsiChar; N: DWORD {bzw. NativeUInt}; begin ReadProcessMemory(GetCurrentProcess, Ptr($FE061), @Buffer, BUFDATASIZE, N); Buffer[BUFDATASIZE] := #0; Name := AnsiString(Buffer); //... end; |
AW: XE2 Bios Daten auslesen
Ja habs eben auch probiert aber nix rausbekommen.
Stimmt die Adresse denn überhaupt? Hab jetzt im Internet beim groben Googlen nichts gefunden. |
AW: XE2 Bios Daten auslesen
Schon mal den Rückgabewert von ReadProcessMemory überprüft?
|
AW: XE2 Bios Daten auslesen
*Pff* wozu, wir lieben das Risiko :lol:
Nee, im Ernst, das geht schon in die Hose. Zitat:
|
AW: XE2 Bios Daten auslesen
Ja, hab ich auch grad rausbekommen :mrgreen:
Aber was sagt uns das? Hat er mal so bisschen gelesen, dann aber keine Lust mehr gehabt oder was? -.- Finde die Fehlermeldung komisch... |
AW: XE2 Bios Daten auslesen
Zitat:
Zitat:
|
AW: XE2 Bios Daten auslesen
Da hätte ich aber eher eine Meldung "Zugriff verweigert" o.ä. erwartet. Finde die Meldung etwas.. komisch.
Zitat:
|
AW: XE2 Bios Daten auslesen
![]() |
AW: XE2 Bios Daten auslesen
Jupp, der erste Speicherbereich ($00000000..$0000FFFF) ist nicht verfügbar.
Und wenn es das wäre, dann könnte man wohl auch direkt auf seinen eigenen Speicher zugreifen.
Delphi-Quellcode:
procedure TForm6.FormCreate(Sender: TObject);
type TBIOSString8 = array[0..7] of AnsiChar; PBIOSString8 = ^TBIOSString8; begin Caption := PBIOSString8($FE061)^; end; |
AW: XE2 Bios Daten auslesen
OK der Ansatz zum Auslesen der BIOS Daten spielt nur bis Win 2K ....
muss diese Funktion wohl entsorgen :-( |
AW: XE2 Bios Daten auslesen
ReadProcessMemory und WriteProcessMemory funktoniert beim Delphi sieben einwandfrei. Aber beim xe2 immer diese trottole fehler bekomme ich. Ich kann kein mehr lösung finden
[DCC Fehler] Unit1.pas(59): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen bitte hilfe :S
Code:
uses
Windows, Messages; {$R Loader.RES} var si : Startupinfo; pi : Process_Information; NewData : array[0..1] of byte = ($90,$90); NewDataSize : DWORD; Bytesread : DWORD; Olddata : array[0..1] of byte; begin NewDataSize := sizeof(newdata); IF CreateProcess(nil,'Example.exe',nil,nil,FALSE, Create_Suspended,nil,nil,si,pi) = true then begin ReadProcessMemory(pi.hprocess,Pointer($403CEA),@olddata,2,bytesread); if (olddata[0] = $75) and (olddata[1] = $19) then begin WriteProcessMemory(pi.hProcess, Pointer($403CEA), @NewData, NewDataSize, bytesread); ResumeThread(pi.hThread); end else begin Messagebox(0,pchar('Bytes not found! Wrong version?...'),pchar('Error'),mb_iconinformation); TerminateProcess(PI.hProcess,0); end; CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; end. |
AW: XE2 Bios Daten auslesen
Schau was die Funktion für Parametertypen haben will und dann paß' deine Variablen daran an.
|
AW: XE2 Bios Daten auslesen
function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;
nSize: SIZE_T; var lpNumberOfBytesRead: SIZE_T): BOOL; stdcall; 1. Parameter = Thandle 2. Parameter = Pointer 3. Parameter = Pointer 4. Parameter = SIZE_T 5. Parameter = SIZE_T
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var FileName : String; StartInfo : TStartUpInfo; ProcInfo : TProcessInformation; AllGood : Boolean; ReadByte : SIZE_T; OrjinalBytes : byte; begin OrjinalBytes:=($90); FileName := 'Beispiel.exe'; //Fill the PRocinfo and Startinfo with a buffer FillChar(StartInfo,SizeOf(TStartupInfo),#0); FillChar(ProcInfo,SizeOf(TProcessInformation),#0); //Lets "Try" to create the paltalk process in a suspended state AllGood := CreateProcess(Pchar(Dosya),nil,nil,nil,False,CREATE_SUSPENDED,nil,nil,StartInfo,ProcInfo); if Allgood then begin ShowMessage('Geht Schon'); ReadProcessMemory(PRocInfo.hProcess,Pointer($00146565),@OrjinalBytes,1,1,ReadByte); end; ResumeThread(ProcInfo.hThread); CloseHandle(ProcInfo.hProcess); end; Ist wieder gleich :S |
AW: XE2 Bios Daten auslesen
Da stimmt wohl der Aufruf mit der Deklaration nicht über ein, was die Datentypen angeht. Und was ist hier Zeile 59?
|
AW: XE2 Bios Daten auslesen
Und Warum bei Delphi7 kein problem ?
Ich habe alle Varible probiert geht nicht ! byte , word,dword, integer , Char , PChar , AnsiChar , WideChar, Pointer ,real, Extended ,string,ShorString trotzdem immer wieder gleiche Fehler... Kann auch Assemblye ! |
AW: XE2 Bios Daten auslesen
Zitat:
Und da über VAR gemeckert wird, kann es nur lpNumberOfBytesRead sein. PS: zähle mal deine Parameter |
AW: XE2 Bios Daten auslesen
Also wenn ich keine Seh probleme hab , ich sehe dort 5 parameter :-D
![]() Wo ist fehler jetzt ? Ich kann nicht mehr sehen :cry: |
AW: XE2 Bios Daten auslesen
Was denn nun, Read oder Write? Ich habe mal gezählt:
Zitat:
|
AW: XE2 Bios Daten auslesen
Wobei hier Delphi sogar hilft.
Schreib mal die öffnende Klammer "(" neu (k.A. aber vielleicht gibt's da auch eine Tastenkombi dafür) und schon sollte die Delphi den aktuellen Parameter nennen ... nun geht man nur noch alle Parameter durch und vergleicht den angebenen "Wert", mit den angezeigten Parameter-Informationen. |
AW: XE2 Bios Daten auslesen
Ich brauche beide Write und read .
Sorry die Parameter is 6 yes aber hab auch genau 6 parameter geschrieben Es tut mir Leid ich kann eure nicht verstanden. Sie können ja einfach direkt fehler sagen , aber sagen sie nicht und dauert länger... Hab funksion schon hier gescrieben.. 1 := function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: SIZE_T; var lpNumberOfBytesRead: SIZE_T): BOOL; stdcall; 2 := Bild gezeigt ! ![]() hab auch probiert statt cardinal , dword und @ReadByte gemacht trotzdem gleich |
AW: XE2 Bios Daten auslesen
ReadProcessMemory erwartet 5 Parameter, Du übergibst 6.
|
AW: XE2 Bios Daten auslesen
Zitat:
Also egal haben sie Xe2 oder Xe kannst du bitte eine bespiele.exe probieren (starten und sein bytes ändern ) in XE. Wenn du dass kannst dann solved :thumb: Ich habe es genau beim Delphi7 project kopiert und so lange kriege ich mit diese fehler.. Also ich muss zuerst mit read bytes lesen ob es korreckt ist dann muss mit write angegebene byte ändern. Das heisst LOADER mit DELPHI ... PS: Nicht für illegal |
AW: XE2 Bios Daten auslesen
Weil "zuviele Parameter komme, wenn alle vorherigen Parameter erfolgreich üvergeben werden konnten und am Ende noch Parameter gefunden werden, welche die Prozedur nicht mehr haben will.
Genauso umgekehrt: Möchte die Prozedur mehr Parameter, als angegeben wurden, wird auch gemeckert. Aber hier trat eben zuerst ein Problem mit einem Parameter auf, weswegen der Compiler garnicht erst bis zum Ende der Parameterliste kam und erstmal sich über diesen einen Parameter beschwert hat. :zwinker: |
AW: XE2 Bios Daten auslesen
ich denke der erste Code war clean unter WIN 2000 - dann lange nicht verwendet und jetzt unter WIN 7 kam das böse Erwachen ...
Windows /Microssoft hat uns wohl hier erfolgreich ausgebremst |
AW: XE2 Bios Daten auslesen
In Bezug auf die 64-Bit-Erweiterung wurden in/bis XE2 einige Typendeklarationen berichtig, welche eigentlich schon immer falsch waren und Andere wurden falsch, als sich irgendein I*hust* überlegte den Integer nicht mehr dynamisch zu belassen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz