SePrivilegeCheck
UINT8 __stdcall SePrivilegeCheck(
PRIVILEGE_SET *RequiredPrivileges,
SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
INT8 AccessMode){
void *ClientToken;
if( !AccessMode )
return 1;
ClientToken = SubjectSecurityContext->ClientToken;
if( !SubjectSecurityContext->ClientToken )
{
ClientToken = SubjectSecurityContext->PrimaryToken;
return SepPrivilegeCheck(
(INT64)ClientToken,
(INT64)RequiredPrivileges->Privilege,
RequiredPrivileges->PrivilegeCount,
RequiredPrivileges->Control,
AccessMode);
}
if( SubjectSecurityContext->ImpersonationLevel >= SecurityImpersonation )
return SepPrivilegeCheck(
(INT64)ClientToken,
(INT64)RequiredPrivileges->Privilege,
RequiredPrivileges->PrivilegeCount,
RequiredPrivileges->Control,
AccessMode);
return 0;
}Referenced by:
CMFCheckAccess
IopCheckBackupRestorePrivilege
NtSetInformationJobObject
ObpAdjustCreatorAccessState
ObpCreateHandle
PiAuDoesClientHavePrivilege
PsOpenProcess
PspSinglePrivCheck
RtlpNewSecurityObject
SeCheckPrivilegedObject
SeSinglePrivilegeCheckEx