can not get MEMORY_BASIC_INFORMATION

  • Thread starter Thread starter Ryanivanka
  • Start date Start date
R

Ryanivanka

hi,
I want to get some memory information.
the following codes are in a win32 DLL.
---------------------------------------------------------------------------------
MEMORY_BASIC_INFORMATION mbi;
memset(&mbi, 0, sizeof(MEMORY_BASIC_INFORMATION));
DWORD dwOldProtect = 0;
HMODULE h;

/* the "pv" is a DWORD address ,for example,DWORD pv=0xf8003400,it's
an
address of code instruction or a function return address*/

VirtualProtect((LPVOID)pv,sizeof(HANDLE),PAGE_READWRITE,&dwOldProtect);

if(VirtualQuery((LPVOID)pv,&mbi,sizeof(MEMORY_BASIC_INFORMATION))!=0)
h=(HMODULE)mbi.AllocationBase;
----------------------------------------------------------------------------------

the values of "mbi" are all zero,it does not get any
information.VirtualProtect() return false and VirtualQuery()return 0.
MSDN
said if the pv address is kernel mode,the latter function will return
0.but
the address is just a normal one in an MFC supported DLL which is in
the
same process with my DLL.
Why do they fail?

could anyone help me to figure out the reason and solution? thank you.

regards,
Ryan
 
Ryanivanka said:
hi,
I want to get some memory information.
the following codes are in a win32 DLL.
------------------------------------------------------------------------------ ---
MEMORY_BASIC_INFORMATION mbi;
memset(&mbi, 0, sizeof(MEMORY_BASIC_INFORMATION));
DWORD dwOldProtect = 0;
HMODULE h;

/* the "pv" is a DWORD address ,for example,DWORD pv=0xf8003400,it's
an
address of code instruction or a function return address*/

VirtualProtect((LPVOID)pv,sizeof(HANDLE),PAGE_READWRITE,&dwOldProtect);

if(VirtualQuery((LPVOID)pv,&mbi,sizeof(MEMORY_BASIC_INFORMATION))!=0)
h=(HMODULE)mbi.AllocationBase;
------------------------------------------------------------------------------ ----

the values of "mbi" are all zero,it does not get any
information.VirtualProtect() return false and VirtualQuery()return 0.
MSDN
said if the pv address is kernel mode,the latter function will return
0.but
the address is just a normal one in an MFC supported DLL which is in
the
same process with my DLL.
Why do they fail?

could anyone help me to figure out the reason and solution? thank you.

regards,
Ryan

What's the result of GetLastError after the failed call to VirtualProtect?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top