IopAddPageDumpRange

NTSTATUS __stdcall IopAddPageDumpRange(_KBUGCHECK_ADD_PAGES *AddPages, UINT8 *ContinueProcessing){
  ULONG Flags; 
  int v5; 
  int v6; 
  NTSTATUS result; 
  UINT8 v8; 
  unsigned __int64 Count; 
  bool v10; 
  __int64 v11; 
  __int64 v12[2]; 
  __int64 v13[4]; 
  __int128 v14; 
  v13[0] = 0i64;
  v13[1] = 0i64;
  v14 = 0i64;
  if( ContinueProcessing )
    *ContinueProcessing = 0;
  Flags = AddPages->Flags;
  v5 = Flags & 0xFF0;
  v6 = v5 ^ Flags;
  AddPages->Flags = v6;
  if( (v6 & 0x7FFFFFFC) != 0 )
    return -1073741582;
  if( v6 >= 0 )
  {
    v8 = 0;
  }
  else
  {
    v6 &= ~0x80000000;
    v8 = 1;
    AddPages->Flags = v6;
  }
  if( ((v6 - 1) & v6) != 0 )
    return -1073741811;
  Count = AddPages->Count;
  if( !Count )
    return 0;
  v10 = (v6 & 1) == 0;
  v11 = *(_QWORD *)(CrashdmpDumpBlock + 8);
  if( v10 )
    v5 |= 2u;
  v13[3] = *(_QWORD *)(CrashdmpDumpBlock + 8);
  v12[0] = *(_QWORD *)(v11 + 48);
  v12[1] = v11 + 56;
  v13[2] = (__int64)v12;
  if( (*(_DWORD *)(CrashdmpDumpBlock + 1368) & 4) != 0 )
  {
    DWORD2(v14) |= 3u;
    *(_QWORD *)&v14 = &AvailablePagesForPartialDump;
  }
  result = IoSetDumpRange((__int64)v13, (char *)AddPages->Address, Count, v5);
  if( result >= 0 )
  {
    if( ContinueProcessing )
      *ContinueProcessing = v8;
  }
  return result;
}

Referenced by:

IopDumpCallAddPagesCallbacks