如何确定加载我的DLL的DLL(字符串)的名称?

时间:2010-06-03 23:09:19

标签: c++ dll windows-7

我正在编写由第三方驱动程序加载的设备驱动程序。我需要一种方法来确定加载我的设备驱动程序的第三方驱动程序的名称(用于调试目的)。

例如,GetModuleFileName将为我提供可执行文件的名称。我希望能够获得DLL名称。

堆栈跟踪可能是以下之一:

(a)中

app0.exe
abc.dll <- detect "abc"
common.dll
my.dll

(b)中

app1.exe
xyz.dll <- detect "xyz"
common.dll
my.dll

(c)中

app2.exe
common.dll
my.dll

P.S。 - 我只需要一个C ++ \ Windows

的方法

2 个答案:

答案 0 :(得分:3)

我假设您有一个流程句柄,或者您加载了my.dll的流程的ID。

请参阅http://msdn.microsoft.com/en-us/library/ms686701(v=VS.85).aspx上的MSDN示例,该示例将获取流程的快照并提供所有信息。

有趣的方法是BOOL ListProcessModules( DWORD dwPID )

MODULEENTRY32有一个名为szModule的字段,其中包含模块的名称。见http://msdn.microsoft.com/en-us/library/ms684225(VS.85).aspx

可以使用CreateToolhelp32Snapshot从流程中检索所有模块条目,这需要流程ID(th32ProcessID的{​​{1}})。

然后,您将使用PROCESSENTRY32Module32First迭代快照的所有模块。另外,不要忘记关闭Module32Next给出的句柄。

(注意:这些方法可从 kernel32.dll 获得)

这称为模块行走,更多信息请点击此处:http://msdn.microsoft.com/en-us/library/ms684236(v=VS.85).aspx(已在此答案中说明)

答案 1 :(得分:0)

如果它仅用于调试目的,您可以执行stackwalk

有关详细信息,请参阅此stackoverflow答案