Windows API を使用してメモリ情報を照会しようとしています。x86 と x64 の両方を対象にしたいと考えています。MEMORY_BASIC_INFORMATIONに関するドキュメントを読んだところ、ターゲットプロセスの「ビット数」に応じて異なるクエリを実行するには2つ必要であることがわかりました。
しかし、x86 プロセスを照会して MEMORY_BASIC_INFORMATION32 構造体を使用すると、システム エラー コード 24 が表示されます。これは、コマンドの長さが正しくないことを示しています。
しかし、MEMORY_BASIC_INFORMATION64 バージョンを使用すると、呼び出しは x86 プロセスと x64 プロセスの両方で機能します。それはどうした。それは、ドキュメントが私に言っていることを私が理解していることではありません。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa366775(v=vs.85).aspx
したがって、この動作はバージョン間で移植可能です。誰でもこの動作を説明できます。それとも、完全に台無しになっているのは私のシステムだけですか?
これは私が使用するコードです:
class Process {
HANDLE m_handle;
bool Process::query_impl(RemotePointer address, void *info, size_t size) {
return VirtualQueryEx(m_handle, address.get(), (MEMORY_BASIC_INFORMATION*) info, size);
}
public:
bool Process::query(RemotePointer address, MEMORY_BASIC_INFORMATION64 &info) {
return query_impl(address, &info, sizeof(MEMORY_BASIC_INFORMATION64));
}
bool Process::query(RemotePointer address, MEMORY_BASIC_INFORMATION32 &info) {
return query_impl(address, &info, sizeof(MEMORY_BASIC_INFORMATION32));
}
}
よろしくお願いします。