HalpInterruptReinitialize
VOID __stdcall HalpInterruptReinitialize(CONTEXT *uINT){
INT64 v1;
DOUBLE v2;
ULONG_PTR *v3;
int started;
int v5;
ULONG_PTR *v6;
int v7;
int v8;
ULONG_PTR BugCheckParameter4;
int v10;
unsigned int v11;
unsigned int v12;
__int64 v13;
const void *v14;
ULONG_PTR v15;
unsigned int v16;
unsigned int v17;
__int64 v18;
ULONG_PTR v20;
unsigned int ProcessorIndexFromNumber;
unsigned int v22;
ULONG_PTR v23;
__int16 v24;
UINT64 Id;
LODWORD(Id) = 0;
v3 = (ULONG_PTR *)HalpRegisteredInterruptControllers;
started = 0;
v5 = (int)uINT;
while( v3 != &HalpRegisteredInterruptControllers )
{
v6 = v3;
v3 = (ULONG_PTR *)*v3;
v7 = *((_DWORD *)v6 + 56);
if( (v7 & 1) != 0 )
{
*((_DWORD *)v6 + 56) = v7 & 0xFFFFFFFE;
v8 = HalpInterruptInitializeController(v6, v2);
BugCheckParameter4 = v8;
if( v8 < 0 )
{
if( HalpInterruptControllerInUse((__int64)v6) )
KeBugCheckEx(0x5Cu, 0x200ui64, HalpInterruptLastProblem, (ULONG_PTR)v6, BugCheckParameter4);
}
}
}
v10 = HalpIommuInitializeAll(1, 0i64, v1);
if( v10 < 0 )
KeBugCheckEx(0x5Cu, 0x500ui64, v10, 0i64, 0i64);
KeGetCurrentIrql();
__writecr8(0xFui64);
_disable();
if( (v5 & 0x10000) != 0 )
{
v11 = *(_DWORD *)HalpInterruptProcessorsStarted - HalpInterruptDynamicProcessorCount;
if( HalpInterruptBlockedProcessors )
HalpInterruptStartBlockedProcessors(0i64);
v12 = 1;
if( v11 > 1 )
{
v13 = 8i64;
do
{
v14 = (const void *)(HalpHiberProcState + 1472i64 * v12);
CurTiledCr3LowPart = *(_DWORD *)(HalpTiledCr3Addresses + v13 + 4);
v15 = HalpInterruptProcessorState + ((unsigned __int64)v12 << 6);
if( (int)HalGetProcessorIdByNtNumber(v12, &Id) >= 0 )
started = HalStartNextProcessor(v14, v12, Id);
if( started != 4 )
KeBugCheckEx(0x5Cu, 0x2001ui64, v12, (unsigned int)HalpInterruptProcessorCount, v15);
++v12;
v13 += 8i64;
}
while( v12 < v11 );
}
v16 = HalpInterruptDynamicProcessorCount;
v17 = 0;
if( HalpInterruptDynamicProcessorCount )
{
v18 = 0i64;
do
{
v20 = HalpInterruptDynamicProcessorState + (v18 << 6);
ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((_PROCESSOR_NUMBER *)(v20 + 16));
v22 = *(_DWORD *)v20;
v23 = ProcessorIndexFromNumber;
CurTiledCr3LowPart = *(_DWORD *)(HalpTiledCr3Addresses + 8i64 * ProcessorIndexFromNumber + 4);
if( (unsigned int)HalStartDynamicProcessor(
(const void *)(HalpHiberProcState + 1472i64 * ProcessorIndexFromNumber),
ProcessorIndexFromNumber,
v22,
0xFFFFu) != 4 )
KeBugCheckEx(0x5Cu, 0x2001ui64, v23, (unsigned int)HalpInterruptProcessorCount, v20);
++v17;
++v18;
}
while( v17 < v16 );
}
HalpInterruptProcessorRestarting = 0;
}
HalpInterruptPicStateIntact = 0;
if( (v24 & 0x200) != 0 )
_enable();
}Referenced by:
HalpAcpiPostSleep