IopDumpCallRemovePagesCallbacks

VOID __stdcall IopDumpCallRemovePagesCallbacks(UINT64 BugCheckCode){
  ULONG v1; 
  KBUGCHECK_REASON_CALLBACK_RECORD *Flink; 
  NTSTATUS v3; 
  _KBUGCHECK_REMOVE_PAGES RemovePages; 
  UINT8 ContinueProcessing; 
  LIST_ENTRY *PreviousValidEntry; 
  KBUGCHECK_REASON_CALLBACK_RECORD *v7; 
  v1 = BugCheckCode;
  memset(&RemovePages, 0, sizeof(RemovePages));
  Flink = KeBugCheckAddRemovePagesCallbackListHead;
  PreviousValidEntry = (LIST_ENTRY *)&KeBugCheckAddRemovePagesCallbackListHead;
  while( 1 )
  {
    v7 = Flink;
    if( Flink == (KBUGCHECK_REASON_CALLBACK_RECORD *)&KeBugCheckAddRemovePagesCallbackListHead )
      break;
    if( KeValidateBugCheckCallbackRecord(Flink, 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, KBUGCHECK_REASON_CALLBACK_RECORD *, _KBUGCHECK_REMOVE_PAGES *))Flink->CallbackRoutine)(
          6i64,
          Flink,
          &RemovePages);
        if( v3 >= 0 )
        {
          if( RemovePages.Count )
            v3 = IopRemovePageDumpRange(&RemovePages, &ContinueProcessing);
        }
      }
      while( ContinueProcessing );
      Flink->State = (v3 < 0) + 3;
    }
    else if( !PreviousValidEntry )
    {
      return;
    }
    Flink = (KBUGCHECK_REASON_CALLBACK_RECORD *)Flink->Entry.Flink;
  }
}

Referenced by:

IoAddPagesForPartialKernelDump
IoWriteCrashDump