Как узнать внутри метода dll из какого модуля ее загрузили.
Из exe или из какой-то другой dll.
Для примера, ситуация такая:
exe загружает COM объект (dll).
этот COM объект загружает dll.
как в этой (последней) dll узнать путь и имя к загрузившей ее dll.
AF>Практически никак, разве что раскрутить стек в DllMain и посмотреть, кто вызвал LoadLibrary[Ex]. Интересно, зачем такое может понадобиться?
1. А где можно почитать как раскрутить стек?
2. Чтобы проверить, что DLL пытается использовать именно тот модуль
Re[3]: Как узнать из какого модуля ее загрузили DLL
Здравствуйте, BKol, Вы писали:
BK>1. А где можно почитать как раскрутить стек?
Где почитать не знаю, но в общем виде задача не решаема. С этим не всегда справляются даже отладчики при наличие отладочной информации о модулях.
Можно попробовать сделать тестовый пример — exe, который делает LoadLybrary для dll, поставить точку останова в DllMain (__asm int 3) и посмотреть стэк в отладчике. Так можно будут узнать смещение от текущего значения esp, по которуму нужно проверять адрес. Но наверняка для разных версий ОС это смещение не будет одинаковым.
BK>2. Чтобы проверить, что DLL пытается использовать именно тот модуль
Если это делается с целью защиты, Вы получите дополнительный "бонус" — проблемы у легальных пользователей.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: Как узнать из какого модуля ее загрузили DLL
Здравствуйте, BKol, Вы писали: BK>2. Чтобы проверить, что DLL пытается использовать именно тот модуль
Чисто предложение. В "именно том" модуле непосредственно перед LoadLibrary создать поименованый мьютекс и убить его сразу после LoadLibrary. В DllMain проверить существование мьютекса.