ReadProcessMemoryは常にGLE:299で失敗します
-
28-10-2019 - |
質問
誰かが私を助けてくれませんか、readprocessmemory関数が失敗し、getlasterror = 299を知りません。ここに私のコードがあります。
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が割り当てられ、Hprocessは非nullです
私のアプリは管理者として実行されており、私が読み込もうとしているアプリは標準のUSERMODEアプリケーションです。
アドバイスしていただけませんか。ありがとう
解決
から引用 Win32エラーコードのMSDN:
error_partial_copy
299(0x12b)
readprocessmemoryまたはwriteprocessmemoryリクエストの一部のみが完了しました。
私の推測では、指定したアドレスには有効なデータが含まれていましたが、そのアドレスと(アドレス +コピーの長さ)の間のどこかに、メモリがマッピングされていませんでした。
見る ページテーブルのウィキペディア また 仮想メモリ オペレーティングシステムがアドレス空間を確立する方法についてもう少し理解する。その用語では、そのメモリの範囲のどこかに、無効なページテーブルエントリがありました。
実際、あなたのコードを見ると...これがうまくいかないことは明らかです。 BaseAddress
パラメーターはゼロです。他のプロセスのアドレス空間でヌルポインターを抑制しようとしています。ターゲットプロセス自体がこれを引っ張ろうとした場合、クラッシュします。 :-) Exeのヘッダーは、0に対処するようにマップされていません。EXEファイル自体から読み込もうとしている場合は、単に呼び出すことをお勧めします CreateFile
によって得られたパスで GetModuleFileNameEx
.
所属していません StackOverflow