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