HalpInterruptReinitialize
VOID __stdcall HalpInterruptReinitialize(_CONTEXT *uINT){
__int64 v1;
PVOID *v2;
NTSTATUS started;
int v4;
_REGISTERED_INTERRUPT_CONTROLLER *v5;
unsigned int Flags;
NTSTATUS v7;
void *BugCheckParameter4;
int v9;
unsigned int v10;
unsigned int v11;
__int64 v12;
char *v13;
char *v14;
unsigned int v15;
unsigned int v16;
__int64 v17;
char v18;
UINT16 *v19;
unsigned int ProcessorIndexFromNumber;
UINT64 v21;
void *v22;
__int16 v23;
UINT64 Id;
LODWORD(Id) = 0;
v2 = (PVOID *)qword_140C4B850;
started = 0;
v4 = (int)uINT;
while( v2 != &qword_140C4B850 )
{
v5 = (_REGISTERED_INTERRUPT_CONTROLLER *)v2;
v2 = (PVOID *)*v2;
Flags = v5->Flags;
if( (Flags & 1) != 0 )
{
v5->Flags = Flags & 0xFFFFFFFE;
v7 = HalpInterruptInitializeController(v5);
BugCheckParameter4 = (void *)v7;
if( v7 < 0 )
{
HalpInterruptControllerInUse(v5);
if( v18 )
KeBugCheckEx(0x5Cu, (PVOID)0x200, (PVOID)*(&CmpDummyThreadEvent + 1789), v5, BugCheckParameter4);
}
}
}
v9 = HalpIommuInitializeAll(1, 0i64, v1);
if( v9 < 0 )
KeBugCheckEx(0x5Cu, (PVOID)0x500, (PVOID)v9, 0i64, 0i64);
KeGetCurrentIrql();
__writecr8(0xFui64);
_disable();
if( (v4 & 0x10000) != 0 )
{
v10 = (_DWORD)HalpInterruptProcessorsStarted - HalpInterruptDynamicProcessorCount;
if( *(&CmpDummyThreadEvent + 1780) )
HalpInterruptStartBlockedProcessors(0i64);
v11 = 1;
if( v10 > 1 )
{
v12 = 8i64;
do
{
v13 = (char *)Memory + 1472 * v11;
dword_140C49D18 = *(_DWORD *)((char *)qword_140C49D10 + v12 + 4);
v14 = (char *)HalpInterruptProcessorState + 64 * (unsigned __int64)v11;
if( (int)HalGetProcessorIdByNtNumber(v11, &Id) >= 0 )
started = HalStartNextProcessor(v13, v11, (_MEMORY_CACHING_TYPE_ORIG)Id);
if( started != 4 )
KeBugCheckEx(0x5Cu, (PVOID)0x2001, (PVOID)v11, (PVOID)(unsigned int)qword_140C50640, v14);
++v11;
v12 += 8i64;
}
while( v11 < v10 );
}
v15 = HalpInterruptDynamicProcessorCount;
v16 = 0;
if( HalpInterruptDynamicProcessorCount )
{
v17 = 0i64;
do
{
v19 = (UINT16 *)(HalpInterruptDynamicProcessorState + (v17 << 6));
ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber(v19 + 8);
v21 = *(unsigned int *)v19;
v22 = (void *)ProcessorIndexFromNumber;
dword_140C49D18 = *((_DWORD *)qword_140C49D10 + 2 * ProcessorIndexFromNumber + 1);
if( HalStartDynamicProcessor(
(INT8 *)Memory + 1472 * ProcessorIndexFromNumber,
ProcessorIndexFromNumber,
v21,
0xFFFFu) != 4 )
KeBugCheckEx(0x5Cu, (PVOID)0x2001, v22, (PVOID)(unsigned int)qword_140C50640, v19);
++v16;
++v17;
}
while( v16 < v15 );
}
HalpInterruptProcessorRestarting = 0;
}
byte_140C50380 = 0;
if( (v23 & 0x200) != 0 )
_enable();
}Referenced by:
HalpAcpiPostSleep