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