Главная

Friday, 25 August 2023

Более одного RDP сеанса в Windows Desktop.


Всем привет.

Удаленные пользователи или администраторы могут подключаться к своим компьютерам Windows 10 или 11 через службу удаленных рабочих столов (RDP). Достаточно включить удаленный рабочий стол (Remote Desktop), разрешить RDP доступ для конкретного пользователя и подключиться к компьютеру с помощью любого клиента удаленного рабочего стола. Однако в десктопных версия Windows есть ограничение на количество одновременных RDP сессии. Разрешается только один активный Remote Desktop сеанс пользователя. Не совсем удобно, особенно если вам надо что-то поправить не выгоняя самого пользователя из-за стола Windows.

Ограничение на количество одновременных RDP подключений в Windows является не техническим, а программным и лицензионным. Таким образом Microsoft запрещает создавать терминальный RDP сервер на базе рабочей станции для одновременной работы нескольких пользователей.

Если ваши задачи требуют развертывание терминального сервера, Microsoft предлагает пробрести Windows Server (по умолчанию разрешает 2 активных RDP подключения). Если вам нужно большее количество одновременных сессий пользователей, нужно приобрести лицензии RDS CAL, установить и настроить роль Remote Desktop Session Host (RDSH) или полноценную RDS ферму.

Технически любая редакция Windows при наличии достаточного ресурсов оперативной памяти и CPU может обслуживать одновременную работу нескольких десятков удаленных пользователей. В среднем на одну RDP сессию пользователя требуется 150-200 Мб памяти (без учета запускаемых приложений). Т.е. максимальное количество одновременных RDP сессий в теории ограничивается только ресурсами компьютера.

На сегодня существуют три способа убрать ограничение на количество одновременных RDP подключений в Windows 10 и 11:

  • использование RDP Wrapper
  • модификации системного файла termsrv.dll
  • апгрейд до редакции Windows 10/11 Enterprise for virtual desktops (multi-session).

RDP Wrapper был известен довольно давно, поэтому его ловит почти каждый антивирус. Да и ставить что-то подозрительное дополнительно в свою систему не есть хорошо.

Апгрейд до редакции Windows 10/11 Enterprise for virtual desktops (multi-session) довольно свежий метод, но сомневаюсь что ваша "новая" лицензия продержится валидной достаточно долго. Только если вы ее честно купили.

Поэтому считаю что самый верный способ это модификация файла termsrv.dll для снятия ограничений RDP в Windows 10 и 11. Тем более что вы сами ее выполните, правда придеться повозиться.

Чтобы убрать ограничение на количество RDP подключений пользователей в Windows без использования rdpwrapper нужно заменить файл termsrv.dll. Это файл библиотеки, которая используется службой Remote Desktop Services. Файл находится в каталоге C:\Windows\System32.

Прежде, чем править или заменять файл termsrv.dll желательно создать его резервную копию. Это поможет вам в случае необходимости можно будет вернуться к исходной версии файла. Запустите командную строку с правами администратора и выполните команду:

copy c:\Windows\System32\termsrv.dll termsrv.dll_backup

Затем нужно стать владельцем файла. Проще всего это сделать из командной строки. Чтобы сменить владельца файла с TrustedInstaller на группу локальных администраторов с помощью команды:

takeown /F c:\Windows\System32\termsrv.dll /A

Должно появится сообщение: «SUCCESS: The file (or folder): «c:\Windows\System32\termsrv.dll» now owned by the administrators group».

Теперь с помощью icacls.exe предоставьте группе локальных администраторов полные права на файл termsrv.dll (Full Control):

icacls c:\Windows\System32\termsrv.dll /grant Administrators:F (или Администраторы в русской версии Windows).

Должно появится сообщение: "processed file: c:\Windows\System32\termsrv.dll Successfully processed 1 files; Failed processing 0 files".


Теперь нужно остановить службу Remote Desktop Service (TermService) из консоли services.msc или из командной строки:

Net stop TermService

Вместе с ней останавливается служба Remote Desktop Services UserMode Port Redirector.

Чтобы узнать номер билда вашей Windows, выполните команду winver или следующие команды PowerShell:

  • Get-ComputerInfo | select WindowsProductName
  • (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DisplayVersion).DisplayVersion

В моем случае была установлена Windows 10 билд 22H2.

Затем откройте файл termsrv.dll с помощью любого HEX редактора (к примеру Tiny Hexer). В зависимости от билда Windows нужно найти и заменить строку - для Windows 10 22H2 найти строку 

39 81 3C 06 00 00 0F 84 85 45 01 00 

и заменить ее на 

B8 00 01 00 00 89 81 38 06 00 00 90.

Редактор Tiny Hexer не позволяет редактировать файл termsvr.dll напрямую из папки system32. Скопируйте его на рабочий стол, а после модификации замените исходный файл.

Сохраните файл и запустите службу TermService.

Если что-то пошло не так, и у вас возникнут проблемы со службой RDP, остановите службу и замените модифицированный файл termsrv.dll исходной версией:

copy termsrv.dll_backup c:\Windows\System32\termsrv.dll

Чтобы не редактировать файл termsrv.dll вручную с помощью HEX редактора, вы можете использовать следующий PowerShell скрипт для автоматического патчинга файла termsrv.dll. Полный код скрипта доступен в GitHub репозитарии:

 https://github.com/winadm/posh/blob/master/Desktop/RDP_patch.ps1

Данный скрипт написан не мной, так что его работа на ваши риск и везение. 

Преимущество способа отключения ограничения на количество RDP сессий в Windows путем замены файла termsrv.dll в том, что на него не реагируют антивирусы. Основной недостаток - вам придется вручную править файл после каждого обновления билда Windows (или при обновлении версии файла termsrv.dll в рамках ежемесячных кумулятивных обновлений).

Однако помните - все модификации операционной системы описанные здесь считаются нарушением лицензионного соглашения Windows, и вы можете использовать их на свой страх и риск. Хотя откуда у вас страх перед Windows?))

Удачи.

No comments:

Post a Comment

А что вы думаете по этому поводу?