NtSetDriverEntryOrder

NTSTATUS __stdcall NtSetDriverEntryOrder(UINT64 *Ids, UINT64 Count){
  __int64 v2; 
  VOID **PoolWithTag; 
  _ETHREAD *CurrentThread; 
  char PreviousMode; 
  unsigned int v8; 
  char *v9; 
  unsigned int i; 
  _ETHREAD *v11; 
  NTSTATUS v12; 
  UINT64 Attributes; 

  v2 = (unsigned int)Count;
  PoolWithTag = 0i64;
  if( *(&ExBootDevicesRemovedEvent + 276) != 2 )
    return -1073741822;
  if( (unsigned int)Count > 0x3FFFFFFF )
    return -1073741811;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  PreviousMode = CurrentThread->Tcb.PreviousMode;
  if( PreviousMode
    && !SeSinglePrivilegeCheck(*(_QWORD *)&SeSystemEnvironmentPrivilege, CurrentThread->Tcb.PreviousMode) )
  {
    return -1073741727;
  }
  if( (_DWORD)v2 )
  {
    v8 = 4 * v2;
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 2 * v2, 1920364101i64);
    if( !PoolWithTag )
      return -1073741670;
    if( PreviousMode && v8 )
    {
      if( ((unsigned __int8)Ids & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      v9 = (char *)Ids + v8;
      if( (unsigned __int64)v9 > 0x7FFFFFFF0000i64 || v9 < (char *)Ids )
        MEMORY[0x7FFFFFFF0000] = 0;
    }
    for( i = 0; i < (unsigned int)v2; ++i )
    {
      if( *((_DWORD *)Ids + i) > 0xFFFFu )
      {
        ExFreePoolWithTag(PoolWithTag, 0);
        return -1073741811;
      }
      *((_WORD *)PoolWithTag + i) = *((_WORD *)Ids + 2 * i);
    }
  }
  v11 = (_ETHREAD *)KeGetCurrentThread();
  --v11->Tcb.KernelApcDisable;
  ExAcquireFastMutexUnsafe((PFAST_MUTEX)((char *)&WheapDeferredInternalLogsEventLock + 2752));
  LODWORD(Attributes) = 1;
  v12 = IoSetEnvironmentVariableEx(
          (WCHAR *)L"DriverOrder",
          (_GUID *)&EfiDriverVariablesGuid,
          PoolWithTag,
          (unsigned int)(2 * v2),
          Attributes);
  ExReleaseFastMutexUnsafe((PFAST_MUTEX)((char *)&WheapDeferredInternalLogsEventLock + 2752));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( v12 == -1073741568 )
    v12 = 0;
  if( PoolWithTag )
    ExFreePoolWithTag(PoolWithTag, 0);
  return v12;
}

Referenced by:

No references.