ReadProcessMemory mit Ctypes

8

Ich arbeite an einem kleinen solitären Trainer. Ich weiß nicht, warum die Funktion ReadProcessMemory nicht funktioniert. Normalerweise gibt es ein Falsch oder Wahr zurück, aber in diesem Fall nichts. Der GetlastError () gibt mir den Errorcode 6.

%Vor%     
John Doe 03.10.2012, 16:15
quelle

1 Antwort

10

Überprüfen Sie den Community-Kommentar zum MSDN ReadProcessMemory Seite, Zitat (sic):

  

W7 führt keinen Lese-Prozessspeicher

aus      

Möglicherweise müssen Sie Ihre Zugriffsberechtigungen für "SE_DEBUG_NAME" für das aktuelle Prozesstoken überprüfen. Wenn nicht aktiviert. Aktiviert es. Dies muss natürlich als Administrator erfolgen.

Deklarieren Sie auch die Rückgabetypen vollständig und verwenden Sie den Parameter use_last_error , wobei ctypes den Wert GetLastError() unmittelbar nach dem Aufruf intern zwischenspeichert. Ansonsten könnte es falsch sein. Wenn Sie sich auf einem 64-Bit-System befinden, sind SIZE_T und Zeiger 64-Bit-Werte, so dass ctypes die Typen kennen muss, um den Stapel für den Aufruf korrekt einzurichten.

%Vor%

Auch, FYI, sogar mit allen Fixes bekomme ich den gleichen Fehlerwert, aber ich habe nicht die Mühe gemacht, SE_DEBUG_NAME zu aktivieren.

Gelöst

Die folgende Zeile ist das Problem:

%Vor%

win32api.OpenProcess gibt ein temporäres PyHANDLE zurück, das zerstört wird und den Handle schließt , nachdem das Handle abgerufen wurde.

Die Lösung ist zu verwenden:

%Vor%

PROCESS enthält dann das Objekt PyHANDLE und das Handle bleibt gültig.

    
Mark Tolonen 04.10.2012, 04:14
quelle