NtPrivilegeCheck

NTSTATUS __stdcall NtPrivilegeCheck(PVOID ClientToken, PRIVILEGE_SET *RequiredPrivileges, UINT8 *Result){
  KPROCESSOR_MODE v5; 
  NTSTATUS result; 
  struct _DMA_ADAPTER *v7; 
  __int64 v8; 
  __int64 v9; 
  LUID_AND_ATTRIBUTES **v10; 
  unsigned int Control; 
  int v12; 
  UINT8 *v13; 
  CHAR v14; 
  PVOID *Object; 
  unsigned int ArrayCount; 
  NTSTATUS ArrayCount_4; 
  PVOID v18; 
  void *Src; 
  Src = 0i64;
  v5 = *((_BYTE *)KeGetCurrentThread() + 562);
  v18 = 0i64;
  result = ObReferenceObjectByHandle(ClientToken, 8u, (POBJECT_TYPE)SeTokenObjectType, v5, &v18, 0i64);
  ArrayCount_4 = result;
  if( result >= 0 )
  {
    v7 = (struct _DMA_ADAPTER *)v18;
    if( *((_DWORD *)v18 + 48) == 2 && *((int *)v18 + 49) < 1 )
    {
      v12 = -1073741659;
    }
    else
    {
      if( ((unsigned __int8)RequiredPrivileges & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      v8 = 0x7FFFFFFF0000i64;
      v9 = 0x7FFFFFFF0000i64;
      if( (unsigned __int64)RequiredPrivileges < 0x7FFFFFFF0000i64 )
        v9 = (__int64)RequiredPrivileges;
      *(_BYTE *)v9 = *(_BYTE *)v9;
      *(_BYTE *)(v9 + 19) = *(_BYTE *)(v9 + 19);
      ArrayCount = RequiredPrivileges->PrivilegeCount;
      ProbeForWrite(RequiredPrivileges, 12 * (RequiredPrivileges->PrivilegeCount - 1) + 20, 4ui64);
      if( (unsigned __int64)Result < 0x7FFFFFFF0000i64 )
        v8 = (__int64)Result;
      *(_BYTE *)v8 = *(_BYTE *)v8;
      Control = RequiredPrivileges->Control;
      v12 = ArrayCount_4;
      if( ArrayCount_4 >= 0 )
      {
        v12 = SeCaptureLuidAndAttributesArray(RequiredPrivileges->Privilege, ArrayCount, 1, v10, (UINT64 *)Object);
        if( v12 >= 0 )
        {
          v13 = (UINT8 *)Src;
          v14 = SepPrivilegeCheck((INT64)v18, (INT64)Src, ArrayCount, Control, v5);
          HalPutDmaAdapter((PADAPTER_OBJECT)v18);
          memmove((UINT8 *)RequiredPrivileges->Privilege, v13, 0i64);
          *Result = v14;
          SeReleaseLuidAndAttributesArray((LUID_AND_ATTRIBUTES *)v13, v5);
          return 0;
        }
      }
      v7 = (struct _DMA_ADAPTER *)v18;
    }
    HalPutDmaAdapter(v7);
    return v12;
  }
  return result;
}

Referenced by:

No references.