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


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

Извлекает имя исполняемого файла для указанного процесса.

Синтаксис

DWORD GetProcessImageFileNameA(
  [in]  HANDLE hProcess,
  [out] LPSTR  lpImageFileName,
  [in]  DWORD  nSize
);

Параметры

[in] hProcess

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

Windows Server 2003 и Windows XP: Дескриптор должен иметь право доступа к PROCESS_QUERY_INFORMATION .

[out] lpImageFileName

Указатель на буфер, получающий полный путь к исполняемому файлу.

[in] nSize

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

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

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

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

Комментарии

Файл Psapi.dll устанавливается в каталог %windir%\System32. Если на компьютере есть другая копия этой библиотеки DLL, это может привести к следующей ошибке при запуске приложений в системе: "Не удалось найти точку входа процедуры GetProcessImageFileName в библиотеке динамической компоновки PSAPI.DLL". Чтобы обойти эту проблему, найдите все версии, которые не находятся в каталоге %windir%\System32, а затем удалите или переименуйте их, а затем перезапустите.

Функция GetProcessImageFileName возвращает путь в форме устройства, а не буквы диска. Например, имя файла C:\Windows\System32\Ctype.nls в форме устройства будет выглядеть следующим образом:

\Device\Harddisk0\Partition1\Windows\System32\Ctype.nls

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

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

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

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

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

Примечание

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

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа 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

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

Функции PSAPI

Сведения о процессе

QueryFullProcessImageName