EnumServicesStatusExA 함수(winsvc.h)

지정된 서비스 제어 관리자 데이터베이스에서 서비스를 열거합니다. 지정된 정보 수준에 따라 추가 데이터와 함께 각 서비스의 이름 및 상태 제공됩니다.

구문

BOOL EnumServicesStatusExA(
  [in]                SC_HANDLE    hSCManager,
  [in]                SC_ENUM_TYPE InfoLevel,
  [in]                DWORD        dwServiceType,
  [in]                DWORD        dwServiceState,
  [out, optional]     LPBYTE       lpServices,
  [in]                DWORD        cbBufSize,
  [out]               LPDWORD      pcbBytesNeeded,
  [out]               LPDWORD      lpServicesReturned,
  [in, out, optional] LPDWORD      lpResumeHandle,
  [in, optional]      LPCSTR       pszGroupName
);

매개 변수

[in] hSCManager

서비스 제어 관리자 데이터베이스에 대한 핸들입니다. 이 핸들은 OpenSCManager 함수에서 반환되며 SC_MANAGER_ENUMERATE_SERVICE 액세스 권한이 있어야 합니다. 자세한 내용은 서비스 보안 및 액세스 권한을 참조하세요.

[in] InfoLevel

반환할 서비스 특성입니다. SC_ENUM_PROCESS_INFO 사용하여 데이터베이스의 각 서비스에 대한 이름 및 서비스 상태 정보를 검색합니다. lpServices 매개 변수는 ENUM_SERVICE_STATUS_PROCESS 구조의 배열을 수신하는 버퍼에 대한 포인터입니다. 버퍼는 구조체와 멤버가 가리키는 문자열을 포함할 수 있을 만큼 커야 합니다.

현재 다른 정보 수준은 정의되어 있지 않습니다.

[in] dwServiceType

열거할 서비스 유형입니다. 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.

의미
SERVICE_DRIVER
0x0000000B
SERVICE_KERNEL_DRIVERSERVICE_FILE_SYSTEM_DRIVER 유형의 서비스입니다.
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
파일 시스템 드라이버 서비스.
SERVICE_KERNEL_DRIVER
0x00000001
드라이버 서비스.
SERVICE_WIN32
0x00000030
SERVICE_WIN32_OWN_PROCESS SERVICE_WIN32_SHARE_PROCESS 유형의 서비스입니다.
SERVICE_WIN32_OWN_PROCESS
0x00000010
자체 프로세스에서 실행되는 서비스입니다.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
하나 이상의 다른 서비스와 프로세스를 공유하는 서비스입니다. 자세한 내용은 서비스 프로그램을 참조하세요.

[in] dwServiceState

열거할 서비스의 상태입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
SERVICE_ACTIVE
0x00000001
SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDINGSERVICE_PAUSED 상태인 서비스를 열거합니다.
SERVICE_INACTIVE
0x00000002
SERVICE_STOPPED 상태에 있는 서비스를 열거합니다.
SERVICE_STATE_ALL
0x00000003
SERVICE_ACTIVESERVICE_INACTIVE 상태를 결합합니다.

[out, optional] lpServices

상태 정보를 수신하는 버퍼에 대한 포인터입니다. 이 데이터의 형식은 InfoLevel 매개 변수의 값에 따라 달라집니다.

이 배열의 최대 크기는 256K 바이트입니다. 필요한 크기를 확인하려면 이 매개 변수에 NULL 을, cbBufSize 매개 변수에 대해 0을 지정합니다. 함수가 실패하고 GetLastErrorERROR_MORE_DATA 반환합니다. pcbBytesNeeded 매개 변수는 필요한 크기를 받습니다.

Windows Server 2003 및 Windows XP: 이 배열의 최대 크기는 64K바이트입니다. 이 제한은 WINDOWS Server 2003 SP1 및 WINDOWS XP SP2를 사용하여 증가했습니다.

[in] cbBufSize

lpServices 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.

[out] pcbBytesNeeded

버퍼가 너무 작은 경우 나머지 서비스 항목을 반환하는 데 필요한 바이트 수를 받는 변수에 대한 포인터입니다.

[out] lpServicesReturned

반환되는 서비스 항목 수를 수신하는 변수에 대한 포인터입니다.

[in, out, optional] lpResumeHandle

입력 시 열거형의 시작점을 지정하는 변수에 대한 포인터입니다. EnumServicesStatusEx 함수가 처음 호출되면 이 값을 0으로 설정해야 합니다. 출력에서 함수가 성공하면 이 값은 0입니다. 그러나 함수가 0을 반환하고 GetLastError 함수가 ERROR_MORE_DATA 반환하는 경우 이 값은 EnumServicesStatusEx 함수를 호출하여 추가 데이터를 검색할 때 읽을 다음 서비스 항목을 나타냅니다.

[in, optional] pszGroupName

부하 순서 그룹 이름입니다. 이 매개 변수가 문자열인 경우 열거된 서비스는 문자열로 지정된 이름을 가진 그룹에 속하는 서비스뿐입니다. 이 매개 변수가 빈 문자열인 경우 그룹에 속하지 않는 서비스만 열거됩니다. 이 매개 변수가 NULL이면 그룹 멤버 자격이 무시되고 모든 서비스가 열거됩니다.

반환 값

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

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

반환 코드 설명
ERROR_ACCESS_DENIED
핸들에 SC_MANAGER_ENUMERATE_SERVICE 액세스 권한이 없습니다.
ERROR_MORE_DATA
버퍼가 너무 작습니다. 활성 데이터베이스의 모든 데이터를 반환할 수 있는 것은 아닙니다. pcbBytesNeeded 매개 변수에는 나머지 항목을 받는 데 필요한 바이트 수가 포함됩니다.
ERROR_INVALID_PARAMETER
잘못된 매개 변수 값이 사용되었습니다.
ERROR_INVALID_HANDLE
핸들이 잘못되었습니다.
ERROR_INVALID_LEVEL
InfoLevel 매개 변수에는 지원되지 않는 값이 포함되어 있습니다.
ERROR_SHUTDOWN_IN_PROGRESS
시스템이 종료되고 있습니다. 이 함수를 호출할 수 없습니다.

설명

호출자에게 서비스에 대한 SERVICE_QUERY_STATUS 액세스 권한이 없는 경우 서비스는 클라이언트로 반환된 서비스 목록에서 자동으로 생략됩니다.

참고

winsvc.h 헤더는 ENumServicesStatusEx를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winsvc.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

ENUM_SERVICE_STATUS_PROCESS

서비스 함수

서비스 설치, 제거 및 열거형