IopWriteCapsuleTriageDumpToFirmware

UINT8 __stdcall IopWriteCapsuleTriageDumpToFirmware(
        UINT64 BugCheckCode,
        UINT64 BugCheckParameter1,
        UINT64 BugCheckParameter2,
        UINT64 BugCheckParameter3,
        UINT64 BugCheckParameter4,
        _CONTEXT *ContextSave,
        _KTHREAD *Thread,
        _KTRAP_FRAME *TrapFrame){
  char *v8; 
  UINT8 v9; 
  unsigned int v14; 
  _KTHREAD *v15; 
  int v16; 
  __int64 v17; 
  _KTRAP_FRAME *v18; 
  UINT64 v19; 
  int v20; 
  void *v21; 
  unsigned int v22[2]; 
  __int64 *v23; 
  _CONTEXT *v24; 
  UINT64 BugCheckParameters[4]; 
  v8 = (char *)CapsuleTriageDumpBlock;
  v9 = 0;
  v21 = Thread;
  v24 = ContextSave;
  v20 = 0;
  if( !CapsuleTriageDumpBlock )
    return 0;
  VfDisableHalVerifier();
  BugCheckParameters[3] = BugCheckParameter4;
  BugCheckParameters[0] = BugCheckParameter1;
  BugCheckParameters[1] = BugCheckParameter2;
  BugCheckParameters[2] = BugCheckParameter3;
  IopUpdateMinidumpContext(
    v14,
    BugCheckParameter1,
    BugCheckParameter2,
    BugCheckParameter3,
    BugCheckParameter4,
    ContextSave,
    (_KTHREAD *)v15,
    v18);
  MmSnapTriageDumpInformation(ContextSave, BugCheckParameters);
  IoFillDumpHeader((_DWORD)v8 + 4124, (PWSTR)4);
  v22[0] = IopNumTriageDumpDataBlocks;
  v22[1] = 256;
  v23 = IopTriageDumpDataBlocks;
  LODWORD(v19) = 1;
  v16 = IoFillTriageDumpBuffer(
          0x3E000u,
          (unsigned __int64 *)(v8 + 12316),
          1,
          3583,
          0i64,
          (__int64)v24,
          v21,
          (int)CmNtCSDVersion,
          65,
          v19,
          (__int64)v22,
          v22,
          &v20);
  *(_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 )
    return(int)IopWriteTriageDumpToFirmware((_NT_PRODUCT_TYPE *)CapsuleTriageDumpBlock) >= 0;
  return v9;
}

Referenced by:

IoWriteCrashDump