HvlpInitializeHvCrashdump

NTSTATUS __stdcall HvlpInitializeHvCrashdump(UINT64 CrashdumpAreaSpa, UINT64 PageCount){
  UINT64 v2; 
  int v3; 
  NTSTATUS v4; 
  UINT64 v5; 
  UINT8 *v6; 
  void *v7; 
  v3 = *(_DWORD *)(CrashdumpAreaSpa + 4);
  v4 = -1073741823;
  v5 = *(_QWORD *)(CrashdumpAreaSpa + 16);
  dword_140C472DC = *(_DWORD *)CrashdumpAreaSpa;
  qword_140C472E0 = *(_QWORD *)(CrashdumpAreaSpa + 8);
  dword_140C472D8 = v3;
  qword_140C472D0 = v5;
  if( !v3 || (MmMapIoSpaceEx((_LARGE_INTEGER)v5, (unsigned int)(v3 << 12), 2ui64), (qword_140C472C8 = v6) != 0i64) )
  {
    MmAllocateIndependentPages(0x1000ui64, 0xFFFFFFFFui64, v2, v5);
    HvlpFallbackScratchPage = v7;
    if( v7 )
      memset((INT64)v7, 0i64);
    if( !VslVsmEnabled )
    {
      CallbackRecord.State = 0;
      if( !KeRegisterBugCheckReasonCallback(
              &CallbackRecord,
              (PKBUGCHECK_REASON_CALLBACK_ROUTINE)HvlBugCheckCallbackRoutine,
              KbCallbackSecondaryDumpData,
              (PUCHAR)"HypervisorCrashdumpArea") )
        goto LABEL_16;
      stru_140C47238.State = 0;
      if( !KeRegisterBugCheckReasonCallback(
              &stru_140C47238,
              (PKBUGCHECK_REASON_CALLBACK_ROUTINE)HvlAddPagesCallbackRoutine,
              KbCallbackAddPages,
              (PUCHAR)"HypervisorCrashdumpArea2") )
        goto LABEL_16;
      HvlpCrashdumpData = (__int64)KeRegisterNmiCallback((PNMI_CALLBACK)HvlCrashdumpCallbackRoutine, 0i64);
      qword_140C472E8 = (UINT8 *)MmAllocateMappingAddress(0x1000ui64, 0x204C5648ui64);
      if( !qword_140C472E8 )
        goto LABEL_16;
      if( !VslVsmEnabled )
        return 0;
    }
    stru_140C47268.State = 0;
    if( KeRegisterBugCheckReasonCallback(
           &stru_140C47268,
           HvlSkBugCheckCallbackRoutine,
           KbCallbackSecondaryDumpData,
           (PUCHAR)"SecureKernelCrashdumpArea") )
    {
      if( (HvlpFlags & 2) == 0
        || (stru_140C47238.State = 0,
            KeRegisterBugCheckReasonCallback(
              &stru_140C47238,
              HvlAddSecureHvPagesCallbackRoutine,
              KbCallbackAddPages,
              (PUCHAR)"HypervisorCrashdumpArea2")) )
      {
        stru_140C47298.State = 0;
        if( KeRegisterBugCheckReasonCallback(
               &stru_140C47298,
               HvlAddSecureSkPagesCallbackRoutine,
               KbCallbackAddPages,
               (PUCHAR)"SecureKernelCrashdumpArea2") )
        {
          HvlpCrashdumpData = (__int64)KeRegisterNmiCallback((PNMI_CALLBACK)HvlSkCrashdumpCallbackRoutine, 0i64);
          return 0;
        }
      }
    }
  }
LABEL_16:
  if( HvlpFallbackScratchPage )
  {
    MmFreeIndependentPages(HvlpFallbackScratchPage, 0x1000ui64);
    HvlpFallbackScratchPage = 0i64;
  }
  return v4;
}

Referenced by:

HvlPhase1Initialize