Người dùng từ xa có thể kết nối đến máy tính Windows 10 và 11 của họ qua Dịch vụ Remote Desktop (RDP). Chỉ cần bật RDP trong cài đặt thiết bị và kết nối đến máy tính bằng bất kỳ Remote Desktop client nào. Nhưng có hạn chế về số lượng phiên RDP đồng thời – chỉ một người dùng từ xa có thể làm việc cùng lúc. Nếu bạn cố gắng mở phiên RDP thứ hai, cảnh báo sẽ xuất hiện yêu cầu ngắt kết nối phiên của người dùng đầu tiên.
Another user is signed in. If you continue, they’ll be disconnected. Do you want to sign in anyway?
Tất cả các phiên bản Windows desktop (bao gồm Win 10 và 11) có một số hạn chế về việc sử dụng Dịch vụ Remote Desktop:
- Bạn chỉ có thể kết nối từ xa qua RDP đến các phiên bản Windows cao hơn (Professional và Enterprise). Trong phiên bản Windows Home và Single Language, kết nối Remote Desktop đến được cấm;
- Chỉ hỗ trợ một kết nối RDP đồng thời. Khi bạn cố gắng mở phiên RDP thứ hai, người dùng được nhắc đóng kết nối đang hoạt động;
- Nếu có người dùng làm việc trên console của máy tính (cục bộ), thì khi bạn cố gắng tạo kết nối RDP từ xa mới, phiên console sẽ bị ngắt kết nối. Phiên RDP từ xa cũng sẽ bị ngắt kết nối buộc nếu người dùng cố gắng đăng nhập cục bộ.

Thực tế, số lượng kết nối RDP đồng thời trên Windows bị giới hạn bởi giấy phép (chứ không phải khía cạnh kỹ thuật). Do đó, hạn chế này không cho phép tạo máy chủ terminal RDP dựa trên workstation có thể được nhiều người dùng sử dụng. Logic của Microsoft đơn giản: nếu bạn cần máy chủ terminal – hãy mua giấy phép Windows Server, RDS CALs, cài đặt và cấu hình vai trò Remote Desktop Session Host (RDSH).
Về mặt kỹ thuật, bất kỳ phiên bản Windows nào với lượng RAM đủ lớn có thể hỗ trợ hoạt động đồng thời của vài chục người dùng từ xa. Trung bình, 150-200 MB RAM cần cho một phiên người dùng (không kể ứng dụng đang chạy). Vậy, số lượng tối đa phiên RDP đồng thời về mặt lý thuyết chỉ bị giới hạn bởi tài nguyên máy tính.
Hãy xem xét hai cách để cho phép kết nối RDP đồng thời trên Windows 10 và 11: sử dụng công cụ RDP Wrapper hoặc vá file hệ thống termsrv.dll.
Lưu ý. Các sửa đổi hệ thống được mô tả trong bài viết được coi là vi phạm Thỏa Thuận Giấy Phép Microsoft và bạn thực hiện chúng trên eigene rủi ro.
RDP Wrapper: Kích Hoạt Nhiều Phiên RDP Trên Windows
Dự án OpenSource RDP Wrapper Library cho phép bạn kích hoạt nhiều phiên RDP trên Windows 10 mà không cần thay thế file termsrv.dll. Công cụ này hoạt động như một lớp giữa SCM (Service Control Manager) và Dịch vụ Remote Desktop. RDPWrap cho phép bạn không chỉ bật hỗ trợ nhiều kết nối RDP đồng thời mà còn xây dựng máy chủ RDP trên phiên bản Windows Home. RDP Wrapper không làm bất kỳ thay đổi nào cho file termsrv.dll, nó chỉ tải thư viện termsrv với các tham số đã thay đổi.
Vì vậy, RDPWrap sẽ hoạt động ngay cả khi file termsrv.dll được cập nhật. Nó cho phép bạn không lo lắng về các bản cập nhật Windows.
Quan trọng. Trước khi cài đặt RDP Wrapper, quan trọng là đảm bảo bạn đang sử dụng phiên bản gốc (chưa vá) của file termsrv.dll. Nếu không, RDP Wrapper có thể trở nên không ổn định hoặc không khởi động được.Bạn có thể tải RDP Wrapper từ kho GitHub https://github.com/binarymaster/rdpwrap/releases (phiên bản mới nhất của RDP Wrapper Library là v1.6.2). Dự án chưa được cập nhật kể từ 2017, nhưng nó có thể dùng cho tất cả các bản build mới của Windows 10 thậm chí Windows 11.
Kho lưu trữ RDPWrap-v1.6.2.zip chứa một số tệp:
- RDPWinst.exe — chương trình cài đặt/gỡ cài đặt RDP Wrapper Library;
- RDPConf.exe — công cụ cấu hình RDP Wrapper;
- RDPCheck.exe — tiện ích kiểm tra RDP (Local RDP Checker);
- install.bat, uninstall.bat, update.bat — tệp batch để cài đặt, gỡ cài đặt, và cập nhật RDP Wrapper.

