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