2010-06-03 21 views
0

我正在寫一個由第三方驅動程序加載的設備驅動程序。我需要一種方法來確定加載我的設備驅動程序的第三方驅動程序的名稱(用於調試目的)。例如,GetModuleFileName將爲我提供可執行文件的名稱。我希望能夠獲取DLL名稱。如何確定加載我的DLL的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下

回答

3

我假設你有一個進程句柄或過程的ID你my.dll在加載

看到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(的PROCESSENTRY32th32ProcessID)進行檢索。

然後,您將使用Module32FirstModule32Next迭代快照的所有模塊。此外,不要忘記關閉CreateToolhelp32Snapshot給出的句柄。

(注:這些方法都可以從KERNEL32.DLL

這就是所謂的模塊散步,更在這裏:http://msdn.microsoft.com/en-us/library/ms684236(v=VS.85).aspx(描述了在這個答案已經)

0

如果它是調試只可以做棧道

看到這個stackoverflow回答有關詳情