2010-06-03 2 views
0

Я пишу драйвер устройства, загружаемый сторонним драйвером. Мне нужно определить имя драйвера стороннего производителя, который загружает драйвер моего устройства (для целей отладки).Как определить имя DLL (строки), которое загрузило мою DLL?

Например, GetModuleFileName предоставит мне имя исполняемого файла. Вместо этого я бы хотел получить имена DLL.

Стек трассировки может быть одним из следующих:

(а)

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

(б)

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

(с)

app2.exe 
common.dll 
my.dll 

P.S. - Мне нужен только метод C++ \ Windows

ответ

3

Я предполагаю, что у вас есть дескриптор процесса или идентификатор процесса вашего my.dll загружаются в

Смотрите пример MSDN на http://msdn.microsoft.com/en-us/library/ms686701(v=VS.85).aspx который будет сделать снимок. процесса и предоставить всю информацию.

Интересный метод в BOOL ListProcessModules(DWORD dwPID):

MODULEENTRY32 имеет поле под названием szModule, который содержит имя модуля. См http://msdn.microsoft.com/en-us/library/ms684225(VS.85).aspx

Все записи модуля могут быть извлечены из процесса с использованием CreateToolhelp32Snapshot, который требует идентификатор процесса (th32ProcessID из PROCESSENTRY32).

Затем вы будете перебирать все модули моментального снимка, используя Module32First и Module32Next. Кроме того, не забудьте закрыть ручку, указанную CreateToolhelp32Snapshot.

(Примечание: эти методы доступны из kernel32.dll)

Это называется модуль Walking, больше здесь: http://msdn.microsoft.com/en-us/library/ms684236(v=VS.85).aspx (описано, что в этом ответе уже)

0

Если это для отладки цели только, вы можете просто сделать stackwalk

См. это stackoverflow ответить для получения более подробной информации

Смежные вопросы