MEMORY_BASIC_INFORMATION
typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
DWORD RegionSize;
DWORD State;
DWORD Protect;
DWORD Type; }
MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
這個結構體包含了進程虛擬地址空間中的一系列頁面信息
VirtualQuery
用來查詢調用進程的虛擬地址中的一段頁面的信息
DWORD VirtualQuery( LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
DWORD dwLength );
第一個參數指向將要查詢的頁面區域的基地址
第二個參數是指向MEMORY_BASIC_INFORMATION結構體的指針,查詢到的頁面信息會被寫入到這個結構體中。
第三個參數以字節的方式指明第二個參數的大小
整個實現方法:
[cpp]
HMODULE WINAPI ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if (::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}