PiAuVerifyAccessToObject

NTSTATUS __stdcall PiAuVerifyAccessToObject(
        UINT64 DesiredAccess,
        VOID *SecurityObject,
        _GENERIC_MAPPING *SecurityMapping,
        _SECURITY_SUBJECT_CONTEXT *SecuritySubjectContext,
        UINT8 *AccessGranted){
  NTSTATUS v5; 
  _ACCESS_MASK v9; 
  char PreviousMode; 
  UINT8 *v11; 
  _SECURITY_SUBJECT_CONTEXT *p_SubjectContext; 
  _KPROCESSOR_MODE AccessMode; 
  unsigned int GrantedAccess; 
  _SECURITY_SUBJECT_CONTEXT SubjectContext; 
  int AccessStatus; 

  v5 = 0;
  GrantedAccess = 0;
  AccessStatus = 0;
  v9 = DesiredAccess;
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  PreviousMode = 1;
  if( !SecurityObject )
    return -1073741811;
  v11 = AccessGranted;
  if( !AccessGranted )
    return -1073741811;
  *AccessGranted = 0;
  if( !SecuritySubjectContext )
  {
    SeCaptureSubjectContext((INT64)&SubjectContext);
    PreviousMode = KeGetCurrentThread()->PreviousMode;
  }
  p_SubjectContext = &SubjectContext;
  if( SecuritySubjectContext )
    p_SubjectContext = SecuritySubjectContext;
  LOBYTE(AccessMode) = PreviousMode;
  *v11 = (unsigned __int8)SeAccessCheck(
                            SecurityObject,
                            p_SubjectContext,
                            0,
                            v9,
                            0,
                            0i64,
                            SecurityMapping,
                            AccessMode,
                            &GrantedAccess,
                            &AccessStatus);
  if( !SecuritySubjectContext )
    SeReleaseSubjectContext(&SubjectContext);
  if( AccessStatus < 0 )
    *v11 = 0;
  return v5;
}

Referenced by:

PiAuDoesClientHaveAccess
PiPnpRtlApplyMandatoryFilters
PiPnpRtlIsDeviceEnumerableForUser
PiUEventApplyAdditionalFilters