Поделиться через


Функция GetModuleFileNameExA (psapi.h)

Извлекает полный путь для файла, содержащего указанный модуль.

Синтаксис

DWORD GetModuleFileNameExA(
  [in]           HANDLE  hProcess,
  [in, optional] HMODULE hModule,
  [out]          LPSTR   lpFilename,
  [in]           DWORD   nSize
);

Параметры

[in] hProcess

Дескриптор процесса, содержащего модуль.

Дескриптор должен иметь права доступа PROCESS_QUERY_INFORMATION и PROCESS_VM_READ . Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.

Windows 10 и более поздних версий, Windows Server 2016 и более поздних версий. Если параметр hModule имеет значение NULL, дескриптор требует только PROCESS_QUERY_LIMITED_INFORMATION прав доступа.

Функция GetModuleFileNameEx не получает путь к модулям, которые были загружены с помощью флага LOAD_LIBRARY_AS_DATAFILE . Дополнительные сведения см. в разделе LoadLibraryEx.

[in, optional] hModule

Дескриптор модуля. Если этот параметр имеет значение NULL, GetModuleFileNameEx возвращает путь к исполняемому файлу процесса, указанного в hProcess.

[out] lpFilename

Указатель на буфер, получающий полный путь к модулю. Если размер имени файла больше, чем значение параметра nSize , функция завершается успешно, но имя файла усекается и заканчивается значением NULL.

[in] nSize

Размер буфера lpFilename в символах.

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение указывает длину строки, скопированной в буфер.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Функция GetModuleFileNameEx в основном предназначена для использования отладчиками и аналогичными приложениями, которые должны извлекать сведения о модуле из другого процесса. Если список модулей в целевом процессе поврежден или еще не инициализирован или список модулей изменяется во время вызова функции в результате загрузки или выгрузки библиотек DLL, getModuleFileNameEx может завершиться ошибкой или возвратить неверные сведения.

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

Чтобы получить имя main исполняемого модуля для удаленного процесса, используйте функцию GetProcessImageFileName или QueryFullProcessImageName. Это эффективнее и надежнее, чем вызов функции GetModuleFileNameEx с дескриптором модуля NULL.

Начиная с Windows 7 и Windows Server 2008 R2, Psapi.h устанавливает номера версий для функций PSAPI. Номер версии PSAPI влияет на имя, используемое для вызова функции, и библиотеку, которую должна загрузить программа.

Если PSAPI_VERSION имеет значение 2 или больше, эта функция определяется как K32GetModuleFileNameEx в Psapi.h и экспортируется в Kernel32.lib и Kernel32.dll. Если PSAPI_VERSION равно 1, эта функция определяется как GetModuleFileNameEx в Psapi.h и экспортируется в Psapi.lib и Psapi.dll в качестве оболочки, которая вызывает K32GetModuleFileNameEx.

Программы, которые должны работать в более ранних версиях Windows, а также Windows 7 и более поздних версиях, всегда должны вызывать эту функцию как GetModuleFileNameEx. Чтобы обеспечить правильное разрешение символов, добавьте Psapi.lib в макрос TARGETLIBS и скомпилируйте программу с параметром -DPSAPI_VERSION=1. Чтобы использовать динамическое связывание во время выполнения, загрузите Psapi.dll.

Примеры

Пример см. в разделе Перечисление всех модулей для процесса.

Примечание

Заголовок psapi.h определяет GetModuleFileNameEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header psapi.h
Библиотека Kernel32.lib в Windows 7 и Windows Server 2008 R2; Psapi.lib (если PSAPI_VERSION=1) в Windows 7 и Windows Server 2008 R2; Psapi.lib в Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP
DLL Kernel32.dll в Windows 7 и Windows Server 2008 R2; Psapi.dll (если PSAPI_VERSION=1) в Windows 7 и Windows Server 2008 R2; Psapi.dll в Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP

См. также раздел

EnumProcesses

GetModuleBaseName

GetModuleFileName

GetModuleHandle

LoadLibrary

Информация модуля

Функции PSAPI