Question

Quelqu'un pourrait-il m'aider s'il vous plaît, je ne sais pas pourquoi la fonction ReadProcessMemory échoue et GetLastError= 299. Voici mon code, je ne vois pas que je fais quelque chose de mal.

if(ReadProcessMemory(hProcess, (void*)0, IDH_Buffer, sizeof(IMAGE_DOS_HEADER), 0) != true)
        std::cout << "Failed to read from Process, GLE=" << GetLastError()  << "\n";

IDH_Buffer a été attribué, hProcess est non NULL

Mon application s'exécute en tant qu'administrateur et l'application que j'essaie de lire est une application en mode utilisateur standard.

Pouvez-vous me conseiller. Merci

Était-ce utile?

La solution

Citations de MSDN sur les codes d'erreur Win32 :

ERROR_PARTIAL_COPY
299 (0x12B)
Seule une partie d'une demande ReadProcessMemory ou WriteProcessMemory a été exécutée.

Je suppose que l'adresse que vous avez spécifiée contenait des données valides, mais quelque part entre cette adresse et (adresse + longueur de la copie), il n'y avait pas de mémoire mappée.

Voir wikipedia sur le tableau des pages ou mémoire virtuelle pour comprendre un peu plus comment un système d'exploitation établit un espace d'adressage. Dans ce langage, quelque part dans cette plage de mémoire, il y avait une entrée de table de page qui n'était pas valide.

En fait, en regardant votre code ... Il est évident que cela ne fonctionnera pas. Le paramètre BaseAddress est zéro. Vous essayez de déréférencer un pointeur NULL dans l'espace d'adressage de l'autre processus. Si le processus cible lui-même essayait d'extraire cela, il planterait. :-) L'en-tête de l'EXE n'est pas mappé à l'adresse 0. Si vous essayez de lire à partir du fichier EXE lui-même, je suggérerais simplement d'appeler CreateFile sur un chemin obtenu par GetModuleFileNameEx.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top