IopMarkPagesForDpcData

NTSTATUS __stdcall IopMarkPagesForDpcData(_MM_KERNEL_DUMP_CONTEXT *Context){
  NTSTATUS v1; 
  __int64 v2; 
  __int64 v4; 
  VOID *v5; 
  unsigned int v6; 
  UINT64 v7; 
  unsigned int v8; 
  __int64 **v9; 
  NTSTATUS result; 
  __int64 **i; 

  v1 = 0;
  v2 = 0i64;
  if( !(_DWORD)KeNumberProcessors_0 )
    return v1;
  while( 1 )
  {
    v4 = (__int64)*(&KiProcessorBlock + v2);
    if( v4 )
      break;
LABEL_18:
    v2 = (unsigned int)(v2 + 1);
    if( (unsigned int)v2 >= (unsigned int)KeNumberProcessors_0 )
      return v1;
  }
  v5 = *(VOID **)(v4 + 33960);
  if( v5 )
  {
    v6 = *(_DWORD *)(v4 + 33968) - (_DWORD)v5;
    v7 = (unsigned int)(8 * dword_140CFA32C);
    if( v6 <= (unsigned int)v7 )
      v7 = v6;
    if( !(_DWORD)v7 )
      v7 = 8i64 * dword_140C50A78;
    MmAddRangeToCrashDump(Context, v5, v7);
  }
  v8 = 0;
  v9 = (__int64 **)(v4 + 12480);
  while( 1 )
  {
    result = MmAddRangeToCrashDump(Context, v9, 0x28ui64);
    v1 = result;
    if( result < 0 )
      return result;
    for( i = (__int64 **)*v9; i; i = (__int64 **)*i )
    {
      result = MmAddRangeToCrashDump(Context, i - 1, 0x40ui64);
      v1 = result;
      if( result < 0 )
        return result;
      if( i[6] != (__int64 *)1 )
      {
        result = MmAddRangeToCrashDump(Context, i[6], 0x60ui64);
        v1 = result;
        if( result < 0 )
          return result;
      }
    }
    ++v8;
    v9 += 5;
    if( v8 >= 2 )
      goto LABEL_18;
  }
}

Referenced by:

IopAddMiniDumpPagesToPartialKernelDump