EnumProcessModules 함수(psapi.h)

지정된 프로세스의 각 모듈에 대한 핸들을 검색합니다.

64비트 애플리케이션이 32비트 모듈, 64비트 모듈 또는 두 가지 유형의 모듈을 열거하는지 여부를 제어하려면 EnumProcessModulesEx 함수를 사용합니다.

구문

BOOL EnumProcessModules(
  [in]  HANDLE  hProcess,
  [out] HMODULE *lphModule,
  [in]  DWORD   cb,
  [out] LPDWORD lpcbNeeded
);

매개 변수

[in] hProcess

프로세스에 대한 핸들입니다.

[out] lphModule

모듈 핸들 목록을 수신하는 배열입니다.

[in] cb

lphModule 배열의 크기(바이트)입니다.

[out] lpcbNeeded

lphModule 배열에 모든 모듈 핸들을 저장하는 데 필요한 바이트 수입니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

EnumProcessModules 함수는 주로 다른 프로세스에서 모듈 정보를 추출해야 하는 디버거 및 유사한 애플리케이션에서 사용하도록 설계되었습니다. 대상 프로세스의 모듈 목록이 손상되었거나 아직 초기화되지 않았거나 DLL이 로드되거나 언로드된 결과로 함수 호출 중에 모듈 목록이 변경되면 EnumProcessModules 가 실패하거나 잘못된 정보를 반환할 수 있습니다.

EnumProcessModules를 호출할 때 프로세스에 있을 모듈 수를 예측하기 어렵기 때문에 HMODULE 값의 큰 배열을 지정하는 것이 좋습니다. lphModule 배열이 너무 작아 프로세스에 대한 모든 모듈 핸들을 보유할 수 없는지 확인하려면 lpcbNeeded에서 반환된 값을 cb에 지정된 값과 비교합니다. lpcbNeededcb보다 크면 배열의 크기를 늘리고 EnumProcessModules를 다시 호출합니다.

EnumProcessModules 호출로 열거된 모듈 수를 확인하려면 lpcbNeeded 매개 변수의 결과 값을 로 sizeof(HMODULE)나눕니다.

EnumProcessModules 함수는 LOAD_LIBRARY_AS_DATAFILE 또는 유사한 플래그로 로드된 모듈에 대한 핸들을 검색하지 않습니다. 자세한 내용은 LoadLibraryEx를 참조하세요.

이 함수에서 반환된 핸들에 대해 CloseHandle 을 호출하지 마세요. 정보는 스냅샷 제공되므로 해제할 리소스가 없습니다.

WOW64에서 실행되는 32비트 애플리케이션에서 이 함수를 호출하는 경우 32비트 프로세스의 모듈만 열거할 수 있습니다. 프로세스가 64비트 프로세스인 경우 이 함수는 실패하고 마지막 오류 코드는 ERROR_PARTIAL_COPY (299)입니다.

지정된 프로세스와 이러한 프로세스에서 사용하는 힙, 모듈 및 스레드의 스냅샷 사용하려면 CreateToolhelp32Snapshot 함수를 사용합니다.

Windows 7 및 Windows Server 2008 R2부터 Psapi.h는 PSAPI 함수에 대한 버전 번호를 설정합니다. PSAPI 버전 번호는 함수를 호출하는 데 사용되는 이름과 프로그램이 로드해야 하는 라이브러리에 영향을 줍니다.

PSAPI_VERSION 2 이상인 경우 이 함수는 Psapi.h에서 K32EnumProcessModules로 정의되고 Kernel32.lib 및 Kernel32.dll 내보냅니다. PSAPI_VERSION 1이면 이 함수는 Psapi.h에서 EnumProcessModules로 정의되고 Psapi.lib에서 내보내고 K32EnumProcessModules를 호출하는 래퍼로 Psapi.dll.

이전 버전의 Windows 및 Windows 7 이상 버전에서 실행해야 하는 프로그램은 항상 이 함수를 EnumProcessModules로 호출해야 합니다. 기호의 올바른 해상도를 보장하려면 TargetLIBS 매크로에 Psapi.lib를 추가하고 -DPSAPI_VERSION=1로 프로그램을 컴파일합니다. 런타임 동적 연결을 사용하려면 Psapi.dll 로드합니다.

예제

예를 들어 모든 프로세스 열거 또는 프로세스대한 모든 모듈 열거를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 psapi.h
라이브러리 Windows 7 및 Windows Server 2008 R2의 Kernel32.lib; Windows 7 및 Windows Server 2008 R2의 Psapi.lib(PSAPI_VERSION=1인 경우) Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP의 Psapi.lib
DLL Windows 7 및 Windows Server 2008 R2의 Kernel32.dll Windows 7 및 Windows Server 2008 R2에서 Psapi.dll(PSAPI_VERSION=1인 경우) Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP의 Psapi.dll

추가 정보

CreateToolhelp32Snapshot

EnumProcessModulesEx

EnumProcesses

모듈 정보

PSAPI 함수