MmAddRangeToCrashDump

NTSTATUS __stdcall MmAddRangeToCrashDump(_MM_KERNEL_DUMP_CONTEXT *Context, VOID *Va, UINT64 NumberOfBytes){
  __int64 v6; 
  int v7; 
  _MI_VA_RANGE v8; 
  _MMPTE *v9; 
  _MMPTE *PteBase; 
  _MI_VA_RANGE *v11; 
  __int64 v12; 
  UINT64 PagingLevel; 
  _MI_VA_RANGE VaHierarchy[24]; 

  memset(VaHierarchy, 0i64, 0x58u);
  v6 = 1i64;
  if( (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 )
  {
    LOBYTE(v7) = MiIsWorkingSetTrimThread();
    v8 = VaHierarchy[20];
    if( !v7 )
      v8 = v6;
    VaHierarchy[20] = v8;
  }
  *(_QWORD *)&VaHierarchy[16] = Va;
  v9 = (_MMPTE *)((char *)Va + NumberOfBytes - 1);
  PteBase = MmGetPteBase();
  *(_QWORD *)&VaHierarchy[18] = v9;
  v11 = &VaHierarchy[2];
  v12 = 4i64;
  do
  {
    Va = (char *)PteBase + (((unsigned __int64)Va >> 9) & 0x7FFFFFFFF8i64);
    v9 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)v9 >> 9) & 0x7FFFFFFFF8i64));
    *((_QWORD *)v11 - 1) = Va;
    *(_QWORD *)v11 = v9;
    v11 += 4;
    v12 -= v6;
  }
  while( v12 );
  LODWORD(PagingLevel) = 3;
  return MiAddRangeToCrashDump(Context, (_MMPTE *)Va, v9, VaHierarchy, PagingLevel);
}

Referenced by:

ExAddPrivateDataToCrashDump
IopAddLiveDumpPagesToPartialKernelDump
IopAddMiniDumpPagesToPartialKernelDump
IopAddTriageDumpDataToPartialKernelDump
IopLiveDumpAddTriageDumpData
IopLiveDumpMarkDeviceNode
IopLiveDumpMarkImportantDumpData
IopLiveDumpMarkLoadedModuleList
IopLiveDumpMarkProcessorData
IopLiveDumpMarkRequiredDumpData
IopMarkPagesForDeviceNode
IopMarkPagesForDpcData
IopMarkPagesForLoadedDriverInformation
IopMarkPagesForProcessorData
IopMarkPagesForRunTimeTriageDataBlocks
MiAddPartitionDataToCrashDump
MiAddUnicodeStringToCrashDump
MmAddPrivateDataToCrashDump
MmAddUnloadedDriverInformationToCrashDump
MmGetDumpRange