IopMarkPagesForDpcData

__int64 __fastcall IopMarkPagesForDpcData(__int64 (__fastcall **a1)(_QWORD, __int64, __int64)){
  unsigned int v1; 
  __int64 v2; 
  __int64 v4; 
  unsigned __int64 v5; 
  unsigned int v6; 
  __int64 v7; 
  unsigned int v8; 
  _QWORD *v9; 
  __int64 result; 
  _QWORD *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 = *(_QWORD *)(v4 + 33960);
  if( v5 )
  {
    v6 = *(_DWORD *)(v4 + 33968) - v5;
    v7 = (unsigned int)(8 * dword_140CFA32C);
    if( v6 <= (unsigned int)v7 )
      v7 = v6;
    if( !(_DWORD)v7 )
      v7 = 8i64 * (unsigned int)KiDpcWatchdogProfileArrayLength;
    MmAddRangeToCrashDump(a1, v5, v7);
  }
  v8 = 0;
  v9 = (_QWORD *)(v4 + 12480);
  while( 1 )
  {
    result = MmAddRangeToCrashDump(a1, (unsigned __int64)v9, 40i64);
    v1 = result;
    if( (int)result < 0 )
      return result;
    for( i = (_QWORD *)*v9; i; i = (_QWORD *)*i )
    {
      result = MmAddRangeToCrashDump(a1, (unsigned __int64)(i - 1), 64i64);
      v1 = result;
      if( (int)result < 0 )
        return result;
      if( i[6] != 1i64 )
      {
        result = MmAddRangeToCrashDump(a1, i[6], 96i64);
        v1 = result;
        if( (int)result < 0 )
          return result;
      }
    }
    ++v8;
    v9 += 5;
    if( v8 >= 2 )
      goto LABEL_18;
  }
}

Referenced by:

IopAddMiniDumpPagesToPartialKernelDump