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;
unsigned __int64 MaximumRegisteredProcessorCount;
unsigned int v10;
NTSTATUS result;
UINT64 Id;
v4 = 0;
v5 = (unsigned int)BugCheckParameter2;
LODWORD(Id) = 0;
v6 = v3;
v7 = v2;
v8 = v1;
MaximumRegisteredProcessorCount = (unsigned int)HalpQueryMaximumRegisteredProcessorCount();
dword_140C49D18 = *((_DWORD *)qword_140C49D10 + 2 * v5 + 1);
if( (int)HalGetProcessorIdByNtNumber((unsigned int)v5, &Id) < 0 )
KeBugCheckEx(
0x5Cu,
(PVOID)0x2001,
(PVOID)(unsigned int)v5,
(PVOID)(unsigned int)MaximumRegisteredProcessorCount,
0i64);
v10 = 0;
if( v6 )
{
while( *v8 != (_DWORD)Id )
{
++v10;
++v8;
if( v10 >= v6 )
goto LABEL_8;
}
v4 = *(_DWORD *)(v7 + 4i64 * v10);
}
LABEL_8:
if( v10 == v6 )
KeBugCheckEx(0x5Cu, (PVOID)0x2001, (PVOID)(unsigned int)v5, (PVOID)(unsigned int)Id, (PVOID)1);
LOBYTE(result) = HalpInterruptStartProcessor(
(unsigned int)v5,
v4,
3ui64,
(_KPROCESSOR_STATE *)Memory + (unsigned int)v5);
if( result != 4 )
KeBugCheckEx(0x5Cu, (PVOID)0x2001, (PVOID)(unsigned int)v5, (PVOID)MaximumRegisteredProcessorCount, (PVOID)2);
return result;
}Referenced by:
HalpDpReplaceControl