除了在DllMain中保存DLL的实例句柄,还有没有其它办法在Dll中获取自身DLL的实例句柄?解决办法

除了在DllMain中保存DLL的实例句柄,还有没有其它办法在Dll中获取自身DLL的实例句柄?
如题:
一个EXE加载了一个DLL。我想在DLL中动态的获取DLL本身的实例句柄.有没有什么方法?
我不想使用DllMain中保存全局句柄的方法。

------解决方案--------------------
inline static HMODULE GetCurrentModule(BOOL bRef)
{
HMODULE hModule = NULL;
if (GetModuleHandleEx(bRef ? GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS : (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT), (LPCWSTR)GetCurrentModule, &hModule))
{
return hModule;
}
return NULL;
}

------解决方案--------------------
糟糕,有个小bug,PE文件的DOS头魔法字MZ后面不一定是9000
改进版
C/C++ code
    HANDLE handle = NULL ;
    try
    {
        __asm {
            lea        eax,get_label
            and        eax,0xFFFFF000
        get_Label:
            sub        eax,0x1000
            cmp        word ptr [eax],0x5A4D
            jne        get_Label
            mov        handle,eax
        }
    }
    catch (...)
    {    
    }
    printf("0x%p\r\n", handle);