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, которое настолько велико, что, вероятно, является неправильным значением или, по крайней мере, я чего-то не понимаю, есть идеи?

0 ответов

Другие вопросы по тегам