HalpDpStartProcessor

NTSTATUS __stdcall HalpDpStartProcessor(PVOID BugCheckParameter2){
  _DWORD *v1; 
  __int64 v2; 
  unsigned int v3; 
  unsigned int v4; 
  __int64 v5; 
  unsigned int v6; 
  __int64 v7; 
  _DWORD *v8; 
  ULONG_PTR MaximumRegisteredProcessorCount; 
  unsigned int v10; 
  NTSTATUS result; 
  ULONG_PTR BugCheckParameter3; 
  v4 = 0;
  v5 = (unsigned int)BugCheckParameter2;
  LODWORD(BugCheckParameter3) = 0;
  v6 = v3;
  v7 = v2;
  v8 = v1;
  MaximumRegisteredProcessorCount = (unsigned int)HalpQueryMaximumRegisteredProcessorCount((INT64)BugCheckParameter2);
  CurTiledCr3LowPart = *(_DWORD *)(HalpTiledCr3Addresses + 8 * v5 + 4);
  if( (int)HalGetProcessorIdByNtNumber((unsigned int)v5, &BugCheckParameter3) < 0 )
    KeBugCheckEx(0x5Cu, 0x2001ui64, (unsigned int)v5, (unsigned int)MaximumRegisteredProcessorCount, 0i64);
  v10 = 0;
  if( v6 )
  {
    while( *v8 != (_DWORD)BugCheckParameter3 )
    {
      ++v10;
      ++v8;
      if( v10 >= v6 )
        goto LABEL_8;
    }
    v4 = *(_DWORD *)(v7 + 4i64 * v10);
  }
LABEL_8:
  if( v10 == v6 )
    KeBugCheckEx(0x5Cu, 0x2001ui64, (unsigned int)v5, (unsigned int)BugCheckParameter3, 1ui64);
  result = HalpInterruptStartProcessor(v5, v4, 3u, (const void *)(HalpHiberProcState + 1472i64 * (unsigned int)v5));
  if( result != 4 )
    KeBugCheckEx(0x5Cu, 0x2001ui64, (unsigned int)v5, MaximumRegisteredProcessorCount, 2ui64);
  return result;
}

Referenced by:

HalpDpReplaceControl