SeCopyClientToken

NTSTATUS __stdcall SeCopyClientToken(
        VOID *ClientToken,
        _SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
        UINT8 UseProcessTrust,
        VOID *ProcessTrustSid,
        VOID **DuplicateToken){
  char v5; 
  int inserted; 
  VOID *v7; 
  VOID *v9; 
  NTSTATUS appended; 
  UINT64 ImpersonationLevela; 
  PVOID Object; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  PVOID *v14; 

  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  v5 = (char)ProcessTrustSid;
  Object = 0i64;
  memset(&ObjectAttributes.RootDirectory, 0, 40);
  inserted = SepDuplicateToken(
               (_TOKEN *)ClientToken,
               &ObjectAttributes,
               0,
               TokenImpersonation,
               ImpersonationLevel,
               0,
               0,
               (_TOKEN **)&Object);
  if( inserted < 0 )
    goto LABEL_13;
  if( v5 )
    inserted = SepSetTokenTrust((_TOKEN *)Object, DuplicateToken);
  if( inserted < 0 )
    goto LABEL_13;
  LODWORD(ImpersonationLevela) = 0;
  inserted = ObInsertObjectEx(Object, 0i64, 0i64, 0i64, ImpersonationLevela, 0i64, 0i64);
  if( inserted < 0 )
    goto LABEL_13;
  v7 = Object;
  if( (*((_DWORD *)Object + 50) & 0x4000) != 0 )
  {
    v9 = (VOID *)*((_QWORD *)Object + 98);
    if( v9 )
    {
      appended = SepAppendAceToTokenObjectAcl(Object, 0xF01FFui64, v9);
      v7 = Object;
      inserted = appended;
      if( appended >= 0 )
        goto LABEL_8;
      HalPutDmaAdapter((PADAPTER_OBJECT)Object);
      v7 = Object;
    }
  }
  if( inserted < 0 )
  {
LABEL_13:
    *v14 = 0i64;
    return inserted;
  }
LABEL_8:
  SepAppendAceToTokenObjectAcl(v7, 8ui64, SeAliasAdminsSid);
  *v14 = Object;
  return inserted;
}

Referenced by:

PsImpersonateClient
SepCopyClientTokenAndSetSilo
SepCreateClientSecurityEx