VirtualQueryEx возвращает невозможное значение mbi.RegionSize в ctypes
Я создаю сканер памяти, и в середине я использую VirtualQueryEx, чтобы получить размер процесса в байтах. Это мои настройки структуры VirtualQueryEx и MEMORY_BASIC_INFORMATION:
VirtualQueryEx = windll.kernel32.VirtualQueryEx
VirtualQueryEx.restype = c_size_t
class MEMORY_BASIC_INFORMATION(Structure):
_fields_ = [
("BaseAddress", c_ulonglong),
("AllocationBase", c_ulonglong),
("AllocationProtect", c_ulong),
("__alignment1", c_ulong),
("RegionSize", c_ulonglong),
("State", c_ulong),
("Protect", c_ulong),
("Type", c_ulong),
("__alignment2", c_ulong),
]
VirtualQueryEx.argtypes = [
wintypes.HANDLE, # [in] HANDLE hProcess
wintypes.LPCVOID, # [in] LPCVOID lpAdress
POINTER(MEMORY_BASIC_INFORMATION), # [out] PMEMORY_BASIC_INFORMATION lpBuffer
c_size_t, # [in] SIZE_T lpBuffer
]
и прежде чем я вызову функцию, я также определяю некоторые переменные
mbi = MEMORY_BASIC_INFORMATION()
lpAdress = wintypes.LPVOID(None)
hProcess which is a OpenProcess() Handle
тогда я называю это
VirtualQueryEx( hProcess, lpAdress, byref(mbi), sizeof(mbi))
и после того, как я проверю вывод поля RegionSide MEMORY_BASIC_INFORMATION
mbi.RegionSize
в результате получается сумасшедшее количество байтов, например 135762539134976, которое настолько велико, что, вероятно, является неправильным значением или, по крайней мере, я чего-то не понимаю, есть идеи?