Windows XP Professionalをマルチユーザー仕様に改造する
ここで紹介するハックはマイクロソフトのEULAに抵触する可能性が高いため、あくまで海外サイトから得た情報を参考までに紹介するに止めるうえ、上級者向けに必要最低限の内容のみ掲載する。情報を利用した結果ついて当方では一切の責任を負うことができないので、各自自己責任のもとで行って頂きたい。
(なおこのネタ自体は 2006年頃から存在するようだが、要点だけまとめた日本語の情報が他に見あたらなかった)
Windows XP Professionalはリモートデスクトップクライアントを用いることで離れた端末からネットワークを通じてログインし、利用できる。しかしながら、同時に利用することが可能なセッションはローカル・リモート合わせてひとつだけである。つまり、誰かがリモートからログインしようとするとその WinXP Proマシンを操作中のユーザはログアウトを迫られる。
複数のユーザが同時にログインしてオペレーティングシステムの機能を利用することは、UNIXやその派生OSでは当たり前に出来ることであるが、Windows(サーバ向け除く)はそのマーケティングにおける性質上、「技術的には出来るけど、出来ないようにしてある」といったところだと思われる。実は以前 Windows XP SP2でこの制限が緩和され同時に2セッションまで利用出来るようになるという噂が流れたのだが、これはガセネタだったようだ。
ここからが本題である。この制限は、termsrv.dll という DLLを3バイト書き換え、いくつかのレジストリ項目を登録し、グループポリシーを修正することで外すことが出来る。
termsrv.dllは Windowsフォルダ以下の system32, ServicePackFiles/i386, system32/dllcache にそれぞれ存在している可能性がある(環境によってそれぞれ存在してしていたりしなかったりするようだ)。そこにある全ての termsrv.dllに対し、下記のような書き換えを行う(全て同じ内容のはずなので、1個書き換えてコピーすれば良い)。
0x00022A17
0x74を、0x75に変更
0x00022A69-0x00022A6A
0x7F 0x16を、0x90 0x90に変更
もちろん Windows XP Professionalが通常起動した状態では、このDLLを書き換えることは出来ない。セーフモードをうまく使うか、一旦 Linuxでブートして書き換えるなどの方法があるだろう。ここでは詳しい説明を省くが、セーフモードを使う方法については下記サイトに含まれている。
Enable Multiple Concurrent Remote Desktop Connections or Sessions in Windows XP
DLLを書き換えたら Windows XP Professionalを通常起動し、レジストリに下記のような変更を加える。
に、それぞれ DWORD値 "EnableConcurrentSessions"を作成し 1にセットする。
に、DWORD値 "AllowMultipleTSSessions" を作成し 1にセットする。
(これは環境によっては既にそうなっているかもしれない)
レジストリの書き換えが終わったら、「ファイル名を指定して実行」から gpedit.msc (グループポリシーエディタ)を起動し、「コンピュータの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「ターミナル サービス」まで降りていき、「接続数を制限する」設定を「有効」にし、最大接続数を好きな値にセットする。
次にコントロールパネルから「ユーザー アカウント」→「ユーザのログオンやログオフの方法を変更する」へ降りていき、「ユーザーの簡易切り替えを使用する」をチェックする。
上記で作業はおおかた終了である。リモートデスクトップをまだオンにしていないならば、「システムのプロパティ」→「リモート」からリモートデスクトップを有効にする。これで PCを再起動すれば、Windows XP Professionalが複数ユーザー同時ログイン可能な状態で動作する。
なおコンピュータがドメインに参加している場合、書き換えたレジストリの内容が戻ってしまう問題があるらしい。
パスワードなしのアカウントで Windows XP Professionalにリモートデスクトップ接続する ( 推奨はしない )
Linuxでバイナリファイルを書き換える時は bvi というプログラムが便利だ。操作は viに似ており、: で行番号のかわりにアドレスを16進入力して目的のオフセットへ飛べる。ファイルを開いた時はリードオンリーモードになっているが、:set mm コマンドで書き換えが可能なモードに切り替わるので後は x や i といったように viのような使い方で書き換えを行い、終わったら :wq で上書き終了すると良い。
Xenのハイパバイザ(完全仮想化)モードで運用しているバーチャルマシンの仮想ディスクに含まれているパーティションを Linuxでマウントしたい場合は、multipath-toolsに含まれる kpartxコマンドを使う。
参考記事:ディスクイメージとパーティション
(なおこのネタ自体は 2006年頃から存在するようだが、要点だけまとめた日本語の情報が他に見あたらなかった)
Windows XP Professionalはリモートデスクトップクライアントを用いることで離れた端末からネットワークを通じてログインし、利用できる。しかしながら、同時に利用することが可能なセッションはローカル・リモート合わせてひとつだけである。つまり、誰かがリモートからログインしようとするとその WinXP Proマシンを操作中のユーザはログアウトを迫られる。
複数のユーザが同時にログインしてオペレーティングシステムの機能を利用することは、UNIXやその派生OSでは当たり前に出来ることであるが、Windows(サーバ向け除く)はそのマーケティングにおける性質上、「技術的には出来るけど、出来ないようにしてある」といったところだと思われる。実は以前 Windows XP SP2でこの制限が緩和され同時に2セッションまで利用出来るようになるという噂が流れたのだが、これはガセネタだったようだ。
ここからが本題である。この制限は、termsrv.dll という DLLを3バイト書き換え、いくつかのレジストリ項目を登録し、グループポリシーを修正することで外すことが出来る。
termsrv.dllは Windowsフォルダ以下の system32, ServicePackFiles/i386, system32/dllcache にそれぞれ存在している可能性がある(環境によってそれぞれ存在してしていたりしなかったりするようだ)。そこにある全ての termsrv.dllに対し、下記のような書き換えを行う(全て同じ内容のはずなので、1個書き換えてコピーすれば良い)。
0x00022A17
0x74を、0x75に変更
0x00022A69-0x00022A6A
0x7F 0x16を、0x90 0x90に変更
もちろん Windows XP Professionalが通常起動した状態では、このDLLを書き換えることは出来ない。セーフモードをうまく使うか、一旦 Linuxでブートして書き換えるなどの方法があるだろう。ここでは詳しい説明を省くが、セーフモードを使う方法については下記サイトに含まれている。
Enable Multiple Concurrent Remote Desktop Connections or Sessions in Windows XP
DLLを書き換えたら Windows XP Professionalを通常起動し、レジストリに下記のような変更を加える。
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Licensing Core]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
に、それぞれ DWORD値 "EnableConcurrentSessions"を作成し 1にセットする。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
に、DWORD値 "AllowMultipleTSSessions" を作成し 1にセットする。
(これは環境によっては既にそうなっているかもしれない)
レジストリの書き換えが終わったら、「ファイル名を指定して実行」から gpedit.msc (グループポリシーエディタ)を起動し、「コンピュータの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「ターミナル サービス」まで降りていき、「接続数を制限する」設定を「有効」にし、最大接続数を好きな値にセットする。
次にコントロールパネルから「ユーザー アカウント」→「ユーザのログオンやログオフの方法を変更する」へ降りていき、「ユーザーの簡易切り替えを使用する」をチェックする。
上記で作業はおおかた終了である。リモートデスクトップをまだオンにしていないならば、「システムのプロパティ」→「リモート」からリモートデスクトップを有効にする。これで PCを再起動すれば、Windows XP Professionalが複数ユーザー同時ログイン可能な状態で動作する。
なおコンピュータがドメインに参加している場合、書き換えたレジストリの内容が戻ってしまう問題があるらしい。
関連記事
パスワードなしのアカウントで Windows XP Professionalにリモートデスクトップ接続する ( 推奨はしない )
関連サイト
- Remote Desktop Connection Client for Mac
- Microsoftが開発・配布している Mac版リモートデスクトップクライアント。Messengerもそうだが、意外と Mac版の存在を知らない人が多い。
- rdesktop: A Remote Desktop Protocol Client
- オープンソースのリモートデスクトップクライアント
おまけ
Linuxでバイナリファイルを書き換える時は bvi というプログラムが便利だ。操作は viに似ており、: で行番号のかわりにアドレスを16進入力して目的のオフセットへ飛べる。ファイルを開いた時はリードオンリーモードになっているが、:set mm コマンドで書き換えが可能なモードに切り替わるので後は x や i といったように viのような使い方で書き換えを行い、終わったら :wq で上書き終了すると良い。
Xenのハイパバイザ(完全仮想化)モードで運用しているバーチャルマシンの仮想ディスクに含まれているパーティションを Linuxでマウントしたい場合は、multipath-toolsに含まれる kpartxコマンドを使う。
参考記事:ディスクイメージとパーティション

0 件のコメント:
コメントを投稿
<< ホーム