NtPrivilegeCheck

NTSTATUS __stdcall NtPrivilegeCheck(_HANDLE ClientToken, PPRIVILEGE_SET RequiredPrivileges, PBOOLEAN Result){
  char PreviousMode; 
  NTSTATUS result; 
  _ADAPTER_OBJECT *v7; 
  __int64 v8; 
  __int64 v9; 
  _LUID_AND_ATTRIBUTES **v10; 
  unsigned int Control; 
  int v12; 
  _LUID_AND_ATTRIBUTES *v13; 
  unsigned __int8 v14; 
  UINT64 *Object; 
  unsigned int ArrayCount; 
  NTSTATUS ArrayCount_4; 
  PVOID v18; 
  _LUID_AND_ATTRIBUTES *RequiredPrivilegesa; 

  RequiredPrivilegesa = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  v18 = 0i64;
  result = ObReferenceObjectByHandle(
             *(VOID **)&ClientToken,
             8ui64,
             (_OBJECT_TYPE *)SeTokenObjectType,
             PreviousMode,
             &v18,
             0i64);
  ArrayCount_4 = result;
  if( result >= 0 )
  {
    v7 = (_ADAPTER_OBJECT *)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((UINT64)RequiredPrivileges, 12 * (RequiredPrivileges->PrivilegeCount - 1) + 20, 4i64);
      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, Object);
        if( v12 >= 0 )
        {
          v13 = RequiredPrivilegesa;
          v14 = SepPrivilegeCheck((_TOKEN *)v18, RequiredPrivilegesa, ArrayCount, Control, PreviousMode);
          HalPutDmaAdapter((PADAPTER_OBJECT)v18);
          memmove(RequiredPrivileges->Privilege, v13, 0);
          *Result = v14;
          SeReleaseLuidAndAttributesArray(v13, PreviousMode);
          return 0;
        }
      }
      v7 = (_ADAPTER_OBJECT *)v18;
    }
    HalPutDmaAdapter(v7);
    return v12;
  }
  return result;
}

Referenced by:

No references.