Merkwürdiges Problem mit Handle
-
GetPID liefert einen korrekten wert zurück (Hab ich mit Spy++ überprüft) demnach müsste der Hwnd wert auch korrekt sein. Das ist das was mich so verwundert.
WriteMemory gehört zu der Klasse und deshalb kann ich problemlos auf hproc zugreifen.
-
Ich habe mich natürlich auch erstmal von PROCESS_ALL_ACCESS blenden lassen. Aber bitte was bekommst Du von OpenProcess geliefert? Wenn da ein Wert != NULL zurückkommt, ist es gültig. Punkt.
Oder überschreibst du das Handle an einer anderen Stelle versehentlich mit etwas unsinnigem? Schau Dir bitte an, was OpenProcess zurückgibt. Dann schaust Du Dir an, ob hProc beim Schreibzugriff noch immer den gleichen Wert hat.
Was geht denn überhaupt schief beim Schreiben? Gibt es dazu auch einen Fehlercode? Hast Du das mal mit VirtualQueryEx geschaut, ob Du überhaupt in den gewünschten Bereich schreiben darfst?
-
Ich habe ja den debugger rüberlaufen lassen. OpenProcess schmeißt mir jedesmal 0x000000f8 zurück, selbst wenn ich die ziel anwendung neugestartet hab. Die PID und das hWnd sind korrekt. Komischerweise bekomme ich beim OpenProcess trotzdem immer einen falschen wert zurück, ich versteh das einfach nicht. Ich sitze hier schon seit Stunden und suche vergeblich nach einem fehler den ich gemacht haben könnte... Ich komme einfach zu keinem ergebnis
hier nocheinmal ein link zu meiner Klasse:
http://mandrill.fuxx0r.net/c++/paste.php?p=1173
-
0x000000f8 ist ein gültiges Handle. Das Handle ist sowieso nur ein Index in die Process eigene Handle-Table. Da Du jedesmal gleich viel Handles belegst, wirst Du auch jedesmal den gleichen Wert zurückbekommen. Das ist nicht ungewöhnlich. Aber was ist jetzt das Problem?
-
WriteProcessMemory bricht beim schreiben ab!
GetLastError() schmeißt mir den wert 299 zurück. Der bedeutet:
"Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen."Was auch immer das heißen mag...
Ich rufe die WriteProcessMemory funktion aus meiner Klasse herraus auf.
Der übergebene wert hProc wird richtig übergeben.
Irgendwie will er aber trotzdem nicht in den Speicher schreiben.Hier meine WriteMemory funtion:
bool CProcess::WriteMemory(long BaseAdress, long Buffer) { if(WriteProcessMemory(hProc, (void*)BaseAdress, (void*)Buffer, 1, NULL)) return true; else return false; }
-
-King- schrieb:
Hast Du das mal mit VirtualQueryEx geschaut, ob Du überhaupt in den gewünschten Bereich schreiben darfst?
-
also 1 Byte um einen LONG Wert zu schreiben ist ein bißchen zu klein
-
außerdem:
lpBuffer
[in] Pointer to the buffer that contains data to be written into the address space of the specified process.sollte heißen:
DWORD dwAdress, dwBuffer = 123456; WriteProcessMemory(hProcess,reinterpret_cast<LPVOID>(dwAdress),&dwBuffer,sizeof(DWORD),0);
-
lol!
Ich Idiot!Endlich! Es Funktioniert!!!!
DANKE DANKE DANKE!!!!!!!!
-
na penner, es geht doch.