Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法
リモートユーザーはリモートデスクトップサービス(RDP)を利用して、Windows 10や11のコンピューターに接続できます。デバイス設定でRDPを有効にし、任意のリモートデスクトップクライアントから接続するだけで利用可能です。しかし、同時に確立できるRDPセッションの数には制限があり、同時に作業できるリモートユーザーは1人だけです。2つ目のRDPセッションを開こうとすると、最初のユーザーのセッションを切断するよう求める警告が表示されます。
別のユーザーがサインインしています。続行すると、そのユーザーは切断されます。それでもサインインしますか?
すべてのWindowsデスクトップ版(Windows 10および11を含む)には、リモートデスクトップサービスの利用に関して以下の制限があります。
- RDPでリモート接続できるのは、上位エディション(ProfessionalおよびEnterprise)のみです。Windows HomeおよびSingle Languageエディションでは、着信リモートデスクトップ接続が禁止されています。
- 同時に確立できるRDP接続は1つだけです。2つ目のRDPセッションを開こうとすると、アクティブな接続を閉じるよう求められます。
- コンピューターのコンソール(ローカル)でユーザーが作業している場合、新しいRDP接続を作成しようとすると、コンソールセッションが切断されます。逆に、リモートRDPセッションが確立されている状態でユーザーがローカルログインを試みると、リモートセッションが強制的に切断されます。

