다음을 통해 공유


AccessCheckByTypeAndAuditAlarmW 함수(securitybaseapi.h)

AccessCheckByTypeAndAuditAlarm 함수는 보안 설명자가 호출 스레드에서 가장하는 클라이언트에 지정된 액세스 권한 집합을 부여하는지 여부를 결정합니다. 함수는 개체, 해당 속성 집합 및 속성과 같은 개체 계층 구조에 대한 클라이언트의 액세스를 검사 수 있습니다. 함수는 계층 전체에 대한 액세스 권한을 부여하거나 거부합니다. 보안 설명자에 클라이언트에 적용되는 ACE(액세스 제어 항목)가 있는 SACL(시스템 액세스 제어 목록)이 있는 경우 함수는 보안 이벤트 로그에 필요한 감사 메시지를 생성합니다.

경보는 현재 지원되지 않습니다.

구문

BOOL AccessCheckByTypeAndAuditAlarmW(
  [in]                LPCWSTR              SubsystemName,
  [in]                LPVOID               HandleId,
  [in]                LPCWSTR              ObjectTypeName,
  [in, optional]      LPCWSTR              ObjectName,
  [in]                PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in, optional]      PSID                 PrincipalSelfSid,
  [in]                DWORD                DesiredAccess,
  [in]                AUDIT_EVENT_TYPE     AuditType,
  [in]                DWORD                Flags,
  [in, out, optional] POBJECT_TYPE_LIST    ObjectTypeList,
  [in]                DWORD                ObjectTypeListLength,
  [in]                PGENERIC_MAPPING     GenericMapping,
  [in]                BOOL                 ObjectCreation,
  [out]               LPDWORD              GrantedAccess,
  [out]               LPBOOL               AccessStatus,
  [out]               LPBOOL               pfGenerateOnClose
);

매개 변수

[in] SubsystemName

함수를 호출하는 하위 시스템의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열은 함수가 생성하는 감사 메시지에 표시됩니다.

[in] HandleId

개체에 대한 클라이언트의 핸들을 나타내는 고유 값에 대한 포인터입니다. 액세스가 거부되면 시스템에서 이 값을 무시합니다.

[in] ObjectTypeName

만들거나 액세스하는 개체의 형식을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열은 함수가 생성하는 감사 메시지에 표시됩니다.

[in, optional] ObjectName

만들거나 액세스하는 개체의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열은 함수가 생성하는 감사 메시지에 표시됩니다.

[in] SecurityDescriptor

액세스가 검사되는 SECURITY_DESCRIPTOR 구조체에 대한 포인터입니다.

[in, optional] PrincipalSelfSid

SID( 보안 식별자 )에 대한 포인터입니다. 보안 설명자가 보안 주체를 나타내는 개체(예: 사용자 개체)와 연결된 경우 PrincipalSelfSid 매개 변수는 개체의 SID여야 합니다. 액세스를 평가할 때 이 SID는 잘 알려진 PRINCIPAL_SELF SID(S-1-5-10)가 포함된 ACE의 SID를 논리적으로 대체합니다. 잘 알려진 SID에 대한 자세한 내용은 잘 알려진 SID를 참조하세요.

보호된 개체가 보안 주체를 나타내지 않는 경우 이 매개 변수를 NULL로 설정합니다.

[in] DesiredAccess

검사 대한 액세스 권한을 지정하는 액세스 마스크입니다. 이 마스크는 일반 액세스 권한이 없도록 MapGenericMask 함수에 의해 매핑되어야 합니다.

이 매개 변수가 MAXIMUM_ALLOWED 경우 함수는 GrantedAccess 액세스 마스크를 설정하여 보안 설명자가 클라이언트에 허용하는 최대 액세스 권한을 나타냅니다.

[in] AuditType

생성할 감사 유형입니다. 이 값은 AUDIT_EVENT_TYPE 열거형 형식의 값 중 하나일 수 있습니다.

[in] Flags

호출 프로세스 에 SE_AUDIT_NAME 권한이 활성화되지 않은 경우 함수의 동작을 제어하는 플래그입니다. AUDIT_ALLOW_NO_PRIVILEGE 플래그가 설정된 경우 함수는 권한이 활성화되지 않은 경우 감사 메시지를 생성하지 않고 액세스 검사 수행합니다. 이 매개 변수가 0이면 권한이 활성화되지 않은 경우 함수가 실패합니다.

[in, out, optional] ObjectTypeList

액세스를 검사 개체 형식의 계층 구조를 식별하는 OBJECT_TYPE_LIST 구조체 배열에 대한 포인터입니다. 배열의 각 요소는 개체 형식을 식별하는 GUID와 개체 형식의 계층 구조에서 개체 형식의 수준을 나타내는 값을 지정합니다. 배열에는 GUID가 동일한 두 요소가 없어야 합니다.

