如何获取所有 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
我无法获取给定程序的所有列出的 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