Необходимо "тихо" подключиться к ПК, когда за ним работает пользователь или разрешить работу нескольких пользователей по RDP одновременно? Это возможно без стороннего ПО и подозрительных отчётов в антивирусах!
Теория
За входящие подключения к удаленному рабочему столу Windows отвечает служба "TermService", она же "Службы удаленных рабочих столов":
Для ее работы используется библиотека termsrv.dll (расположена в C:\Windows\System32), отредактировав которую, можно разрешить работу нескольким пользователям. Для редактирования потребуется простой HEX-редактор (я буду редактировать онлайн с помощью hexed.it).
Плюсы
На компьютер не требуется установка стороннего ПО, на которое часто срабатывают антивирусы.
Минусы
После каждого обновления потребуется патчить файл (или использовать предыдущую пропатченную версию).
На самом деле подобное придётся делать и в сторонних приложениях. В нашем случае на основе изложенных ниже команд можно создать скрипт и установить его автоматическое выполнение в планировщике.
Практика
Редактирование termsrv.dll
Переходим на сайт https://hexed.it и открываем termsrv.dll из C:\Windows\System32
Теперь нам необходимо перейти к адресу 0x0001E6A5, с него должна начинаться последовательность вида "39 81 3C 06 00 0F 84 85 45 01 00":
Обращаю внимание, что данная последовательность актуальна на 24.03.2023 для Windows 10 22H2, cборка ОС 19045.2728.
Для Windows 11 22H2 (сборка ОС 22621.525) последовательность начинается с адреса 0x0001C130 и имеет вид: "39 81 3C 06 00 00 0F 84 75 7A 01 00"
Заменяем содержимое последовательности на "B8 00 01 00 00 89 81 38 06 00 00 90":
Последовательность "B8 00 01 00 00 89 81 38 06 00 00 90" актуальна для любой версии Windows 10/11.
Осталось сохранить отредактированный файл в любое доступное место (сохранить файл в C:\Windows\System32 не получится):
Замена termsrv.dll
Внимание! Для замены файла потребуется остановка службы "TermService". Если вы подключены к компьютеру в режиме удалённого рабочего стола, создайте на основе описанных ниже команд скрипт ps1 или подключитесь с использованием стороннего ПО.
Запускаем PowerShell от имени Администратора и создаём резервную копию файла termsrv.dll:
Copy-Item -Path .\termsrv.dll -Destination .\termsrv.dll.bak;
*обратите внимание, что рабочая директория: C:\Windows\system32
Останавливаем службу "TermService" зависящую от неё службу "UmRdpService" командами:
Stop-Service "UmRdpService" -Force;
Stop-Service TermService -Force;
*символ ' ; ' обозначает конец команды
Чтобы удалить оригинальный файл, нам придётся стать его владельцем. После замены, владельцем пропатченной библиотеки будет являться ваша учётная запись. Чтобы не снижать безопасность, перенесём текущие права на новый файл с помощью PowerShell.
Скопируем в переменную $fileacl дескриптор оригинального файла:
$fileacl = Get-Acl .\termsrv.dll;
Установим владельцем файла группу Администраторы, выполнив поочерёдно следующие команды:
Задаём нового владельца файла:
$owner = "BUILTIN\Администраторы";
Открываем полный доступ к файлу:
$rights = "FullControl";
Тип прав: "Разрешить"
$type = "Allow";
Дескриптор безопасности представляет из себя объект, включающий информацию о владельце, правах и типе доступа. Добавим информацию о них в общий список аргументов:
$accessArguments = $owner, $rights, $type;
Создадим объект на основе указанных данных:
$accessRule = New-Object -TypeName System.Security.AccessControl.accessRule -ArgumentList $accessArguments;
*это одна длинная команда
Создадим переменную '$newfileacl', в которой сохраним новые права доступа:
$newfileacl.SetAccessRule($accessRule);
Применим новые права доступа к исходному файлу:
Set-Acl -Path \termsrv.dll -AclObject $newfileacl;
Заменяем оригинальную библиотеку пропатченной:
Move-Item -Path "$Env:USERPROFILE\Downloads\termsrv.dll" -Destination ".\termsrv.dll" -Force;
Устанавливаем права доступа как у оригинального файла:
Set-Acl -Path ".\termsrv.dll" -AclObject $fileacl
Запускаем службы:
Start-Service "UmRdpService";
Start-Service "TermService";
После запуска служб пользователи смогут подключаться к компьютеру и работать одновременно.
Завершение
Помните, что Windows 10 - ОС для рабочих станций и не способна заменить сервер. Я рекомендую использовать данный патч для специфических задач, например, для каких-то разовых проектов.
В одной из следующих публикаций расскажу как "правильно" автоматизировать замену файла, без прерывания рабочих процессов.
Спасибо, что дочитали статью до конца. Поддержите канал лайком и подпиской, чтобы чаще видеть в ленте подобный контент. Всего вам доброго!)
UPD от 06.2023: Полная автоматизация действий