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