IopWriteCapsuleTriageDumpToFirmware
VOID __fastcall IopWriteCapsuleTriageDumpToFirmware(
UINT64 BugCheckCode,
UINT64 BugCheckParameter1,
UINT64 BugCheckParameter2,
UINT64 BugCheckParameter3,
UINT64 BugCheckParameter4,
_CONTEXT *ContextSave,
_ETHREAD *Thread,
_KTRAP_FRAME *TrapFrame){
char *v8;
unsigned int v12;
_KTRAP_FRAME *v13;
const UINT16 *v14;
UINT64 v15;
NTSTATUS v16;
__int64 v17;
UINT64 TriageOptions;
UINT64 NumDataArrays;
VOID *DataArraysIn;
UINT64 BugCheckCodea;
UINT64 ModifyArrayIn[2];
_CONTEXT *Context;
UINT64 BugCheckParameters[4];
v8 = (char *)TriageDumpBlock;
BugCheckCodea = (unsigned int)BugCheckCode;
Context = ContextSave;
if( TriageDumpBlock )
{
VfDisableHalVerifier();
BugCheckParameters[3] = BugCheckParameter4;
BugCheckParameters[0] = BugCheckParameter1;
BugCheckParameters[1] = BugCheckParameter2;
BugCheckParameters[2] = BugCheckParameter3;
IopUpdateMinidumpContext(
v12,
BugCheckParameter1,
BugCheckParameter2,
BugCheckParameter3,
BugCheckParameter4,
ContextSave,
v13);
MmSnapTriageDumpInformation(ContextSave, BugCheckParameters, v14, v15);
IoFillDumpHeader(
v8 + 4124,
4ui64,
(unsigned int)BugCheckCodea,
BugCheckParameter1,
BugCheckParameter2,
BugCheckParameter3,
BugCheckParameter4,
&Thread->Tcb);
ModifyArrayIn[0] = *(&stru_140C452E0 + 718) | 0x10000000000i64;
ModifyArrayIn[1] = (UINT64)&stru_140C452E0 + 2880;
LODWORD(DataArraysIn) = 1;
LODWORD(NumDataArrays) = 65;
LODWORD(TriageOptions) = CmNtCSDVersion;
v16 = IoFillTriageDumpBuffer(
0x3E000ui64,
v8 + 12316,
1u,
0xDFFui64,
0i64,
Context,
&Thread->Tcb,
TriageOptions,
NumDataArrays,
DataArraysIn,
ModifyArrayIn,
ModifyArrayIn);
*(_OWORD *)(v8 + 4220) = 0i64;
*(_OWORD *)(v8 + 4236) = 0i64;
*((_DWORD *)v8 + 2070) = 0;
v17 = *((unsigned int *)v8 + 3080);
*((_DWORD *)v8 + 2075) |= 0x88u;
*(_QWORD *)(v8 + 8124) = v17;
*((_DWORD *)v8 + 2069) = 3583;
if( v16 >= 0 )
IopWriteTriageDumpToFirmware((UINT8 *)TriageDumpBlock);
}
}Referenced by:
IoWriteCrashDump