GetModuleHandle()与GetModuleHandleEx()说明GetModuleHandle()与GetModuleHandleEx()这两个函数都是用于获取"已经映射到调用进程中"的模块的句柄。1.GetModuleHandle(lpModuleName)lpModuleName是模块的名称,可以是**.dll或者**.exe,如果没有扩展名,则默认为dll.如果模块名称通过路径来指定,则路径中必须使用"\",而不是"/".执行时,该函数通过名称(大小写不敏感)来查看调用进程已映射的模块,返回符合的模块句柄。如果GetModuleHandle(NULL),则返回调用进程本身的句柄。成功,则返回句柄,失败,返回NULL。错误信息:GetLastError()ps:GetModuleHandle函数不会增加所指定模块的引用数,也就是说,不管调用该函数几次,只要调用一次FreeLibrary函数,该模块就从进程中卸载了。在多线程中,模块句柄在不同线程中不总是有效的。如:当在一个线程中调用了该函数获取了某一模块的句柄,但在使用该句柄之前,另一个线程把该句柄 Free了,并重新获取了其他模块的句柄。这个时候第一个线程再去使用这个句柄变量,就不再是之前它打算操作的那个模块了,而是第二个线程修改后的模块 句柄了。2.GetModuleHandleEx(dwFlags, lpModuleName, phModule)dwFlags:如果是0,则当调用该函数时,模块的引用计数自动增加,调用者在使用完模块句柄后,必须调用一次FreeLibrary如果是GET_MODULE_HANDLE_EX_FLAG_PIN,则模块一直映射在调用该函数的进程中,直到该进程结束,不管调用多少次FreeLibrary如果是GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,则同GetModuleHandle相同,不增加引用计数如果是GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,则lpModuleName是模块中的一个地址phModule存储要找的句柄。其他都和GetModuleHandle函数相同
GetModuleHandle与GetModuleHandleEx
最新推荐文章于 2024-06-11 09:13:18 发布