Để cài đặt RDPWrap, chạy tệp install.bat với quyền quản trị viên. Chương trình sẽ được cài đặt vào thư mục C:\Program Files\RDP Wrapper.

Sau khi cài đặt xong, chạy RDPConfig.exe. Có khả năng ngay sau cài đặt, công cụ sẽ hiển thị RDP wrapper đang chạy (Installed, Running, Listening), nhưng không hoạt động. Chú ý cảnh báo đỏ [not supported]. Nó báo cáo rằng phiên bản Windows 10 này (ver. 10.0.19041.1320) không được hỗ trợ bởi RDPWrapper.

Thực tế là đối với mỗi phiên bản Windows 10 phải có mô tả trong tệp cấu hình rdpwrap.ini. Tệp config của bạn đơn giản không có cài đặt cho bản build Windows 10 của bạn.
Phiên bản hiện tại của tệp rdpwrap.ini có thể tải xuống tại đây https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini
Sao chép thủ công nội dung trang này vào tệp “C:\Program Files\RDP Wrapper\rdpwrap.ini”. Hoặc tải tệp xuống bằng cmdlet PowerShell Invoke-WebRequest (bạn phải dừng dịch vụ Remote Desktop trước):
Stop-Service termservice -Force
Invoke-WebRequest https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini -outfile "C:\Program Files\RDP Wrapper\rdpwrap.ini"

Khởi động lại máy tính, chạy công cụ RDPConfig.exe. Kiểm tra xem tất cả các mục đều có màu xanh trong phần Diagnostics và chú thích [Fully supported] xuất hiện. Ảnh chụp màn hình dưới đây cho thấy RDP Wrapper với config mới này hoạt động tốt trên Windows 11 cũng.

Thử thiết lập một vài phiên RDP đến máy tính của bạn (dùng bất kỳ RDP client nào: mstsc.exe, rdcman, v.v.). Nó hoạt động tốt (thậm chí bạn có thể dùng thông tin đăng nhập RDP đã lưu)! Bây giờ Windows 10 của bạn cho phép hai (và nhiều hơn) người dùng từ xa sử dụng các phiên RDP khác nhau đồng thời.