実は、Windowsにおける同時RDP接続数の制限は技術的な要因ではなく、ライセンスによるものです。この制限により、複数ユーザーが利用できるターミナルRDPサーバーをワークステーション上に構築することは許されていません。Microsoftの論理はシンプルで、ターミナルサーバーが必要ならWindows ServerのライセンスとRDS CALを購入し、リモートデスクトップセッションホスト(RDSH)ロールをインストール・構成してください、というものです。
技術的には、十分なRAMを搭載した任意のWindowsで、数十人のリモートユーザーの同時作業をサポートできます。1ユーザーセッションあたり平均150〜200MBのRAMが必要です(実行中のアプリは除く)。つまり、同時RDPセッション数の上限は理論上、コンピューターのリソースによってのみ制限されるのです。
ここでは、Windows 10および11で同時RDP接続を可能にする2つの方法を紹介します。RDP Wrapperツールを使用する方法と、termsrv.dllシステムファイルにパッチを適用する方法です。
注意: 本記事で説明するシステムの改変は、Microsoftライセンス契約違反とみなされる可能性があります。実行する場合は自己責任で行ってください。
RDP WrapperでWindowsの複数RDPセッションを有効にする
オープンソースプロジェクトのRDP Wrapper Libraryを使用すると、termsrv.dllファイルを置き換えることなく、Windows 10で複数のRDPセッションを有効化できます。このツールは、SCM(サービスコントロールマネージャー)とリモートデスクトップサービスの間でレイヤーとして機能します。RDPWrapにより、複数の同時RDP接続のサポートだけでなく、Windows Homeエディション上にRDPサーバーを構築することも可能です。RDP Wrapperはtermsrv.dllファイル自体を変更せず、変更されたパラメーターでtermsrvライブラリを読み込むだけです。
そのため、termsrv.dllファイルが更新された場合でもRDPWrapは動作し続けます。Windowsアップデートを恐れる必要はありません。
重要: RDP Wrapperをインストールする前に、使用しているtermsrv.dllファイルがオリジナル(未パッチ)のバージョンであることを確認してください。そうでない場合、RDP Wrapperが不安定になったり、起動しなかったりする可能性があります。
RDP WrapperはGitHubリポジトリ(https://github.com/binarymaster/rdpwrap/releases)からダウンロードできます(最新バージョンはv1.6.2)。プロジェクト自体は2017年以降更新されていませんが、Windows 10の最新ビルドやWindows 11でも利用できます。
RDPWrap-v1.6.2.zipアーカイブには以下のファイルが含まれています。
- RDPWinst.exe — RDP Wrapper Libraryのインストール/アンインストールプログラム
- RDPConf.exe — RDP Wrapperの設定ツール
- RDPCheck.exe — RDPチェックユーティリティ(ローカルRDPチェッカー)
- install.bat、uninstall.bat、update.bat — RDP Wrapperのインストール、アンインストール、更新用バッチファイル

RDPWrapをインストールするには、install.batを管理者として実行します。プログラムはC:\Program Files\RDP Wrapperディレクトリにインストールされます。

インストール完了後、RDPConf.exeを実行します。おそらくインストール直後は、ツールがRDP wrapperの状態を「Installed(インストール済み)、Running(実行中)、Listening(リッスン中)」と表示するものの、動作していないことがわかります。赤い警告「[not supported]」に注目してください。これは、お使いのWindows 10のバージョン(例:10.0.19041.1320)がRDPWrapperでサポートされていないことを示しています。

これは、Windows 10の各バージョンについてrdpwrap.ini設定ファイルに記述が必要だからです。お使いの設定ファイルには、お使いのWindows 10ビルド向けの設定が存在しないのです。
最新のrdpwrap.iniファイルはこちらからダウンロードできます:https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini
このページの内容を手動で「C:\Program Files\RDP Wrapper\rdpwrap.ini」ファイルにコピーするか、PowerShellコマンドレットInvoke-WebRequestを使ってダウンロードします(事前にリモートデスクトップサービスを停止する必要があります)。
Stop-Service termservice -Force
Invoke-WebRequest https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini -outfile "C:\Program Files\RDP Wrapper\rdpwrap.ini"

コンピューターを再起動し、RDPConfig.exeを実行します。Diagnosticsセクションのすべての項目が緑色になり、「[Fully supported]」と表示されていることを確認してください。以下のスクリーンショットでは、新しい設定を適用したRDP WrapperがWindows 11でも正常に動作していることがわかります。

コンピューターへの複数のRDPセッション確立を試してみてください(mstsc.exeやrdcmanなど、任意のRDPクライアントを使用できます)。問題なく動作するはずです(保存済みのRDP資格情報も使用できます)。これで、Windows 10で2人以上のリモートユーザーが異なるRDPセッションを同時に利用できるようになりました。

RDPWrapツールはすべてのWindowsエディションでサポートされているため、任意のWindowsデバイス上に独自のターミナル(RDS)サーバーを構築できます。
また、RDP Wrapperでは以下の設定も可能です。
- リモートデスクトップの有効化
- Hide users on logon screenオプションで、Windowsログオン画面からユーザーリストを非表示にできます。
- Single session per userオプションを無効にすると、同じユーザーアカウントで複数の同時RDPセッションが許可されます(レジストリキー
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fSingleSessionPerUserの値fSingleSessionPerUser = 0が設定されます)。 - RDP Port — リモートデスクトップのポート番号をTCP 3389から任意の番号に変更できます。
- Session Shadowing Modeセクションで、RDPセッションへのリモートコントロール(シャドウ)接続モードを構成できます。
なお、GPOを使用してRDPセッションの時間制限を設定することもできます。
Windows 10でRDP Wrapperが動作しない場合の対処法
場合によっては、RDP Wrapperツールが期待どおりに動作せず、複数のRDPセッションでWindowsホストに接続できないことがあります。
ユーティリティのステータスセクションに「[not supported]」と表示された場合、rdpwrap.iniファイルにお使いのWindowsビルドの設定が含まれていません。前述の方法でrdpwrap.iniファイルを更新してください。
rdpwrap.iniファイルを更新してもRDP Wrapperが動作しない場合は、rdpwrap.iniファイルを開いて、お使いのWindowsバージョンの記述セクションを探してください。rdpwrapper設定ファイルにお使いのWindowsバージョンのサポートがあるかどうかは、どうやって確認すればよいのでしょうか?
以下のスクリーンショットでは、私のWindows 10バージョン(10.0.19041.1320)に対して2つの記述セクションが存在することがわかります。
[10.0.19041.1320] ….. [10.0.19041.1320-SLInit] …..

設定ファイルにお使いのWindowsバージョンのセクションが存在しない場合は、Googleでお使いのWindowsビルド向けのrdpwrap.iniの記述を検索し、見つけた行をファイルの末尾に追加してください。
また、RDPWrapperに問題がある場合は、https://github.com/stascorp/rdpwrap/issues でissueを開くことができます。ここで最新のrdpwrap.iniファイルも見つかります。
セキュリティ更新プログラムのインストール後やWindows 10ビルドのアップグレード後にRDP Wrapperが正しく動作しない場合は、Diagnosticsセクションに「Listener state: Not listening」と表示されていないか確認してください。

rdpwrap.iniファイルを更新し、その後サービスを再インストールしてみてください。
rdpwinst.exe -u
rdpwinst.exe -i
別のユーザーアカウントで2つ目のRDP接続を確立しようとすると、次の警告が表示されることがあります。
このコンピューターへの接続数は制限されており、現在すべての接続が使用中です。後でもう一度接続するか、システム管理者に問い合わせてください。

この場合は、ローカルグループポリシーエディター(gpedit.msc)を使用して、「コンピューターの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「リモートデスクトップサービス」→「リモートデスクトップセッションホスト」→「接続」セクションにある「接続数を制限する」ポリシーを有効にします。その値を999999に変更してください。

GPOを更新して設定を適用するため、コンピューターを再起動します。
termsrv.dllを書き換えて複数RDPセッションを有効にする
rdpwrapperを使用せずにWindows 10の同時RDPユーザー接続数の制限を解除するには、オリジナルのtermsrv.dllファイルを置き換える方法があります。これはリモートデスクトップサービスが使用する主要なライブラリファイルで、C:\Windows\System32ディレクトリに格納されています。
termsrv.dllファイルを編集または置き換える前に、バックアップコピーを作成しておくことをお勧めします。必要に応じてオリジナルのバージョンに戻せるようになります。昇格されたコマンドプロンプトを開き、次のコマンドを実行します。
copy c:\Windows\System32\termsrv.dll termsrv.dll_backup
次に、ファイルの所有権を取得する必要があります。以下のコマンドで、ファイルの所有者をTrustedInstallerからローカルのAdministratorsグループに変更します。
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ファイルに対するローカルAdministratorsグループのフルコントロール権限を付与します。
icacls c:\Windows\System32\termsrv.dll /grant Administrators:F
processed file: c:\Windows\System32\termsrv.dll Successfully processed 1 files; Failed processing 0 files.

その後、services.mscコンソールまたはコマンドプロンプトから、リモートデスクトップサービス(TermService)を停止します。
Net stop TermService
リモートデスクトップサービスのユーザーモードポートリダイレクターサービスも一緒に停止します。

先に進む前に、お使いのWindows 10のバージョン(ビルド番号)を確認する必要があります。PowerShellコンソールを開き、次のコマンドを実行します。
Get-ComputerInfo | select WindowsProductName, WindowsVersion
この例では、Windows 10ビルド21H1がインストールされています。
次に、任意のHEXエディター(例:Tiny Hexer)でtermsrv.dllファイルを開きます。お使いのWindowsビルドに応じて、以下の表に従って文字列を検索して置き換えます。
| Windowsビルド | 検索する文字列 | 置き換える文字列 |
| 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 |
なお、Tiny Hexerエディターはsystem32フォルダーから直接termsrv.dllファイルを編集できません。デスクトップにコピーして編集した後、オリジナルのファイルを置き換えてください。
例として、私のWindows 10 x64ビルドは21H1(19043.1320)で、termsrv.dllファイルのバージョンは10.0.19041.1320です。Tiny Hexerでtermsrv.dllファイルを開き、次の文字列を検索します。
39 81 3C 06 00 00 0F 84 2B 5F 01 00
これを次の文字列に置き換えます。
B8 00 01 00 00 89 81 38 06 00 00 90

ファイルを保存し、TermServiceを起動します。
何かがうまくいかず、リモートデスクトップサービスに問題が発生した場合は、サービスを停止し、変更したtermsrv.dllファイルをオリジナルのバージョンに戻してください。
copy termsrv.dll_backup c:\Windows\System32\termsrv.dll
PowerShellを使ってtermsrv.dllにパッチを適用する
HEXエディターでtermsrv.dllファイルを手動で編集する代わりに、次のPowerShellスクリプトを使用してパッチを自動的に適用できます。このスクリプトはWindows PowerShell向けに作成されており、最新のPowerShell Coreでは動作しません。スクリプトは汎用的で、Windows 10(1809以降)およびWindows 11のすべてのエディションのtermsrv.dllファイルにパッチを適用できます。
# RDPサービスを停止し、termsrv.dllのバックアップを作成して権限を変更
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"
# termsrv.dllファイル内のパターンを検索
$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 "
}
# 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
# 2つのファイルを比較
fc.exe /b c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll
# オリジナルのtermsrv.dllファイルを置き換え
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
完全なスクリプトコードはGitHubリポジトリ(https://github.com/maxbakhub/winposh/blob/main/termsrv_rdp_patch.ps1)で公開されています。
スクリプトを実行するには、ダウンロードしてコンピューターに保存します。現在のセッションのPowerShell実行ポリシー設定を変更します。
Set-ExecutionPolicy Bypass -Scope Process -Force
そしてスクリプトを実行します。
C:\users\root\desktop\termsrv_rdp_patch.ps1

このスクリプトは、Windowsアップデートのインストール後に実行することで、termsrv.dllファイルに即座に変更を加えられます(アップデートのたびにHEXエディターでtermsrv.dllファイルを編集する必要はありません)。
termsrv.dllファイルを置き換えてWindows 10や11で複数RDPセッションを有効にする方法の利点は、アンチウイルスが反応しないことです(RDPWrapは多くのアンチウイルスによってMalware/HackTool/Trojanとして検出されます)。
主な欠点は、Windows 10ビルドをアップグレードするたび(または毎月の累積更新プログラムのインストールでtermsrv.dllファイルのバージョンが更新されるたび)に、termsrv.dllファイルを手動で編集し直す必要があることです。RDPWrapperを使用している場合も、Windowsアップデートのインストール後にrdpwrap.iniファイルを更新する必要があります。
本記事では、同時RDPユーザー接続数の制限を解除し、Windowsデスクトップ版で無料のターミナルサーバーを実行する方法を紹介しました。
-
Windows 10で複数のユーザーアカウントを追加・削除する方法【家族アカウントとその他のユーザー】
Windows 10では、1台のPCに複数のユーザーアカウントを作成し、それぞれのユーザーが個別にログインできる機能が備わっています。追加できるアカウントは大きく分けて以下の2種類です。 (1) 家族向けのアカウント(2) 家族以外のメンバー向けのローカルアカウント それぞれのアカウントには異なる役割や特徴があり、用途に応じて使い分けることが重要です。本記事では、各アカウントの違いや追加手順を詳しく解説するとともに、不要になったユーザーアカウントの削除方法についてもご紹介します。 Windows 10に複数のユーザーアカウントを追加する方法 1. ファミリー(家族)アカウントの追加 子ども用ア
-
Windows 10でマルチディスプレイを設定する方法|接続・表示設定・カスタマイズまで徹底解説
1台のモニターだけでは作業しづらいと感じたら、追加のディスプレイを導入することで生産性を高め、時間を大幅に節約できます。 プログラマー、グラフィックデザイナー、データアナリスト、あるいはデスクトップPCを日常的に使う方にとって、2画面は1画面よりも圧倒的に快適です。マルチモニター環境はマルチタスクを格段にしやすくするため、実用性の高さが大きな魅力となっています。 複数のタブを行き来したり、ウィンドウを最小化しては開いたりする作業は、切り替えに時間がかかり非効率になりがちです。しかし、複数の画面があればこうした問題は簡単に解消できます。これは生産性向上への確実な近道であり、さらに専用ツールを使え