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