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