SepAuditAssignPrimaryToken

VOID __stdcall SepAuditAssignPrimaryToken(_EPROCESS *Process, PVOID AccessToken){
  __int64 CurrentThreadProcess; 
  __int64 v5; 
  ULONG_PTR v6; 
  PVOID v7; 
  unsigned __int8 *v8; 
  int AllocatedFullProcessImageName; 
  ULONG_PTR v10; 
  int v11; 
  ULONG v12; 
  ULONG v13; 
  PVOID P; 
  PVOID SubjectContext[5]; 
  _SE_ADT_PARAMETER_ARRAY Src; 
  memset(SubjectContext, 0, sizeof(SubjectContext));
  P = 0i64;
  memset((INT64)&Src, 0i64);
  CurrentThreadProcess = PsGetCurrentThreadProcess();
  v5 = CurrentThreadProcess;
  if( *(_QWORD *)(CurrentThreadProcess + 1472) )
  {
    v6 = *(_QWORD *)(CurrentThreadProcess + 1088);
    SeCaptureSubjectContext((_SECURITY_SUBJECT_CONTEXT *)&SubjectContext[1]);
    v7 = SubjectContext[3];
    if( SubjectContext[1] )
      v7 = SubjectContext[1];
    if( v7 )
    {
      v8 = (unsigned __int8 *)**((_QWORD **)v7 + 19);
      AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(v5, SubjectContext);
      if( AllocatedFullProcessImageName >= 0 )
      {
        v10 = *((_QWORD *)Process + 136);
        AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx((__int64)Process, &P);
        if( AllocatedFullProcessImageName >= 0 )
        {
          v11 = v8[1];
          Src.CategoryId = 5;
          Src.Parameters[2].Type = SeAdtParmTypeLogonId;
          *(_DWORD *)&Src.FlatSubCategoryId = 524421;
          Src.AuditId = 4696;
          Src.Parameters[0].Length = 4 * v11 + 8;
          Src.Parameters[0].Type = SeAdtParmTypeSid;
          Src.Parameters[0].Address = v8;
          Src.Parameters[1].Address = &SeSubsystemName;
          Src.Parameters[2].Data[0] = *((_QWORD *)v7 + 3);
          Src.Parameters[3].Data[0] = *((_QWORD *)AccessToken + 3);
          v12 = *(unsigned __int16 *)P + 16;
          Src.Parameters[5].Address = P;
          Src.Parameters[5].Length = v12;
          Src.Parameters[7].Address = SubjectContext[0];
          Src.Parameters[1].Type = SeAdtParmTypeString;
          v13 = *(unsigned __int16 *)SubjectContext[0] + 16;
          Src.Parameters[1].Length = 32;
          Src.Parameters[7].Length = v13;
          Src.Parameters[2].Length = 8;
          Src.Parameters[3].Type = SeAdtParmTypeLogonIdEx;
          Src.Parameters[3].Length = 8;
          Src.Parameters[4].Type = SeAdtParmTypePtr;
          Src.Parameters[4].Length = 8;
          Src.Parameters[4].Data[0] = v10;
          Src.Parameters[5].Type = SeAdtParmTypeFileSpec;
          Src.Parameters[6].Type = SeAdtParmTypePtr;
          Src.Parameters[6].Length = 8;
          Src.Parameters[6].Data[0] = v6;
          Src.Parameters[7].Type = SeAdtParmTypeFileSpec;
          Src.ParameterCount = 8;
          SepAdtLogAuditRecord(&Src);
        }
      }
    }
    else
    {
      AllocatedFullProcessImageName = -1073741700;
    }
    if( P )
      ExFreePoolWithTag(P, 0);
    if( SubjectContext[0] )
      ExFreePoolWithTag(SubjectContext[0], 0);
    if( AllocatedFullProcessImageName < 0 )
      SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
    SeReleaseSubjectContext((_SECURITY_SUBJECT_CONTEXT *)&SubjectContext[1]);
  }
}

Referenced by:

SeAssignPrimaryToken
SeExchangePrimaryToken