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


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

Получает базовое имя указанного модуля.

Синтаксис

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

Параметры

[in] hProcess

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

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

[in, optional] hModule

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

[out] lpBaseName

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

[in] nSize

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

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

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

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

Комментарии

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

Чтобы получить базовое имя модуля в текущем процессе, используйте функцию GetModuleFileName , чтобы получить полное имя модуля, а затем используйте вызов функции, strrchr(szmodulename, '\') например , чтобы проверить начало базового имени в строке имени модуля. Это более эффективно и надежнее, чем вызов GetModuleBaseName с дескриптором для текущего процесса.

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

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

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

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

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

Примеры

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

Примечание

Заголовок psapi.h определяет GetModuleBaseName в качестве псевдонима, который автоматически выбирает версию 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

GetModuleFileNameEx

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

Функции PSAPI

strrchr, wcsrchr, _mbsrchr, _mbsrchr_l