SepCreateAccessStateFromSubjectContext
VOID __fastcall SepCreateAccessStateFromSubjectContext(
_SECURITY_SUBJECT_CONTEXT *SubjectContext,
_ACCESS_STATE *AccessState,
_AUX_ACCESS_DATA *AuxData,
UINT64 DesiredAccess,
_GENERIC_MAPPING *GenericMapping){
_GENERIC_MAPPING *v5;
int v6;
__int64 v10;
__int64 v11;
UINT64 AccessMask;
v5 = GenericMapping;
v6 = DesiredAccess;
LODWORD(AccessMask) = DesiredAccess;
if( (DesiredAccess & 0xF0000000) != 0 && GenericMapping )
{
RtlMapGenericMask(&AccessMask, GenericMapping);
v6 = AccessMask;
}
memset((INT64)AccessState, 0i64);
memset((INT64)AuxData, 0i64);
*((_QWORD *)AccessState + 9) = AuxData;
*((_OWORD *)AccessState + 2) = *(_OWORD *)&SubjectContext->ClientToken;
*((_OWORD *)AccessState + 3) = *(_OWORD *)&SubjectContext->PrimaryToken;
v10 = *((_QWORD *)AccessState + 4);
if( v10 )
v11 = *((_QWORD *)AccessState + 4);
else
v11 = *((_QWORD *)AccessState + 6);
if( (*(_DWORD *)(v11 + 64) & *(_DWORD *)(v11 + 72) & 0x800000) != 0 )
*((_DWORD *)AccessState + 3) = 1;
if( !v10 )
v10 = *((_QWORD *)AccessState + 6);
*((_DWORD *)AccessState + 3) |= *(_DWORD *)(v10 + 200) & 0x810;
*((_DWORD *)AccessState + 4) = v6;
*((_DWORD *)AccessState + 6) = v6;
AuxData->PrivilegesUsed = (_PRIVILEGE_SET *)((char *)AccessState + 80);
*(_QWORD *)AccessState = ExpLuidIncrement + _InterlockedExchangeAdd64(&ExpLuid, ExpLuidIncrement);
if( v5 )
AuxData->GenericMapping = *v5;
}Referenced by:
ObInsertObjectEx
ObOpenObjectByNameEx
ObOpenObjectByPointer
PsOpenProcess
SeCreateAccessStateEx
SeCreateAccessStateFromSubjectContext
SeSubProcessToken