GetModuleFileNameA возвращает странные результаты - PullRequest
2 голосов
/ 16 апреля 2011

Я пытаюсь получить имя модуля, загруженного в другой процесс с помощью GetModuleFileNameA.
Я загрузил символ с помощью dbgHelp и получил его базовый адрес модуля, но произошло 2 странные вещи:
1Иногда GetModuleFileNameA возвращает системные коды ошибок 5: Доступ запрещен.
2. Возвращается неправильное имя модуля.для функции, которая, как я знаю, находится в модуле A, я получаю имя модуля B ...: /

Может ли кто-нибудь мне помочь?
спасибо:)

Ответы [ 2 ]

3 голосов
/ 16 апреля 2011

Пожалуйста, прочитайте документы.Прямо на странице для GetModuleFileName написано

Чтобы найти файл для модуля, который был загружен другим процессом, используйте функцию GetModuleFileNameEx.

GetModuleFileName имеет смысл только для модулей в вашем процессе.Даже если модуль загружен обоими процессами, он может находиться по разному базовому адресу.Вы эффективно кормите мусор GetModuleFileName.Просто чтобы повторить, вам нужно использовать GetModuleFileNameEx

0 голосов
/ 16 апреля 2011

Если ваш процесс хочет получить доступ к другому процессу, он должен иметь права для этого.Это означает, что вашему процессу нужны повышенные права или он должен быть владельцем другого процесса.

Если вы получили неправильное имя, возможно, вы использовали неправильный дескриптор.Это также может объяснить, почему иногда вы получаете отказ в доступе.Если вы передадите дескриптор не тому модулю, у вас может не быть к нему доступа, даже если у вас есть доступ к модулю, имя которого вы хотите знать.

...