KdpCreateRemoteFile
NTSTATUS __stdcall KdpCreateRemoteFile(
VOID **Handle,
UINT64 *Length,
_UNICODE_STRING *FileName,
UINT64 DesiredAccess,
UINT64 FileAttributes,
UINT64 ShareAccess,
UINT64 CreateDisposition,
UINT64 CreateOptions){
UINT8 v12;
_QWORD *v13;
unsigned int i;
UINT64 v15;
wchar_t *Buffer;
int v17;
UINT64 v18;
UINT64 Flags;
UINT64 ActualSize;
__int128 v21;
__int64 v22[3];
__int64 v23[8];
memset(v23, 0i64, sizeof(v23));
if( FileName->Length > (unsigned __int64)(unsigned int)KdTransportMaxPacketSize - 64 )
return -1073741811;
if( (_BYTE)KdDebuggerNotPresent )
return -1073740972;
v12 = KdEnterDebugger(0i64, 0i64);
v13 = KdpRemoteFiles;
for( i = 0; i < 0x10; ++i )
{
if( !*v13 )
break;
++v13;
}
if( i < 0x10 )
{
while( 1 )
{
v15 = FileName->Length;
v22[1] = (__int64)v23;
v22[0] = 4194368i64;
Buffer = FileName->Buffer;
LODWORD(Flags) = 4;
v21 = 0i64;
LODWORD(ActualSize) = 0;
v23[0] = 13360i64;
v23[1] = 0x8000120089i64;
LODWORD(v23[2]) = 1;
*(__int64 *)((char *)&v23[2] + 4) = 1i64;
KdpCopyMemoryChunks((UINT64)Buffer, &KdpMessageBuffer, v15, 0i64, Flags, &ActualSize);
LOWORD(v21) = ActualSize + 2;
*((_QWORD *)&v21 + 1) = &KdpMessageBuffer;
*(_WORD *)((char *)&KdpMessageBuffer + (unsigned __int16)(ActualSize + 2) - 2) = 0;
KdSendPacket(11i64, v22, &v21, &KdpContext);
if( (_BYTE)KdDebuggerNotPresent )
break;
WORD1(v21) = 4096;
*((_QWORD *)&v21 + 1) = &KdpMessageBuffer;
if( !(unsigned int)KdReceivePacket(11i64, v22, &v21, &ActualSize, &KdpContext) )
{
v17 = HIDWORD(v23[0]);
goto LABEL_14;
}
}
v17 = -1073740972;
HIDWORD(v23[0]) = -1073740972;
LABEL_14:
if( v17 >= 0 )
{
KdpRemoteFiles[i] = v23[4];
*Handle = (VOID *)(i + 1);
if( Length )
{
v18 = v23[5];
if( v23[5] >= 0x10000000ui64 )
v18 = 4096i64;
*Length = v18;
}
}
}
else
{
HIDWORD(v23[0]) = -1073741801;
}
KdExitDebugger(v12);
return HIDWORD(v23[0]);
}Referenced by:
KdPullRemoteFileEx