KdpFillMemory

VOID __stdcall KdpFillMemory(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData){
  char *Buffer; 
  unsigned int TransferCount; 
  _DBGKD_MANIPULATE_STATE64 *v4; 
  __int64 v5; 
  NTSTATUS v7; 
  unsigned __int16 v8; 
  int v9; 
  char *v10; 
  char *v11; 
  unsigned int v12; 
  UINT64 TargetBaseAddress; 
  char *v14; 
  bool v15; 
  UINT64 Flags; 
  __int128 v17; 
  UINT64 ActualSize; 

  Buffer = AdditionalData->Buffer;
  TransferCount = m->u.ReadMemory.TransferCount;
  v4 = m;
  v5 = m->u.GetVersion64.Unused[0];
  v7 = 0;
  v17 = 0i64;
  v8 = v4->u.FillMemory.Flags;
  v9 = 5;
  v10 = &Buffer[v5];
  v11 = Buffer;
  v12 = 0;
  if( (v8 & 2) != 0 )
  {
    v9 = 7;
  }
  else if( (v8 & 1) == 0 )
  {
    v7 = -1073741811;
  }
  if( !(_WORD)v5 || AdditionalData->Length < (unsigned __int16)v5 )
    v7 = -1073741811;
  if( v7 >= 0 )
  {
    TargetBaseAddress = v4->u.ReadMemory.TargetBaseAddress;
    if( TransferCount )
    {
      do
      {
        LODWORD(Flags) = v9;
        --TransferCount;
        v7 = KdpCopyMemoryChunks(TargetBaseAddress, v11, 1ui64, 0i64, Flags, &ActualSize);
        if( v7 < 0 )
          break;
        v14 = v11 + 1;
        ++TargetBaseAddress;
        ++v12;
        v15 = v11 + 1 == v10;
        v11 = Buffer;
        if( !v15 )
          v11 = v14;
      }
      while( TransferCount );
      if( v12 )
        v7 = 0;
      v4 = m;
    }
  }
  v4->ReturnStatus = v7;
  v4->u.ReadMemory.TransferCount = v12;
  LOWORD(v17) = 56;
  *((_QWORD *)&v17 + 1) = v4;
  KdSendPacket(2i64, &v17, 0i64, &KdpContext);
}

Referenced by:

KdpSendWaitContinue