HalpNmiReboot

VOID __fastcall HalpNmiReboot(_ETHREAD *Thread, _KPRCB *Prcb, INT64 a3, INT64 a4){
  DOUBLE v4; 
  struct _KPRCB *CurrentPrcb; 
  int v6; 
  INT64 result[22]; 
  memset((INT64)result, 0i64);
  CurrentPrcb = KeGetCurrentPrcb();
  if( (*((_WORD *)CurrentPrcb + 33) & 0xFF00 | (*((unsigned __int8 *)CurrentPrcb + 64) << 16)) > 0x50100u )
  {
    v6 = *(_DWORD *)HalpInterruptProcessorsStarted;
    HalpInterruptNmiRebootInProgress = 1;
    KeCopyAffinityEx((__int64)result, &KeActiveProcessors.Count);
    KeRemoveProcessorAffinityEx((unsigned __int16 *)result, *((_DWORD *)CurrentPrcb + 9));
    HalSendNMI((__int64)result);
    KeStallExecutionProcessor(0x1F4u);
    if( (unsigned __int8)HalpIsHvPresent() )
    {
      while( *(int *)HalpInterruptProcessorsStarted > 1 )
        _mm_pause();
    }
    if( *(_DWORD *)HalpInterruptProcessorsStarted != v6 )
      HalpInterruptRebootService(0i64, v4);
  }
}

Referenced by:

HalpInterruptResetAllProcessors