배열에는 하나 이상의 요소가 있어야 합니다. 배열의 첫 번째 요소는 수준 0이어야 하며 개체 자체를 식별해야 합니다. 배열에는 하나의 수준 0 요소만 있을 수 있습니다. 두 번째 요소는 수준 1의 속성 집합과 같은 하위 개체입니다. 각 수준 1 항목 다음에는 수준 2~4 하위 개체에 대한 하위 항목이 있습니다. 따라서 배열의 요소 수준은 {0, 1, 2, 2, 1, 2, 3}일 수 있습니다. 개체 형식 목록이 순서를 벗어나면 AccessCheckByTypeAndAuditAlarm 이 실패하고 GetLastError 가 ERROR_INVALID_PARAMETER 반환합니다.

[in] ObjectTypeListLength

ObjectTypeList 배열의 요소 수입니다.

[in] GenericMapping

액세스가 검사되는 개체와 연결된 GENERIC_MAPPING 구조체에 대한 포인터입니다.

[in] ObjectCreation

액세스 권한이 부여될 때 호출 애플리케이션이 새 개체를 만들 것인지 여부를 결정하는 플래그입니다. TRUE 값은 애플리케이션이 새 개체를 만들 것임을 나타냅니다. FALSE 값은 애플리케이션이 기존 개체를 열 것임을 나타냅니다.

[out] GrantedAccess

부여된 액세스 권한을 받는 액세스 마스크에 대한 포인터입니다. AccessStatusFALSE로 설정된 경우 함수는 액세스 마스크를 0으로 설정합니다. 함수가 실패하면 액세스 마스크를 설정하지 않습니다.

[out] AccessStatus

액세스 검사 결과를 수신하는 변수에 대한 포인터입니다. 보안 설명자가 클라이언트에 대한 요청된 액세스 권한을 허용하는 경우 AccessStatusTRUE로 설정됩니다. 그렇지 않으면 AccessStatusFALSE 로 설정되고 GetLastError 를 호출하여 확장된 오류 정보를 가져올 수 있습니다.

[out] pfGenerateOnClose

함수가 반환되는 경우 감사 생성 루틴에서 설정한 플래그에 대한 포인터입니다. 개체 핸들이 닫힌 경우 ObjectCloseAuditAlarm 함수에 이 플래그를 전달합니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환합니다.

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

설명

자세한 내용은 AccessCheck 작동 방법 개요를 참조하세요.

PrincipalSelfSidObjectTypeList 매개 변수가 NULL인 경우 AuditType 매개 변수는 AuditEventObjectAccess이고 Flags 매개 변수는 0이고 AccessCheckByTypeAndAuditAlarmAccessCheckAndAuditAlarm 함수와 동일한 방식으로 수행됩니다.

ObjectTypeList 배열이 정의된 전체 개체를 반드시 나타내는 것은 아닙니다. 대신 액세스를 검사 개체의 하위 집합을 나타냅니다. instance 경우 속성 집합의 두 속성에 대한 액세스를 검사 4개의 요소가 있는 개체 형식 목록을 지정합니다. 즉, 수준 0의 개체 자체, 수준 1에 설정된 속성 및 수준 2의 두 속성입니다.

AccessCheckByTypeAndAuditAlarm 함수는 ObjectTypeList 배열에 나열된 개체 형식에 대해 개체 자체 및 개체별 API에 적용되는 API를 평가합니다. 함수는 ObjectTypeList 배열에 나열되지 않은 개체 형식에 대한 개체별 API를 무시합니다. 따라서 AccessStatus 매개 변수에 반환된 결과는 전체 개체가 아니라 ObjectTypeList 매개 변수로 정의된 개체의 하위 집합에 허용되는 액세스를 나타냅니다.

AES 계층이 개체 및 해당 하위 개체에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 개체 의 속성에 대한 액세스 제어를 참조하세요.

보안 이벤트 로그에서 감사 메시지를 생성하려면 호출 프로세스에 SE_AUDIT_NAME 권한이 활성화되어 있어야 합니다. 시스템은 스레드의 가장 토큰이 아닌 호출 프로세스의 기본토큰에서 이 권한을 확인합니다. Flags 매개 변수에 AUDIT_ALLOW_NO_PRIVILEGE 플래그가 포함된 경우 권한이 활성화되지 않은 경우 함수는 감사 메시지를 생성하지 않고 액세스 검사 수행합니다.

호출 스레드가 클라이언트를 가장하지 않으면 AccessCheckByTypeAndAuditAlarm 함수가 실패합니다.

보안 설명자에 소유자 및 그룹 SID가 없는 경우 AccessCheckByTypeAndAuditAlarm 은 ERROR_INVALID_SECURITY_DESCR 함께 실패합니다.

요구 사항

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

추가 정보

AUDIT_EVENT_TYPE
AccessCheck
AccessCheckAndAuditAlarm
AccessCheckByType
AccessCheckByTypeResultList
AccessCheckByTypeResultListAndAuditAlarm
클라이언트/서버 Access Control
클라이언트/서버 Access Control 함수
GENERIC_MAPPING
AccessCheck 작동 방식
MakeAbsoluteSD
MapGenericMask
OBJECT_TYPE_LIST
ObjectCloseAuditAlarm
PRIVILEGE_SET
SECURITY_DESCRIPTOR