HalpWheaInitDiscard
NTSTATUS __stdcall HalpWheaInitDiscard(_LOADER_PARAMETER_BLOCK *LoaderBlock){
int(__fastcall *v1)(__int64, int, int *, _DWORD *, _DWORD *, _DWORD *);
void *v2;
void *v3;
__int64 v4;
INT64 v5;
INT64 v6;
INT64 v7;
INT64 v8;
INT64 v9;
INT64 v10;
INT64 v11;
INT64 v12;
INT64 v13;
INT64 v14;
__int64 v16[3];
UINT64 PolicyLength;
PVOID Policy;
Policy = 0i64;
PolicyLength = 0i64;
if( byte_140C4A110 )
{
v1 = HalpHvEpCpuid;
v2 = HalpHvEpWriteMsr;
v3 = HalpHvEpReadMsr;
}
else
{
v1 = HalpWheaNativeCpuid;
v2 = HalpWheaNativeWriteMsr;
v3 = HalpWheaNativeReadMsr;
}
qword_140C49C18 = (__int64)v1;
qword_140C49C20 = (__int64)v3;
qword_140C49C10 = (__int64(__fastcall *)(_QWORD, _QWORD, _QWORD))v2;
if( KeHwPolicyLocateResource(LoaderBlock, 0x66ui64, 1ui64, &Policy, &PolicyLength) >= 0 && PolicyLength >= 0x18 )
{
v4 = *((_QWORD *)Policy + 2);
if( (v4 & 1) != 0 )
*(_HALP_ALLOC_CONTEXT **)((char *)&Context + 4) = (_HALP_ALLOC_CONTEXT *)(*(unsigned __int64 *)((char *)&Context + 4) | 1);
if( (v4 & 2) != 0 )
*(_HALP_ALLOC_CONTEXT **)((char *)&Context + 4) = (_HALP_ALLOC_CONTEXT *)(*(unsigned __int64 *)((char *)&Context + 4) | 2);
}
v16[0] = qword_140C49C20;
v16[1] = (__int64)qword_140C49C10;
PshedSetHalEnlightenments(v16);
*(&CmpDummyThreadEvent + 526) = HalpReserveHalPtes();
if( !*(&CmpDummyThreadEvent + 526) )
KeBugCheckEx(0x5Cu, (PVOID)0x8100, (PVOID)1, "minkernel\\hals\\lib\\whea\\whea.c", (PVOID)0xB3);
*(&CmpDummyThreadEvent + 524) = HalpReserveHalPtes();
if( !*(&CmpDummyThreadEvent + 524) )
KeBugCheckEx(0x5Cu, (PVOID)0x8100, (PVOID)1, "minkernel\\hals\\lib\\whea\\whea.c", (PVOID)0xBE);
*(&CmpDummyThreadEvent + 525) = HalpReserveHalPtes();
if( !*(&CmpDummyThreadEvent + 525) )
KeBugCheckEx(0x5Cu, (PVOID)0x8100, (PVOID)1, "minkernel\\hals\\lib\\whea\\whea.c", (PVOID)0xC7);
*(&CmpDummyThreadEvent + 522) = 0i64;
*(&CmpDummyThreadEvent + 527) = 0i64;
*(&CmpDummyThreadEvent + 523) = 0i64;
off_140C006B8[0] = (__int64(__fastcall *)())HalpWheaInitProcessorGenericSection;
WheaConfigureErrorSource(
WheaErrSrcTypeMCE,
(_WHEA_ERROR_SOURCE_CONFIGURATION *)((char *)&stru_140C00F40 + 7984),
v5,
v6);
WheaConfigureErrorSource(
WheaErrSrcTypeCMC,
(_WHEA_ERROR_SOURCE_CONFIGURATION *)((char *)&stru_140C00F40 + 7984),
v7,
v8);
WheaConfigureErrorSource(
WheaErrSrcTypeNMI,
(_WHEA_ERROR_SOURCE_CONFIGURATION *)((char *)&stru_140C00F40 + 8096),
v9,
v10);
WheaConfigureErrorSource(WheaErrSrcTypeGeneric, (_WHEA_ERROR_SOURCE_CONFIGURATION *)&stru_140C00F40 + 201, v11, v12);
WheaConfigureErrorSource(WheaErrSrcTypeGenericV2, (_WHEA_ERROR_SOURCE_CONFIGURATION *)&stru_140C00F40 + 201, v13, v14);
return 0;
}Referenced by:
HalpWheaInitSystem