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