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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top