Công cụ RDPWrap được hỗ trợ trong tất cả các phiên bản Windows, vì vậy bạn có thể xây dựng máy chủ terminal (RDS) của riêng bạn trên bất kỳ thiết bị Windows nào.
Cũng, RDP Wrapper cho phép:
- Bật Remote Desktop;
- Tùy chọn Hide users on logon screen cho phép ẩn danh sách người dùng khỏi Màn hình Đăng Nhập Windows;
- Nếu bạn tắt tùy chọn Single session per user, nhiều phiên RDP đồng thời sẽ được phép dưới cùng một tài khoản người dùng (tham số đăng ký fSingleSessionPerUser = 0 được đặt dưới khóa đăng ký
HKLM\SYSTEM\ CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser); - RDP Port — bạn có thể thay đổi số cổng Remote Desktop từ TCP 3389 sang bất kỳ cổng nào khác;
- Trong phần Session Shadowing Mode, bạn có thể cấu hình chế độ kết nối điều khiển từ xa (shadow) đến các phiên RDP.
Bạn có thể đặt giới hạn thời lượng phiên RDP bằng GPO.
RDP Wrapper Không Hoạt Động Trên Windows 10
Trong một số trường hợp, công cụ RDP Wrapper không hoạt động như mong đợi và bạn không thể kết nối đến máy chủ Windows của mình bằng nhiều phiên RDP.
Nếu tiện ích hiển thị [not supported] trong phần trạng thái, thì tệp rdpwrap.ini không chứa cấu hình cho bản build Windows của bạn. Cập nhật tệp rdpwrap.ini như đã mô tả ở trên.
Nếu RDP Wrapper không hoạt động sau khi cập nhật tệp rdpwrap.ini, hãy thử mở tệp rdpwrap.ini và tìm phần mô tả cho phiên bản Windows của bạn. Làm thế nào để biết có hỗ trợ cho phiên bản Windows của bạn trong tệp config rdpwrapper không?
Ảnh chụp màn hình dưới đây cho thấy rằng cho phiên bản Windows 10 của tôi (10.0.19041.1320) có hai phần mô tả:
[10.0.19041.1320] ….. [10.0.19041.1320-SLInit] …..

Nếu không có phần nào trong tệp config cho phiên bản Windows của bạn, hãy thử dùng Google tìm chuỗi rdpwrap.ini cho bản build Windows của bạn. Thêm các dòng bạn tìm được vào cuối tệp.
Cũng, nếu bạn gặp vấn đề với RDPWrapper, bạn có thể mở issue tại https://github.com/stascorp/rdpwrap/issues. Ở đây bạn cũng có thể tìm thấy tệp rdpwrap.ini thực tế.
Nếu sau khi cài đặt bản cập nhật bảo mật hoặc nâng cấp bản build Windows 10, RDP Wrapper không hoạt động đúng, hãy kiểm tra xem "Listener state: Not listening" có hiển thị trong phần Diagnostics không.

Thử cập nhật tệp rdpwrap.ini, sau đó cài đặt lại dịch vụ:
rdpwinst.exe -u
rdpwinst.exe -i
Có trường hợp khi bạn cố gắng thiết lập kết nối RDP thứ hai dưới tài khoản người dùng khác, bạn thấy cảnh báo:
The number of connections to this computer is limited and all connections are in use right now. Try connecting later or contact your system administrator.

Trong trường hợp này, bạn có thể dùng Local Group Policy Editor (gpedit.msc) để bật chính sách "Limit number of connections" dưới Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections. Thay đổi giá trị của nó thành 999999.

Khởi động lại máy tính để cập nhật GPO và áp dụng cài đặt.
Sửa Đổi Termsrv.dll Để Kích Hoạt Nhiều Phiên RDP
Để bỏ giới hạn số lượng kết nối người dùng RDP đồng thời trong Windows 10 mà không dùng rdpwrapper, bạn có thể thay thế file termsrv.dll gốc. Đây là file thư viện chính được dùng bởi Dịch vụ Remote Desktop. File nằm trong thư mục C:\Windows\System32.
Trước khi chỉnh sửa hoặc thay thế file termsrv.dll, khuyến khích tạo bản sao lưu của nó. Điều này giúp bạn quay lại phiên bản gốc nếu cần. Mở dấu nhắc lệnh với quyền cao và chạy lệnh:
copy c:\Windows\System32\termsrv.dll termsrv.dll_backup
Sau đó bạn cần lấy quyền sở hữu file. Để đổi chủ sở hữu file từ TrustedInstaller sang nhóm Administrators cục bộ bằng lệnh:
takeown /F c:\Windows\System32\termsrv.dll /A
SUCCESS: The file (or folder): c:\Windows\System32\termsrv.dll now owned by the administrators group
Bây giờ cấp quyền Full Control cho nhóm administrators cục bộ trên file termsrv.dll dùng icacls.exe:
icacls c:\Windows\System32\termsrv.dll /grant Administrators:F
processed file: c:\Windows\System32\termsrv.dll Successfully processed 1 files; Failed processing 0 files.

