HalpInterruptInitSystem
NTSTATUS __stdcall HalpInterruptInitSystem(
INT64 HalPhase,
INT64 ProcessorNumber,
_LOADER_PARAMETER_BLOCK *LoaderBlock,
VOID *a4,
INT64 a5,
_KINTERRUPT_MODE a6,
UINT64 a7,
UINT8 a8){
NTSTATUS v8;
NTSTATUS result;
PKINTERRUPT_ROUTINE **v10;
UINT32 v11;
PKINTERRUPT_ROUTINE *v12;
v8 = 0;
if( (int)HalPhase <= 16 )
{
if( (_DWORD)HalPhase == 16 )
{
HalpInterruptRegistrationAllowed = 0;
}
else if( (_DWORD)HalPhase )
{
switch( (_DWORD)HalPhase )
{
case 4:
HalpInitializeInterruptsPn();
break;
case 7:
HalpInterruptInitializeGlobals();
break;
case 9:
HalpInterruptInitDiscard(LoaderBlock);
break;
case 0xB:
_enable();
break;
}
}
else
{
off_140C00790 = (__int64(__fastcall *)(int, int, int, int, UINT16, _TRANSLATOR_INTERFACE *, UINT64 *))HaliAddInterruptRemapping;
off_140C00798[0] = (__int64(__fastcall *)())HaliRemoveInterruptRemapping;
off_140C007C8[0] = (__int64(__fastcall *)())HalpInterruptGetIdentifiers;
off_140C00808[0] = (__int64(__fastcall *)())xHalQueryProcessorRestartEntryPoint;
off_140C00868[0] = (__int64(__fastcall *)())HalpInterruptSetDestination;
off_140C00938[0] = (__int64(__fastcall *)())HalpConnectThermalInterrupt;
off_140C00978[0] = (__int64(__fastcall *)())HalpPreprocessNmi;
}
return v8;
}
if( (_DWORD)HalPhase == 19 )
goto LABEL_17;
if( (_DWORD)HalPhase != 17 )
{
if( (_DWORD)HalPhase == 21 )
{
if( *(&CmpDummyThreadEvent + 1789) && *(&CmpDummyThreadEvent + 1789) != 14 )
KeBugCheckEx(
0x5Cu,
(PVOID)0x203,
(PVOID)*(int *)(Controller + 216),
(PVOID)Controller,
(PVOID)*(&CmpDummyThreadEvent + 1789));
}
else if( (_DWORD)HalPhase == 29 )
{
return HalpInterruptInitPowerManagement();
}
return v8;
}
HalpPreAllocateKInterrupts();
HalpInitializeInterruptsBspLate();
result = HalSystemVectorDispatchEntry(v11, v10, v12);
v8 = result;
if( result >= 0 )
{
LABEL_17:
if( HalpInterruptModel() == 1 )
HalpInterruptEnableNmi();
if( (dword_140C4A10C & 1) != 0 )
HalpInterruptEnablePerformanceEvents(0i64);
return v8;
}
return result;
}Referenced by:
No references.