KdpReadRemoteFile

NTSTATUS __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 v17[8]; 

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

Referenced by:

KdPullRemoteFileEx