美文网首页
LoadLibrary和FreeLibrary

LoadLibrary和FreeLibrary

作者: 7bfedbe4863a | 来源:发表于2018-01-04 22:57 被阅读0次

    LoadLibrary 和LoadLibraryEx

    HMODULE LoadLibrary(PCTSTR pazDllPathName);
    

    -HMODULE等价于HINSTANCE,两者可以换用。

    HMODULE LoadLibraryEx(
        PCTSTR pszDllPathName,
        HANDLE hFile,
        DWORD dwFlags);
    

    -hFile是为将来扩充所保留的,必须设为NULL。
    -dwFlags可以设为:
    --0
    --DONT_RESOLVE_DLL_REFERENCES告诉系统只需将DLL映射到调用进程的地址空间,不调用DllMain。
    --LOAD_LIBRARY_AS_DATAFILE将DLL作为数据文件映射到进程的地址空间中。
    --

    FreeLibrary和FreeLibraryAndExitThread

    VOID FreeLibrary(HMODULE hInstDll);
    

    -调用该函数只是把调用LoadLibrary时递增的使用计数递减,减至0时撤销。
    -如果分别调用FreeLibrary和ExitThread,会导致:FreeLibrary立即从进程的地址空间中撤销对DLL的映射,当FreeLibrary调用返回时,调用ExitThread的代码已经不存在的,线程试图执行的是不存在的代码,这将会引发访问违规,导致整个进程被终止。

    VOID FreeLibraryAndExitThread(
        HMODULE hInstDll,
        DWORD dwExitCode)
    {
        FreeLibrary(hInstDll);
        ExitThread(dwCode);
    }
    

    -该函数在Kernel31.dll中实现。
    -这个函数会调用FreeLibrary,对DLL的映射被立即撤销,而要执行的下一条指令仍在Kernel32.dll中,而不是在被撤销的dll映射中,即可以继续执行并调用ExitThread。
    -ExitThtread使线程终止而不会再返回。

    相关文章

      网友评论

          本文标题:LoadLibrary和FreeLibrary

          本文链接:https://www.haomeiwen.com/subject/lcndnxtx.html