IopDumpCallRemovePagesCallbacks

VOID __stdcall IopDumpCallRemovePagesCallbacks(UINT64 BugCheckCode){
  unsigned int v1; 
  __int64 v2; 
  NTSTATUS v3; 
  _KBUGCHECK_REMOVE_PAGES RemovePages; 
  UINT8 ContinueProcessing; 
  _LIST_ENTRY *PreviousValidEntry; 
  __int64 v7; 

  v1 = BugCheckCode;
  memset(&RemovePages, 0, sizeof(RemovePages));
  v2 = *(&KiSwapEvent + 44);
  PreviousValidEntry = (_LIST_ENTRY *)((char *)&KiSwapEvent + 352);
  while( 1 )
  {
    v7 = v2;
    if( (_UNKNOWN *)v2 == (_UNKNOWN *)((char *)&KiSwapEvent + 352) )
      break;
    if( KeValidateBugCheckCallbackRecord(
           (_KBUGCHECK_REASON_CALLBACK_RECORD *)v2,
           KbCallbackRemovePages,
           &PreviousValidEntry) )
    {
      RemovePages.Context = 0i64;
      RemovePages.BugCheckCode = v1;
      v3 = 0;
      do
      {
        RemovePages.Address = 0i64;
        RemovePages.Flags = 0;
        RemovePages.Count = 0i64;
        ContinueProcessing = 0;
        (*(void(__fastcall **)(__int64, __int64, _KBUGCHECK_REMOVE_PAGES *))(v2 + 16))(6i64, v2, &RemovePages);
        if( v3 >= 0 )
        {
          if( RemovePages.Count )
            v3 = IopRemovePageDumpRange(&RemovePages, &ContinueProcessing);
        }
      }
      while( ContinueProcessing );
      *(_BYTE *)(v2 + 44) = (v3 < 0) + 3;
    }
    else if( !PreviousValidEntry )
    {
      return;
    }
    v2 = *(_QWORD *)v2;
  }
}

Referenced by:

IoAddPagesForPartialKernelDump
IoWriteCrashDump