QueryServiceObjectSecurity 함수(winsvc.h)

QueryServiceObjectSecurity 함수는 서비스 개체와 연결된 보안 설명자의 복사본을 검색합니다. GetNamedSecurityInfo 함수를 사용하여 보안 설명자를 검색할 수도 있습니다.

구문

BOOL QueryServiceObjectSecurity(
  [in]            SC_HANDLE            hService,
  [in]            SECURITY_INFORMATION dwSecurityInformation,
  [out, optional] PSECURITY_DESCRIPTOR lpSecurityDescriptor,
  [in]            DWORD                cbBufSize,
  [out]           LPDWORD              pcbBytesNeeded
);

매개 변수

[in] hService

서비스 제어 관리자 또는 서비스에 대한 핸들입니다. 서비스 제어 관리자에 대한 핸들은 OpenSCManager 함수에 의해 반환되고 서비스에 대한 핸들은 OpenService 또는 CreateService 함수에서 반환됩니다. 핸들에는 READ_CONTROL 액세스 권한이 있어야 합니다.

[in] dwSecurityInformation

검색할 보안 정보의 유형을 나타내는 비트 플래그 집합입니다. 이 매개 변수는 이 함수가 LABEL_SECURITY_INFORMATION 값을 지원하지 않는다는 점을 제외하고 SECURITY_INFORMATION 비트 플래그의 조합일 수 있습니다.

[out, optional] lpSecurityDescriptor

지정된 서비스 개체의 보안 설명자 복사본을 수신하는 버퍼에 대한 포인터입니다. 호출 프로세스에는 개체의 보안 설명자의 지정된 측면을 볼 수 있는 적절한 액세스 권한이 있어야 합니다. SECURITY_DESCRIPTOR 구조체는 자기 상대 형식으로 반환됩니다.

[in] cbBufSize

lpSecurityDescriptor 매개 변수가 가리키는 버퍼의 크기(바이트)입니다. 허용되는 가장 큰 크기는 8킬로바이트입니다.

[out] pcbBytesNeeded

함수가 실패하는 경우 요청된 보안 설명자 정보를 반환하는 데 필요한 바이트 수를 수신하는 변수에 대한 포인터입니다.

반환 값

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

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

서비스 제어 관리자가 다음 오류 코드를 설정할 수 있습니다. 다른 오류 코드는 서비스 제어 관리자가 호출하는 레지스트리 함수에 의해 설정될 수 있습니다.

반환 코드 설명
ERROR_ACCESS_DENIED
지정된 핸들이 READ_CONTROL 액세스 권한으로 열리지 않았거나 호출 프로세스가 개체의 소유자가 아닙니다.
ERROR_INVALID_HANDLE
지정한 핸들이 잘못되었습니다.
ERROR_INSUFFICIENT_BUFFER
보안 설명자 정보가 너무 커서 lpSecurityDescriptor 버퍼가 없습니다. 모든 정보를 가져오는 데 필요한 바이트 수는 pcbBytesNeeded 매개 변수에 반환됩니다. lpSecurityDescriptor 버퍼에 아무 것도 기록되지 않습니다.
ERROR_INVALID_PARAMETER
지정된 보안 정보가 잘못되었습니다.

설명

서비스를 만들 때 서비스 제어 관리자는 서비스 개체에 기본 보안 설명자를 할당합니다. 서비스 개체에 대한 보안 설명자의 복사본을 검색하려면 QueryServiceObjectSecurity 함수를 호출합니다. 보안 설명자를 변경하려면 SetServiceObjectSecurity 함수를 호출합니다. 서비스 개체의 기본 보안 설명자에 대한 설명은 서비스 보안 및 액세스 권한을 참조하세요.

서비스 개체의 보안 설명자에서 소유자, 그룹 또는 DACL을 읽으려면 핸들을 열 때 호출 프로세스에 액세스 권한을 READ_CONTROL 부여되어야 합니다. READ_CONTROL 액세스 권한을 얻으려면 호출자가 개체의 소유자이거나 개체의 DACL이 액세스 권한을 부여해야 합니다.

보안 설명자에서 SACL을 읽으려면 핸들을 열 때 호출 프로세스에 액세스 권한을 ACCESS_SYSTEM_SECURITY 부여되어야 합니다. 이 액세스를 가져오는 올바른 방법은 호출자의 현재 토큰에서 SE_SECURITY_NAME 권한을 사용하도록 설정하고 ACCESS_SYSTEM_SECURITY 액세스에 대한 핸들을 연 다음 권한을 사용하지 않도록 설정하는 것입니다.

요구 사항

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

추가 정보

CreateService

GetNamedSecurityInfo

하위 수준 Access Control

하위 수준 Access Control 함수

OpenService

SECURITY_DESCRIPTOR

SetServiceObjectSecurity