Windows 11
 Computer >> コンピューター >  >> システム >> Windows 11

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

リモートユーザーはリモートデスクトップサービス(RDP)を利用して、Windows 10や11のコンピューターに接続できます。デバイス設定でRDPを有効にし、任意のリモートデスクトップクライアントから接続するだけで利用可能です。しかし、同時に確立できるRDPセッションの数には制限があり、同時に作業できるリモートユーザーは1人だけです。2つ目のRDPセッションを開こうとすると、最初のユーザーのセッションを切断するよう求める警告が表示されます。

別のユーザーがサインインしています。続行すると、そのユーザーは切断されます。それでもサインインしますか?

すべてのWindowsデスクトップ版(Windows 10および11を含む)には、リモートデスクトップサービスの利用に関して以下の制限があります。

  1. RDPでリモート接続できるのは、上位エディション(ProfessionalおよびEnterprise)のみです。Windows HomeおよびSingle Languageエディションでは、着信リモートデスクトップ接続が禁止されています。
  2. 同時に確立できるRDP接続は1つだけです。2つ目のRDPセッションを開こうとすると、アクティブな接続を閉じるよう求められます。
  3. コンピューターのコンソール(ローカル)でユーザーが作業している場合、新しいRDP接続を作成しようとすると、コンソールセッションが切断されます。逆に、リモートRDPセッションが確立されている状態でユーザーがローカルログインを試みると、リモートセッションが強制的に切断されます。

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

実は、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のインストール、アンインストール、更新用バッチファイル

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

これは、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"

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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 10/11で複数のRDPセッションを同時に有効化する2つの方法

設定ファイルにお使いのWindowsバージョンのセクションが存在しない場合は、Googleでお使いのWindowsビルド向けのrdpwrap.iniの記述を検索し、見つけた行をファイルの末尾に追加してください。

また、RDPWrapperに問題がある場合は、https://github.com/stascorp/rdpwrap/issues でissueを開くことができます。ここで最新のrdpwrap.iniファイルも見つかります。

セキュリティ更新プログラムのインストール後やWindows 10ビルドのアップグレード後にRDP Wrapperが正しく動作しない場合は、Diagnosticsセクションに「Listener state: Not listening」と表示されていないか確認してください。

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

rdpwrap.iniファイルを更新し、その後サービスを再インストールしてみてください。

rdpwinst.exe -u
rdpwinst.exe -i

別のユーザーアカウントで2つ目のRDP接続を確立しようとすると、次の警告が表示されることがあります。

このコンピューターへの接続数は制限されており、現在すべての接続が使用中です。後でもう一度接続するか、システム管理者に問い合わせてください。

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

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.

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

その後、services.mscコンソールまたはコマンドプロンプトから、リモートデスクトップサービス(TermService)を停止します。

Net stop TermService

リモートデスクトップサービスのユーザーモードポートリダイレクターサービスも一緒に停止します。

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

先に進む前に、お使いの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

Windows 10/11で複数のRDPセッションを同時に有効化する2つの方法

ファイルを保存し、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 10/11で複数のRDPセッションを同時に有効化する2つの方法

このスクリプトは、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デスクトップ版で無料のターミナルサーバーを実行する方法を紹介しました。


  1. Windows 10で複数のユーザーアカウントを追加・削除する方法【家族アカウントとその他のユーザー】

    Windows 10では、1台のPCに複数のユーザーアカウントを作成し、それぞれのユーザーが個別にログインできる機能が備わっています。追加できるアカウントは大きく分けて以下の2種類です。 (1) 家族向けのアカウント(2) 家族以外のメンバー向けのローカルアカウント それぞれのアカウントには異なる役割や特徴があり、用途に応じて使い分けることが重要です。本記事では、各アカウントの違いや追加手順を詳しく解説するとともに、不要になったユーザーアカウントの削除方法についてもご紹介します。 Windows 10に複数のユーザーアカウントを追加する方法 1. ファミリー(家族)アカウントの追加 子ども用ア

  2. Windows 10でマルチディスプレイを設定する方法|接続・表示設定・カスタマイズまで徹底解説

    1台のモニターだけでは作業しづらいと感じたら、追加のディスプレイを導入することで生産性を高め、時間を大幅に節約できます。 プログラマー、グラフィックデザイナー、データアナリスト、あるいはデスクトップPCを日常的に使う方にとって、2画面は1画面よりも圧倒的に快適です。マルチモニター環境はマルチタスクを格段にしやすくするため、実用性の高さが大きな魅力となっています。 複数のタブを行き来したり、ウィンドウを最小化しては開いたりする作業は、切り替えに時間がかかり非効率になりがちです。しかし、複数の画面があればこうした問題は簡単に解消できます。これは生産性向上への確実な近道であり、さらに専用ツールを使え