Я пытаюсь запросить информацию о памяти с помощью Windows API.
Я хочу ориентироваться как на x86, так и на x64. Поэтому я читаю документы о
MEMORY_BASIC_INFORMATION и обнаружил, что мне нужно два, чтобы сделать
разные запросы в зависимости от целевого процесса «битность».
Но когда я запрашиваю процесс 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));
}
}
Спасибо заранее.
Задача ещё не решена.
Других решений пока нет …