KdpReadRemoteFile

INT64 __stdcall KdpReadRemoteFile(VOID *Handle, UINT64 Offset, VOID *Buffer, UINT64 Length, UINT64 *Completed){
  __int64 v5; 
  unsigned int v8; 
  int v9; 
  UINT8 v11; 
  __int64 v12; 
  unsigned int v13; 
  int v14[2]; 
  INT64 *v15; 
  __int128 v16; 
  INT64 result[3]; 
  unsigned int v18; 
  v5 = (unsigned int)((_DWORD)Handle - 1);
  v8 = Length;
  memset((INT64)result, 0i64);
  v9 = 0;
  if( (unsigned int)v5 >= 0x10 )
    return 3221225485i64;
  v11 = KdEnterDebugger(0i64, 0i64);
  if( KdpRemoteFiles[v5] )
  {
    if( v8 )
    {
      while( 1 )
      {
        v12 = KdpRemoteFiles[v5];
        v14[1] = 0;
        v13 = 0;
        result[1] = v12;
        v16 = 0i64;
        result[0] = 13361i64;
        result[2] = Offset;
        v18 = v8 <= (unsigned __int64)(unsigned int)KdTransportMaxPacketSize - 64 ? v8 : KdTransportMaxPacketSize - 64;
        v14[0] = 4194368;
        v15 = result;
        KdSendPacket(11i64, v14, 0i64, &KdpContext);
        if( (_BYTE)KdDebuggerNotPresent )
          break;
        WORD1(v16) = v18;
        *((_QWORD *)&v16 + 1) = Buffer;
        if( !(unsigned int)KdReceivePacket(11i64, v14, &v16, &v13, &KdpContext) )
        {
          if( result[0] < 0 )
            goto LABEL_16;
          v9 += v13;
          Buffer = (char *)Buffer + v13;
          Offset += v13;
          v8 -= v13;
        }
        if( !v8 )
          goto LABEL_16;
      }
      HIDWORD(result[0]) = -1073740972;
    }
LABEL_16:
    *(_DWORD *)Completed = v9;
  }
  else
  {
    HIDWORD(result[0]) = -1073741811;
  }
  KdExitDebugger(v11);
  return HIDWORD(result[0]);
}

Referenced by:

KdPullRemoteFileEx