KdpReadVirtualMemory

VOID __stdcall KdpReadVirtualMemory(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData){
  UINT64 v2; 
  unsigned __int64 TransferCount; 
  unsigned int MaximumLength; 
  char *Buffer; 
  unsigned __int64 TargetBaseAddress; 
  unsigned int v9; 
  UINT64 Flags; 
  __int128 v11; 
  UINT64 ActualSize; 

  ActualSize = v2;
  TransferCount = m->u.ReadMemory.TransferCount;
  v11 = 0i64;
  if( TransferCount > (unsigned __int64)(unsigned int)KdTransportMaxPacketSize - 56 )
    LODWORD(TransferCount) = KdTransportMaxPacketSize - 56;
  MaximumLength = AdditionalData->MaximumLength;
  Buffer = AdditionalData->Buffer;
  TargetBaseAddress = m->u.ReadMemory.TargetBaseAddress;
  if( (unsigned int)TransferCount > MaximumLength )
    LODWORD(TransferCount) = MaximumLength;
  LODWORD(Flags) = 4;
  LODWORD(ActualSize) = TransferCount;
  m->ReturnStatus = KdpCopyMemoryChunks(
                      TargetBaseAddress,
                      Buffer,
                      (unsigned int)TransferCount,
                      0i64,
                      Flags,
                      &ActualSize);
  v9 = ActualSize;
  AdditionalData->Length = ActualSize;
  m->u.ReadMemory.ActualBytesRead = v9;
  LOWORD(v11) = 56;
  *((_QWORD *)&v11 + 1) = m;
  KdSendPacket(2i64, &v11, AdditionalData, &KdpContext);
}

Referenced by:

KdpSendWaitContinue