Sau đó, dừng dịch vụ Remote Desktop (TermService) dùng bảng điều khiển services.msc hoặc từ dấu nhắc lệnh:
Net stop TermService
Dịch vụ Remote Desktop Services UserMode Port Redirector dừng cùng với nó.

Trước khi tiến xa hơn, bạn cần tìm phiên bản (số build) Windows 10 của bạn. Mở bảng điều khiển PowerShell và chạy lệnh:
Get-ComputerInfo | select WindowsProductName, WindowsVersion
Trong trường hợp của tôi, Windows 10 build 21H1 được cài đặt.
Sau đó mở file termsrv.dll bằng bất kỳ trình soạn thảo HEX nào (ví dụ: Tiny Hexer). Tùy thuộc vào bản build Windows của bạn, bạn cần tìm và thay thế chuỗi theo bảng dưới đây:
| Windows build | Tìm chuỗi | Thay thế bằng |
| Windows 11 RTM ( 21H2 – 22000.258) | 39 81 3C 06 00 00 0F 84 4F 68 01 00 |
B8 00 01 00 00 89 81 38 06 00 00 90
|
| Windows 10 x64 21H2 | 39 81 3C 06 00 00 0F 84 DB 61 01 00 | |
| Windows 10 x64 21H1 | 39 81 3C 06 00 00 0F 84 2B 5F 01 00 | |
| Windows 10 x64 20H2 | 39 81 3C 06 00 00 0F 84 21 68 01 00 | |
| Windows 10 x64 2004 | 39 81 3C 06 00 00 0F 84 D9 51 01 00 | |
| Windows 10 x64 1909 | 39 81 3C 06 00 00 0F 84 5D 61 01 00 | |
| Windows 10 x64 1903 | 39 81 3C 06 00 00 0F 84 5D 61 01 00 | |
| Windows 10 x64 1809 | 39 81 3C 06 00 00 0F 84 3B 2B 01 00
| |
| Windows 10 x64 1803 | 8B 99 3C 06 00 00 8B B9 38 06 00 00
| |
| Windows 10 x64 1709 | 39 81 3C 06 00 00 0F 84 B1 7D 02 00
|
Trình soạn thảo Tiny Hexer không thể chỉnh sửa file termsvr.dll trực tiếp từ thư mục system32. Sao chép nó ra màn hình nền, sau khi sửa đổi thay thế file gốc.
Ví dụ, bản build Windows 10 x64 của tôi là 21H1 (19043.1320) với phiên bản file termsrv.dll 10.0.19041.1320. Mở file termsrv.dll trong Tiny Hexer, sau đó tìm văn bản:
39 81 3C 06 00 00 0F 84 2B 5F 01 00
và thay thế bằng:
B8 00 01 00 00 89 81 38 06 00 00 90

