Здравствуйте eXXXplosivo, Вы писали:
XXX>Ситуация: делаем до смешного простой отладчик, для этого обрабатываем отладочные события с помощью WaitForDebugEvent. Эта функция возвращает структуру DEBUG_EVENT. То событие, которое меня интересует — LOAD_DLL_DEBUG_EVENT, то есть событие подгрузки DLL отлаживаемым процессом. В этом случае в DEBUG_EVENT возвращается следующая информация:
XXX>XXX>typedef struct _LOAD_DLL_DEBUG_INFO {
XXX> HANDLE hFile;
XXX> LPVOID lpBaseOfDll;
XXX> DWORD dwDebugInfoFileOffset;
XXX> DWORD nDebugInfoSize;
XXX> LPVOID lpImageName;
XXX> WORD fUnicode;
XXX>} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
XXX>
XXX>Нужно узнать имя файла загружаемой библиотеки. Казалось бы, чего проще — вон же есть lpImageName, указатель на это самое имя! Но не тут-то было... MSDN говорит, что этот член структуры — "strictly optional", и на практике это подтверждается — во всех случаях, что я встречал, этот указатель есть круглый ноль... или же указатель на ноль — но только не на имя DLL
XXX>Вопрос: как имея указанную выше информацию (структуру LOAD_DLL_DEBUG_INFO) узнать имя DLL? Думаю, это возможно, ведь реальные отладчики как-то ведь это делают! Может, зная хэндл можно как-то выудить имя файла?
XXX>Всем зараннее спасибо за помощь!
Используй EnumerateLoadedModules и все само собой утресется...