KdpCopyMemoryChunks

NTSTATUS __stdcall KdpCopyMemoryChunks(
        UINT64 Address,
        PVOID Buffer,
        UINT64 TotalSize,
        UINT64 ChunkSize,
        UINT64 Flags,
        UINT64 *ActualSize){
  unsigned int v6; 
  int v7; 
  unsigned int v10; 
  unsigned int i; 
  unsigned int v12; 
  UINT64 v14; 
  v6 = 8;
  v7 = TotalSize;
  if( (unsigned int)ChunkSize <= 8 )
  {
    v6 = ChunkSize;
    if( !(_DWORD)ChunkSize )
      v6 = 4;
  }
  v10 = TotalSize;
  for( i = 1; v10; v10 -= i )
  {
    if( i < v6 )
    {
      do
      {
        v12 = 2 * i;
        if( 2 * i > v10 )
          break;
        if( ((2 * i - 1) & (unsigned int)Address) != 0 )
          break;
        i *= 2;
      }
      while( v12 < v6 );
    }
    while( i > v10 )
      i >>= 1;
    LODWORD(v14) = Flags;
    if( (int)MmDbgCopyMemory(Address, Buffer, i, i, v14) < 0 )
      break;
    Address += i;
    Buffer = (char *)Buffer + i;
  }
  if( ActualSize )
    *(_DWORD *)ActualSize = v7 - v10;
  return v10 != 0 ? 0xC0000001 : 0;
}

Referenced by:

KdLogDbgPrint
KdSystemDebugControl
KdpCopyCodeStream
KdpCreateRemoteFile
KdpFillMemory
KdpPrintString
KdpPromptString
KdpReadPhysicalMemory
KdpReadVirtualMemory
KdpReportCommandStringStateChange
KdpReportLoadSymbolsStateChange
KdpRestoreBreakPointEx
KdpSendWaitContinue
KdpSetCommonState
KdpSysReadControlSpace
KdpSysWriteControlSpace
KdpWriteBreakPointEx
KdpWritePhysicalMemory