Lưu file và chạy TermService.
Nếu có sự cố và bạn gặp vấn đề với dịch vụ Remote Desktop, dừng dịch vụ và thay thế file termsrv.dll đã sửa bằng phiên bản gốc:
copy termsrv.dll_backup c:\Windows\System32\termsrv.dll
Vá Termsrv.dll Trên Windows Sử Dụng PowerShell
Để không phải sửa file termsrv.dll thủ công bằng trình soạn thảo HEX, bạn có thể dùng script PowerShell sau để áp dụng vá tự động. Script này dựa trên phiên bản Windows PowerShell và không hoạt động trên PowerShell Core hiện đại. Script này đa năng và có thể dùng để vá file termsrv.dll trên tất cả các phiên bản Windows 10 (1809+) và Windows 11.
# Stop RDP service, make a backup of the termsrv.dllfile and change the permissions
Stop-Service UmRdpService -Force
Stop-Service TermService -Force
$termsrv_dll_acl = Get-Acl c:\windows\system32\termsrv.dll
Copy-Item c:\windows\system32\termsrv.dll c:\windows\system32\termsrv.dll.copy
takeown /f c:\windows\system32\termsrv.dll
$new_termsrv_dll_owner = (Get-Acl c:\windows\system32\termsrv.dll).owner
cmd /c "icacls c:\windows\system32\termsrv.dll /Grant $($new_termsrv_dll_owner):F /C"
# search for a pattern in termsrv.dll file
$dll_as_bytes = Get-Content c:\windows\system32\termsrv.dll -Raw -Encoding byte
$dll_as_text = $dll_as_bytes.forEach('ToString', 'X2') -join ' '
$patternregex = ([regex]'39 81 3C 06 00 00(\s\S\S){6}')
$patch = 'B8 00 01 00 00 89 81 38 06 00 00 90'
$checkPattern=Select-String -Pattern $patternregex -InputObject $dll_as_text
If ($checkPattern -ne $null) {
$dll_as_text_replaced = $dll_as_text -replace $patternregex, $patch
}
Elseif (Select-String -Pattern $patch -InputObject $dll_as_text) {
Write-Output 'The termsrv.dll file is already patch, exitting'
Exit
}
else {
Write-Output "Pattern not found "
}
# patching termsrv.dll
[byte[]] $dll_as_bytes_replaced = -split $dll_as_text_replaced -replace '^', '0x'
Set-Content c:\windows\system32\termsrv.dll.patched -Encoding Byte -Value $dll_as_bytes_replaced
# comparing two files
fc.exe /b c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll
# replacing the original termsrv.dll file
Copy-Item c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll -Force
Set-Acl c:\windows\system32\termsrv.dll $termsrv_dll_acl
Start-Service UmRdpService
Start-Service TermService
Mã script hoàn chỉnh có sẵn trong kho GitHub của tôi tại https://github.com/maxbakhub/winposh/blob/main/termsrv_rdp_patch.ps1
Để thực thi script, tải nó về máy tính. Thay đổi cài đặt chính sách thực thi PowerShell cho phiên hiện tại:
Set-ExecutionPolicy Bypass -Scope Process -Force
Và chạy script:
C:\users\root\desktop\termsrv_rdp_patch.ps1

Script có thể chạy sau khi cài đặt bản cập nhật Windows để ngay lập tức thực hiện thay đổi cho file termsrv.dll (bạn không phải sửa file termsrv.dll trong trình soạn thảo HEX sau mỗi lần cài đặt cập nhật).
Ưu điểm của phương pháp cho phép nhiều phiên RDP trong Windows 10 hoặc 11 bằng cách thay thế file termsrv.dll là phần mềm diệt virus không phản ứng với nó (khác với RDPWrap, bị nhiều antivirus phát hiện là Malware/HackTool/Trojan).
Nhược điểm chính là bạn sẽ phải thủ công chỉnh sửa file termsrv.dll mỗi khi nâng cấp bản build Windows 10 (hoặc khi cập nhật phiên bản file termsrv.dll trong quá trình cài đặt bản cập nhật tích lũy hàng tháng). Và nếu bạn dùng RDPWrapper, bạn cũng sẽ cần cập nhật tệp rdpwrap.ini sau khi cài đặt bản cập nhật Windows.
Trong bài viết này, chúng ta đã xem cách bỏ giới hạn số lượng kết nối người dùng RDP đồng thời và chạy máy chủ terminal miễn phí trên các phiên bản desktop của Windows.