我在看王艳平编著的《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,现在的系统呢?
    那位高手给我指点啊,谢谢!

解决方案 »

  1.   

    一个HMODULE 实际上就是Win32 加载器映像PE 文件时的起始线性地址。----------------------
    这个不是说得很清楚了吗?再举个例子,比如WinMain的参数hInstance(实例句柄)~ 它也是 你的exe文件被加载到
    进程地址空间的基地址~
      

  2.   

    想更清楚地了解,请参考 <<windows核心编程>>
      

  3.   

    楼上的大哥,《核心编程》我没有看到啊,晕,再好好看看
    -----------------------------
    这个~你先这样理解就行了:一个HMODULE 实际上就是Win32 加载器映像PE 文件时的起始线性地址。
    过渡深究~意义也不是很大~