如何获取所有 dll 文件的所有句柄?

How can I get all the handles of the all dll files?

我无法获取给定程序的所有列出的 dll 文件的句柄。 我想获取列出的 dll 文件的所有句柄。 最重要的是 WebKit.dll 但它的句柄为零。

请帮助我。

这是我的代码:

        Process[] process = Process.GetProcessesByName("program");
        Process process1 = process[0];

        ProcessModuleCollection modules = process1.Modules;
        ProcessModule dllBaseAdress = null;
        foreach (ProcessModule m in modules)
        {
            // LIST ALL DLL OF THE PROGRAM PROCESS:
            if (m.ModuleName != "WebKit.dll1")
            {

                dllBaseAdress = m;
                string DLL_file_name = m.ModuleName;                    
                IntPtr DLL_file = GetModuleHandle(DLL_file_name);
                Console.WriteLine("GetModuleHandle: " + DLL_file.ToInt32() + ", DLL Name: " + m.ModuleName + "\n");
                //break;
            }
        }
        IntPtr WebKit_dll = GetModuleHandle("WebKit.dll");
        Console.WriteLine("GetModuleHandle: " + WebKit_dll.ToInt32());

        IntPtr dllPtr = dllBaseAdress.BaseAddress;
        Console.WriteLine("\nDLL BaseAdress.BaseAddress: " + dllPtr + " ");

这并不是一个完整的答案,而是一个起点。如果有时间我会回来补充更多细节。

您想要一个程序来枚举由任意第二个进程加载的所有 DLL 模块。 GetModuleHandle 不能用于此目的,因为它只检索当前正在执行的进程的句柄:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms683199%28v=vs.85%29.aspx GetModuleHandle function Retrieves a module handle for the specified module. The module must have been loaded by the calling process.

为了从 C# 完成此操作,似乎需要在 Win32 P/Invoke 上 API 函数 NtQuerySystemInformation。

我发现这个参考资料似乎显示了所需的所有相关功能和结构:http://forum.sysinternals.com/topic18892.html