ReadProcessMemory fallisce sempre con GLE: 299
-
28-10-2019 - |
Domanda
Qualcuno potrebbe aiutarmi, non so perché la funzione ReadProcessMemory fallisca e getLasterror = 299. Ecco il mio codice, non riesco a vedere che sto facendo qualcosa di sbagliato.
if(ReadProcessMemory(hProcess, (void*)0, IDH_Buffer, sizeof(IMAGE_DOS_HEADER), 0) != true)
std::cout << "Failed to read from Process, GLE=" << GetLastError() << "\n";
È assegnato Idh_buffer, hprocess è non null
La mia app è in esecuzione come amministratore e l'app da cui sto cercando di leggere è un'applicazione UserMode standard.
Per favore, potresti consigliarmi. Grazie
Soluzione
Citando da MSDN sui codici di errore Win32:
ERROR_PARTIAL_COPY
299 (0x12b)
È stata completata solo una parte di una readProcessMemory o di WriteProcessMemory.
La mia ipotesi è che l'indirizzo che hai specificato conteneva alcuni dati validi, ma da qualche parte tra quell'indirizzo e (indirizzo + lunghezza della copia), non c'era memoria mappata.
Vedere Wikipedia sulla tabella della pagina o memoria virtuale Per capire un po 'di più su come un sistema operativo stabilisce uno spazio di indirizzi. In quel linguaggio, da qualche parte in quella gamma di memoria c'era una voce della tabella di pagina che non era valida.
In realtà, guardando il tuo codice ... è ovvio che questo non funzionerà. Il BaseAddress
Il parametro è zero. Stai cercando di fare la prova di un puntatore nullo nello spazio degli indirizzi dell'altro processo. Se il processo target stesso provasse a tirarlo, si schianterebbe. :-) L'intestazione di EXE non è mappata per l'indirizzo 0. Se stai cercando di leggere dal file EXE stesso, suggerirei semplicemente di chiamare CreateFile
su un percorso ottenuto da GetModuleFileNameEx
.