Пару слов о RDP-файлах


Описание формата RDP — файла и мысли о том, как эти знания приложить на практике

RDP-файл — это текстовый файл с настройками подключения по RDP к удаленному серверу. Это значит, что настройки RDP-подключения можно редактировать в блокноте как обычный INI-файл.

Можно этот файл читать/редактировать и программно, только нужно учитывать, что каждый символ в этом файле закодирован не одним байтом в ASCII, а двумя. Заголовок файла в 16-ричной системе представлен последовательностью символов «FF FE», конец строки — «0D 00 0A 00».

Попробуем прочитать такой файл построчно:

' параметры скрипта: имя файла
Set objArgs = WScript.Arguments
FilePath    = objArgs(0)
 
' ФС:
Set fso = CreateObject("Scripting.FileSystemObject")
 
' открыли файл на чтение:
Set TextFile  = fso.OpenTextFile(FilePath, 1)
 
' чтение заголовка, без проверки:
TextFile.Read(2)
 
' цикл чтения по строкам:
Do
Str = vbNullString
ChkCode = vbNullString
 
 ' цикл чтения по символам:
Do
' первый байт текущего символа строки:
a   = Asc(TextFile.Read(1))
Str = Str & Chr(a)
 
' проверочный код конца строки:
ChkCode = ChkCode & Hex(a)
 
' второй байт ... (который "00"):
a = Asc(TextFile.Read(1))
 
 ' проверочный код конца строки:
ChkCode = ChkCode & Hex(a)
ChkCode = Right(ChkCode, 4)
 
' проверка конца строки:
Loop Until ChkCode = "D0A0"
 
 ' вывод строки:
MsgBox Str
 
Loop Until TextFile.AtEndOfStream

Примечание

Ситуаций, когда нужно будет программно прочитать rdp-файл, может быть много. Например, если, по какой то причине, нужно обойти все rdp-файлы рабочего стола пользователя и исправить в них какие нибудь параметры, оставив остальные без изменения. Или вовсе, удалить весь набор rdp-файлов пользователя с отбором по имени удаленного сервера или запускаемого приложения.

Чуть не забыл, приведенный выше программный код, будет работать только с «правильным» rdp-файлом. Который есть по адресу «FilePath», непустой, символы закодированы в ASCII двумя байтами и строки которого заканчиваются последовательностью символов «D0A0».