Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozessspeicher lesen / schreiben Ergebnis falsch (https://www.delphipraxis.net/147788-prozessspeicher-lesen-schreiben-ergebnis-falsch.html)

Gehstock 16. Feb 2010 17:10

Re: Prozessspeicher lesen Ergebnis falsch
 
nun Hab ich ein Ähnliches Problem beim Schreiben

fehler sind unter
Windows7 Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen
WinXP Falscher Parameter

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  dwBytes, Buf: DWord;
  dwEngineBase, dwClientBase: DWord;
  dwProcID: Integer;
  hProcess: THandle;
begin
  dwEngineBase := 0;
  dwClientBase := 0;
  hProcess := 0;
  dwProcID := GetProcessID('calc.exe');
  if dwProcID <> 0 then
  begin
    hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, dwProcID);
    if (hProcess = INVALID_HANDLE_VALUE) then
    begin
      Showmessage('Ungültiges Handle :' + Inttostr(hProcess));
      exit;
    end;
//if not ReadProcessMemory(hProcess, Pointer($2c3ca4), @Buf, 4, dwBytes) then
//  ShowMessage(SysErrorMessage(GetLastError)+ ' : '+Inttostr(hProcess))
//  else
//    caption := (inttostr(Buf));
//end;
if not WriteProcessMemory(hProcess,Pointer($002C3C84),Pointer($55), 1,dwBytes) then
  ShowMessage(SysErrorMessage(GetLastError))
  else
    caption := (inttostr(dwBytes));
end;
end;
hab mir schon einige Delphi und C++ Sourcecodes angeschaut wegen dieser DebugPrivileges welche dort aber nie verwendet werden

mleyen 16. Feb 2010 19:34

Re: Prozessspeicher lesen / schreiben Ergebnis falsch
 
Die Hilfe zu den Parametern von Delphi-Referenz durchsuchenWriteProcessMemory hätte geholfen. :wink:
SizeOf(Pointer($55)) ist bei mir ungleich 1.
Btw: Delphi-Referenz durchsuchenCloseHandle fehlt.

himitsu 16. Feb 2010 19:40

Re: Prozessspeicher lesen / schreiben Ergebnis falsch
 
Pointer($55) kann nicht stimmen, da einem Programm im Usermode kein Zugriff auf die 64 KB gewährt sind.

Falls du die $55 als Byte schreiben willst, dann muß dieses in eine Variable oder in einen anderen Puffer und dann gibst du den Zeiger auf diesen Puffer dort an.

Zitat:

Zitat von mleyen
SizeOf(Pointer($55)) ist bei mir ungleich 1.

Egal, ein Pointer wäre 4 Byte und demnach könnte man davon auch 1 Byte schreiben,
aber hier zeigt der Pointer auf einen ungültigen Speicherbereichen
oder er will hier den Pointer, anstatt den Wert speichern.

mleyen 16. Feb 2010 19:44

Re: Prozessspeicher lesen Ergebnis falsch
 
Das dies möglich ist weiß ich, nur folgendes hat mich zu der Antwort verleitet:
Zitat:

Zitat von Gehstock
Windows7 Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen


himitsu 16. Feb 2010 19:51

Re: Prozessspeicher lesen Ergebnis falsch
 
Das ist 'ne Standardmeldung, welche eintritt, wenn Bytes nicht gelesen/geschrieben werden können ... was hier beim letzen und auch rein zufällig beim einzigen Byte passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz