GetModuleFileNameA возвращает странные результаты
Я пытаюсь получить имя модуля, загруженного в другой процесс с GetModuleFileNameA
,
Я загрузил символ с помощью dbgHelp и получил его базовый адрес модуля, но произошло 2 странные вещи:
1. Иногда GetModuleFileNameA
возвращает системные коды ошибок 5: доступ запрещен.
2. Возвращает неверное имя модуля. для функции, которую я знаю, чтобы быть в модуле A, я получаю имя модуля B...:/
Кто-нибудь может мне помочь?
Спасибо:)
2 ответа
Пожалуйста, прочитайте документы. Прямо на странице для GetModuleFileName написано
Чтобы найти файл для модуля, который был загружен другим процессом, используйте функцию GetModuleFileNameEx.
GetModuleFileName имеет смысл только для модулей в вашем процессе. Даже если модуль загружен обоими процессами, он может находиться по разному базовому адресу. Вы эффективно кормите мусор GetModuleFileName. Просто чтобы повторить, вам нужно использовать GetModuleFileNameEx
Если ваш процесс хочет получить доступ к другому процессу, он должен иметь права для этого. Это означает, что вашему процессу нужны повышенные права или он должен быть владельцем другого процесса.
Если вы получили неправильное имя, возможно, вы использовали неправильный дескриптор. Это также может объяснить, почему иногда вы получаете отказ в доступе. Если вы передадите дескриптор не тому модулю, у вас может не быть к нему доступа, даже если у вас есть доступ к модулю, имя которого вы хотите знать.