PspOneDirectionSecurityDomainCombine
INT64 __fastcall PspOneDirectionSecurityDomainCombine(
_TOKEN *Token,
INT64 MakeChanges,
INT64 ResetToDefault,
UINT64 GroupCount,
_SID_AND_ATTRIBUTES *NewState,
_TOKEN_GROUPS *PreviousState,
VOID *SidBuffer,
UINT *ReturnLength,
UINT *ChangeCount,
UINT8 *ChangesMade){
void *PrimaryGroup;
INT64 AccessState;
_EPROCESS *v13;
unsigned int *v14;
int v15[8];
POBJECT_TYPE ObjectType;
_EPROCESS *Process;
HANDLE Handle;
INT64 result[4];
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
__int64 v21[28];
memset((INT64)result, 0i64);
memset((INT64)v21, 0i64);
PrimaryGroup = Token[1].PrimaryGroup;
Process = 0i64;
Handle = 0i64;
LODWORD(AccessState) = PsLookupProcessByProcessId(PrimaryGroup, (PEPROCESS *)&Process);
if( (int)AccessState < 0 )
goto LABEL_17;
v13 = Process;
LODWORD(AccessState) = PspIsParentProcess((INT64)Process, (INT64)Token);
if( !(_BYTE)AccessState || (*((_DWORD *)v13 + 543) & 0x400000) == 0 )
goto LABEL_12;
_InterlockedOr(v15, 0);
if( SLODWORD(Token[2].RestrictedSids) < 0 )
{
LABEL_17:
v13 = Process;
goto LABEL_12;
}
v13 = Process;
if( *((int *)Process + 628) >= 0 )
{
LODWORD(ObjectType) = 40;
AccessState = SeCreateAccessStateEx(
0i64,
Process,
(_ACCESS_STATE *)result,
(_AUX_ACCESS_DATA *)v21,
(UINT64)ObjectType,
(_GENERIC_MAPPING *)((char *)PsProcessType + 76));
if( (int)AccessState >= 0 )
{
if( ObOpenObjectByPointer(Token, 0x600u, (PACCESS_STATE)result, 0, (POBJECT_TYPE)PsProcessType, 0, &Handle) >= 0 )
{
Token[2].DefaultDacl = (_ACL *)*((_QWORD *)v13 + 316);
if( (*((_DWORD *)v13 + 628) | LODWORD(Token[2].RestrictedSids)) < 0 )
{
_InterlockedOr((volatile signed __int32 *)&Token[1].CapabilitiesHash.Hash[21] + 1, 0x200000u);
v14 = (unsigned int *)_InterlockedIncrement64(&PsNextSecurityDomain);
Token[2].DynamicPart = v14;
Token[2].DefaultDacl = (_ACL *)v14;
}
v13 = Process;
}
SepDeleteAccessState((ACCESS_STATE *)result);
SeReleaseSubjectContext(&SubjectContext);
}
}
LABEL_12:
if( Handle )
LODWORD(AccessState) = ObCloseHandle(Handle, 0);
if( v13 )
HalPutDmaAdapter((PADAPTER_OBJECT)v13);
return AccessState;
}Referenced by:
No references.