HalpWheaInitDiscard
NTSTATUS __stdcall HalpWheaInitDiscard(_LOADER_PARAMETER_BLOCK *LoaderBlock){
void *v1;
void *v2;
void *v3;
__int64 v4;
__int64 v6[3];
UINT64 PolicyLength;
PVOID Policy;
Policy = 0i64;
PolicyLength = 0i64;
if( HalpHvWheaEnlightenedCpuManager )
{
v1 = HalpHvEpCpuid;
v2 = HalpHvEpWriteMsr;
v3 = HalpHvEpReadMsr;
}
else
{
v1 = HalpWheaNativeCpuid;
v2 = HalpWheaNativeWriteMsr;
v3 = HalpWheaNativeReadMsr;
}
HalpWheaCpuid = (__int64)v1;
HalpWheaReadMsr = (__int64)v3;
HalpWheaWriteMsr = (__int64(__fastcall *)(_QWORD, _QWORD, _QWORD))v2;
if( KeHwPolicyLocateResource(LoaderBlock, 0x66ui64, 1ui64, &Policy, &PolicyLength) >= 0 && PolicyLength >= 0x18 )
{
v4 = *((_QWORD *)Policy + 2);
if( (v4 & 1) != 0 )
HalpMcaRecoveryPolicy |= 1ui64;
if( (v4 & 2) != 0 )
HalpMcaRecoveryPolicy |= 2ui64;
}
v6[0] = HalpWheaReadMsr;
v6[1] = (__int64)HalpWheaWriteMsr;
PshedSetHalEnlightenments(v6);
HalpWheaMappingMceReservation = (UINT64)HalpReserveHalPtes();
if( !HalpWheaMappingMceReservation )
KeBugCheckEx(0x5Cu, 0x8100ui64, 1ui64, (ULONG_PTR)"minkernel\\hals\\lib\\whea\\whea.c", 0xB3ui64);
HalpWheaMappingNmiReservation = (__int64)HalpReserveHalPtes();
if( !HalpWheaMappingNmiReservation )
KeBugCheckEx(0x5Cu, 0x8100ui64, 1ui64, (ULONG_PTR)"minkernel\\hals\\lib\\whea\\whea.c", 0xBEui64);
HalpWheaMappingReservation = (__int64)HalpReserveHalPtes();
if( !HalpWheaMappingReservation )
KeBugCheckEx(0x5Cu, 0x8100ui64, 1ui64, (ULONG_PTR)"minkernel\\hals\\lib\\whea\\whea.c", 0xC7ui64);
HalpWheaMappingMceLock = 0i64;
HalpWheaMappingNmiLock = 0i64;
HalpWheaMappingLock = 0i64;
off_140C006B8[0] = (__int64(__fastcall *)())HalpWheaInitProcessorGenericSection;
WheaConfigureErrorSource(0, (__int64)&HalpMachineCheckConfiguration);
WheaConfigureErrorSource(1, (__int64)&HalpMachineCheckConfiguration);
WheaConfigureErrorSource(3, (__int64)&HalpNmiConfiguration);
WheaConfigureErrorSource(5, (__int64)&HalpGenericConfiguration);
WheaConfigureErrorSource(12, (__int64)&HalpGenericConfiguration);
return 0;
}Referenced by:
HalpWheaInitSystem