SeGetLogonSessionToken

INT64 __fastcall SeGetLogonSessionToken(VOID *TokenHandle, CHAR AccessMode, VOID **LogonSessionToken){
  INT64 result; 
  struct _DMA_ADAPTER *v6; 
  int inserted; 
  UINT64 ImpersonationLevel; 
  PADAPTER_OBJECT DuplicateToken; 
  PVOID Handle; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  PADAPTER_OBJECT DmaAdapter; 
  Handle = 0i64;
  DuplicateToken = 0i64;
  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  DmaAdapter = 0i64;
  LODWORD(result) = ObReferenceObjectByHandle(
                      TokenHandle,
                      8u,
                      (POBJECT_TYPE)SeTokenObjectType,
                      AccessMode,
                      (PVOID *)&DmaAdapter,
                      0i64);
  if( (int)result >= 0 )
  {
    v6 = DmaAdapter;
    if( DmaAdapter[13].DmaOperations->FreeAdapterChannel )
    {
      ObjectAttributes.Length = 48;
      ObjectAttributes.RootDirectory = 0i64;
      ObjectAttributes.ObjectName = 0i64;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      ObjectAttributes.Attributes = AccessMode == 0 ? 0x200 : 0;
      inserted = SepDuplicateToken(
                   (_TOKEN *)DmaAdapter[13].DmaOperations->FreeAdapterChannel,
                   &ObjectAttributes,
                   0,
                   TokenPrimary,
                   SecurityAnonymous,
                   0,
                   0,
                   (_TOKEN **)&DuplicateToken);
      if( inserted >= 0 )
      {
        LODWORD(ImpersonationLevel) = 0;
        inserted = ObInsertObjectEx(DuplicateToken, 0i64, 0xF01FFui64, 0i64, ImpersonationLevel, 0i64, &Handle);
        if( inserted >= 0 )
          *LogonSessionToken = Handle;
      }
    }
    else
    {
      inserted = -1073741700;
    }
    HalPutDmaAdapter(v6);
    return(unsigned int)inserted;
  }
  return result;
}

Referenced by:

No references.