我在看王艳平编著的《windows程序设计》(人民邮电出版社出的那本书)时遇到一个问题 在 第9章动态链接库和钩子那章里315页有个小程序是这样的:
HMODULE WINAPI ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv,&mbi,sizeof(mbi))!=0)
{ return (HMODULE)mbi.AllocationBase;}
else
{ return NULL;}
}
这个函数我不大理解,mbi中的AllocationBase是VirtualAlloc分配的基地址,怎么可以将其强制转换成为模块句柄?
我查了一些资料,有来自《WINDOW 95系统程序设计大奥秘》中的解释是:一个HMODULE 实际上就是Win32 加载器映像PE 文件时的起始线性地址。难道这两者之间有关系?而且这是windows95,现在的系统呢?
那位高手给我指点啊,谢谢!
HMODULE WINAPI ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv,&mbi,sizeof(mbi))!=0)
{ return (HMODULE)mbi.AllocationBase;}
else
{ return NULL;}
}
这个函数我不大理解,mbi中的AllocationBase是VirtualAlloc分配的基地址,怎么可以将其强制转换成为模块句柄?
我查了一些资料,有来自《WINDOW 95系统程序设计大奥秘》中的解释是:一个HMODULE 实际上就是Win32 加载器映像PE 文件时的起始线性地址。难道这两者之间有关系?而且这是windows95,现在的系统呢?
那位高手给我指点啊,谢谢!
这个不是说得很清楚了吗?再举个例子,比如WinMain的参数hInstance(实例句柄)~ 它也是 你的exe文件被加载到
进程地址空间的基地址~
-----------------------------
这个~你先这样理解就行了:一个HMODULE 实际上就是Win32 加载器映像PE 文件时的起始线性地址。
过渡深究~意义也不是很大~