Windows XP Professionalをマルチユーザー仕様に改造する

Windows

(この記事は STBBS.NET Blogに掲載された記事を2013年4月に移動したものです)

ここで紹介するハックはマイクロソフトの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個書き換えてコピーすれば良い)。

オフセット変更内容
0x00022A170x74を、0x75に変更
0x00022A69-0x00022A6A0x7F 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コマンドを使う。

参考記事:ディスクイメージとパーティション

同じカテゴリの記事

イントラネットアクセス時に Internet Explorerが勝手に互換モードで動作するのを阻止する 2013年11月5日
IEからProFTPdにアクセスするとファイル名が文字化けする 2010年3月24日
コマンドプロンプトから MS SQLServerのバックアップを取る 2009年12月11日
Windows Vistaで RDP7を使う 2009年6月12日
Oracle 11g ODBC Driver sqoras32.dllのエラー 2009年5月31日

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図