質問

誰かが私を助けてくれませんか、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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top