HvlpInitializeHvCrashdump

VOID __fastcall HvlpInitializeHvCrashdump(UINT64 CrashdumpAreaSpa, UINT64 PageCount){
  int v2; 
  _LARGE_INTEGER v3; 
  VOID *IndependentPages; 

  v2 = *(_DWORD *)(CrashdumpAreaSpa + 4);
  v3 = *(_LARGE_INTEGER *)(CrashdumpAreaSpa + 16);
  *(&stru_140C452E0 + 2047) = *(_DWORD *)CrashdumpAreaSpa;
  *(&stru_140C452E0 + 1024) = *(_QWORD *)(CrashdumpAreaSpa + 8);
  *(&stru_140C452E0 + 2046) = v2;
  *(&stru_140C452E0 + 1022) = v3.QuadPart;
  if( v2 )
  {
    *(&stru_140C452E0 + 1021) = MmMapIoSpaceEx(v3, (unsigned int)(v2 << 12), 2ui64);
    if( !*(&stru_140C452E0 + 1021) )
      goto LABEL_16;
  }
  IndependentPages = MmAllocateIndependentPages(0x1000ui64, 0xFFFFFFFFui64);
  qword_140C47330 = IndependentPages;
  if( IndependentPages )
    memset(IndependentPages, 0i64, 0x1000u);
  if( !VslVsmEnabled )
  {
    *(&stru_140C452E0 + 8020) = 0;
    if( !KeRegisterBugCheckReasonCallback(
            (PKBUGCHECK_REASON_CALLBACK_RECORD)((char *)&stru_140C452E0 + 7976),
            (PKBUGCHECK_REASON_CALLBACK_ROUTINE)HvlBugCheckCallbackRoutine,
            KbCallbackSecondaryDumpData,
            (PUCHAR)"HypervisorCrashdumpArea") )
      goto LABEL_16;
    *(&stru_140C452E0 + 8068) = 0;
    if( !KeRegisterBugCheckReasonCallback(
            (PKBUGCHECK_REASON_CALLBACK_RECORD)((char *)&stru_140C452E0 + 8024),
            (PKBUGCHECK_REASON_CALLBACK_ROUTINE)HvlAddPagesCallbackRoutine,
            KbCallbackAddPages,
            (PUCHAR)"HypervisorCrashdumpArea2") )
      goto LABEL_16;
    *(&stru_140C452E0 + 996) = KeRegisterNmiCallback(HvlCrashdumpCallbackRoutine, 0i64);
    qword_140C472E8 = MmAllocateMappingAddress(0x1000ui64, 0x204C5648ui64);
    if( !qword_140C472E8 )
      goto LABEL_16;
    if( !VslVsmEnabled )
      return;
  }
  *(&stru_140C452E0 + 8116) = 0;
  if( KeRegisterBugCheckReasonCallback(
         (PKBUGCHECK_REASON_CALLBACK_RECORD)((char *)&stru_140C452E0 + 8072),
         HvlSkBugCheckCallbackRoutine,
         KbCallbackSecondaryDumpData,
         (PUCHAR)"SecureKernelCrashdumpArea") )
  {
    if( (HvlpFlags & 2) == 0
      || (*(&stru_140C452E0 + 8068) = 0,
          KeRegisterBugCheckReasonCallback(
            (PKBUGCHECK_REASON_CALLBACK_RECORD)((char *)&stru_140C452E0 + 8024),
            HvlAddSecureHvPagesCallbackRoutine,
            KbCallbackAddPages,
            (PUCHAR)"HypervisorCrashdumpArea2")) )
    {
      *(&stru_140C452E0 + 8164) = 0;
      if( KeRegisterBugCheckReasonCallback(
             (PKBUGCHECK_REASON_CALLBACK_RECORD)((char *)&stru_140C452E0 + 8120),
             HvlAddSecureSkPagesCallbackRoutine,
             KbCallbackAddPages,
             (PUCHAR)"SecureKernelCrashdumpArea2") )
      {
        *(&stru_140C452E0 + 996) = KeRegisterNmiCallback(HvlSkCrashdumpCallbackRoutine, 0i64);
        return;
      }
    }
  }
LABEL_16:
  if( qword_140C47330 )
  {
    MmFreeIndependentPages(qword_140C47330, 0x1000ui64);
    qword_140C47330 = 0i64;
  }
}

Referenced by:

HvlPhase1Initialize