VirtualQueryEx возвращает MEMORY_BASIC_INFORMATION с размером области -1.

Пишу сканер памяти. Сначала я использую вызов VirtualQueryEx для получения базового адреса памяти и размера области в struct MEMORY_BASIC_INFORMATION, а затем использую вызов ReadProcessMemory для чтения памяти.

Проблема, с которой я столкнулся, заключается в том, что VirtualQueryEx заполняет MEMORY_BASIC_INFORMATION.Region Size -1.

Почему это происходит? В чем смысл этого -1?


person Daniyal Yasin    schedule 21.06.2013    source источник
comment
Возвращает ли VirtualQueryEx успех (ненулевое значение)?   -  person raj raj    schedule 21.06.2013
comment
.. и если это не так, что возвращает GetLastError()?   -  person Alex K.    schedule 21.06.2013
comment
Являются ли ваш процесс и цель 32-битными или 64-битными? И, пожалуйста, покажите какой-нибудь код и докажите, что вы правильно вызываете функции и правильно проверяете ошибки.   -  person David Heffernan    schedule 21.06.2013
comment
while((bytes_to_read=VirtualQueryEx(hProcess,addr,&meminfo,sizeof(MEMORY_BASIC_INFORMATION)))!=0) { if (meminfo.State & MEM_FREE)//checking if memory page is free or used { addr += meminfo.RegionSize;//here it is adding -1 so it is not going to next page continue; } Я делаю это на 64-битной виртуальной машине VirtualBox с Win 7.   -  person Daniyal Yasin    schedule 21.06.2013
comment
Что бы это ни стоило, работающий сканер, который может стать отправной точкой: stackoverflow.com/a/10373209/179910. (Я тестировал это на нескольких разных операционных системах, поэтому, если это не работает для вас, скорее всего, это проблема с вашей средой).   -  person Jerry Coffin    schedule 24.06.2013