リモート・デスクトップのトラブルとして、リモート・コンピュータへの接続直後に切断され、イベント・ログに「RDPDD.dll failed to load」というエラーが記録されることがある。リモート・コンピュータにグラフィックス・カードを追加していると、このトラブルが生じる可能性が高まるようだ。「SessionImageSize」というレジストリ値を設定すると解消できる場合がある。
対象OS:Windows 2000 Server/Windows XP Professional/Windows Server 2003
リモートにあるWindows PCのデスクトップ環境を、ほぼそのままリモート・コンピュータ上で実現できるリモート・デスクトップ接続(ターミナル・サービス)は、システム管理やリモートでの業務遂行などに大変役立つ便利な機能である。Windows XP以降のWindows OSには、一部のエディションを除いて標準装備されていることから、日常的にリモート・デスクトップ接続を利用している読者諸兄も多いだろう。
そのリモート・デスクトップ接続が起動直後に終了してしまう、というトラブルに筆者は遭遇したことがある。具体的には、リモート・デスクトップ接続クライアント(Remote Desktop Connection Client、以下RDC)を起動して[接続]ボタンをクリックすると、リモート・コンピュータの画面が一瞬表示された後に閉じ、RDCが元のダイアログ表示に戻る、というものだ。接続元コンピュータでは何もエラー・メッセージが表示されなかったが、接続先のリモート・コンピュータでは同時刻に「アプリケーション ポップアップ: : \SystemRoot\System32\RDPDD.dll failed to load」というシステム・イベント・ログが複数連続で記録されていた。
結果からいえば、原因は特定できなかったものの、リモート・コンピュータのレジストリ修正によってトラブルは解消できた。本稿では、このトラブルが発生しやすい状況や、効果のあった解消方法について報告する。必ずしも同じ方法で本トラブルが解消できるとは限らないが、症状が上記と同じであれば試す価値はある。
前述の「RDPDD.dll failed to load」というエラー・メッセージをインターネット上のWebサイトを検索したところ、グラフィックス・チップ・ベンダとして著名なNVIDIAのユーザー・コミュニティでも、同じ症状のトラブルが報告されていた。
この一連の投稿によると、接続元コンピュータのOSがWindows XP SP3で、NVIDIA製グラフィックス・チップ(GeForce)と「175.16」というバージョン/ビルド番号のディスプレイ・ドライバを組み合わせると同トラブルが発生する、とのことだ。筆者が遭遇したトラブルでも、OSとグラフィックス・チップは上記フォーラムでの報告と共通だった(ディスプレイ・ドライバのバージョンはもっと新しかったが)。
しかし、下記のBrad Rutkowski氏によるTechNet Blogの投稿によれば、NVIDIAと同じく著名なATI(現AMD)製グラフィックス・チップとWindows Server 2003 SP2の組み合わせでも、同じトラブルが発生したとのことだ。
このことから、OSやグラフィックス・チップにはあまり依存していないことがうかがえる。
また、Windowsのターミナル・サービスが対象ではないが、Citrix SystemsのPresentation Server/XenAppという製品向けの技術情報として、RDP接続時に「\SystemRoot\System32\RDPDD.dllを読み込めませんでした。」というエラー・メッセージが表示されることがある、と記載されている。
発生状況について要約すると、リモート・コンピュータ(Presentation Serverを実行しているサーバ)のグラフィックス機能が、一般的な統合型グラフィックス・チップ(メイン・メモリなどを制御するチップにグラフィックス機能が統合されている廉価なタイプ)ではなく、例えば3Dグラフィックス・カードによって実装されていると、このトラブルが発生することがあるとのことだ。
また、この技術情報ではトラブルの直接的な原因として、ディスプレイ・ドライバがメモリにロードされる際、レジストリ値「SessionImageSize」で決定されるメモリ領域の容量が不足することを挙げている。
書籍「インサイドMicrosoft Windows 第4版」の「第7章 メモリ管理」に、このSessionImageSize値に関わる解説がある。それによると、まずWindows XPやWindows Server 2003、ターミナル・サービスがインストールされたWindows 2000 Serverでは、複数のセッションをサポートしている(セッションとは、ユーザーごとに用意される画面やキーボード、プロセス空間などの環境へ接続した状態のこと)。これらのWindows OSでは、各セッションに固有のプログラム/データが、仮想システム・アドレス空間にある「セッション空間」にマッピングされる。各セッションで利用される全ディスプレイ・ドライバは、プリンタ・ドライバやWindows標準ドライバのWin32k.sysとともに、セッション空間内のある単一領域にロードされる。この単一領域のサイズはデフォルトで8Mbytesとのことだ。
Windowsの起動時には、物理的なコンソールのためのセッション(コンソール・セッション)が生成され、そのためのグラフィックス・チップ用ディスプレイドライバも前述の8Mbytesの領域にロードされる。次にリモート・デスクトップ接続要求によって新たなセッション(リモート・セッション)が生成される際には、そのためのディスプレイ・ドライバ(RDPDD.DLL)も、この領域に追加されることになる。
つまり、グラフィックス・チップ用ディスプレイ・ドライバのプログラム/データ・サイズが大きいと、この領域の空きが足りなくなってRDPDD.DLLをロードする余地がなくなり、結果として本トラブルが発生すると考えられる。実際、統合型グラフィックス・チップに比べるとグラフィックス・カードは多機能・高性能なことが多く、それを制御するディスプレイ・ドライバも複雑かつ大規模になりメモリ消費量も増えがちである。
前述のSessionImageSize値は、この領域のサイズを変更するためのものだ。つまり、デフォルトの8Mbytesより大きなサイズをSessionImageSize値に設定し、領域の容量不足を解消すれば、本トラブルも解消されるはずだ。
「解説」で説明したとおり、リモート・コンピュータ(リモート接続される側のコンピュータ)にて、ディスプレイ・ドライバがロードされるメモリ領域の容量不足によって本トラブルが発生しているとしたら、リモート・コンピュータのレジストリ値「SessionImageSize」を増加させることで解決できる。残念ながら、これでも解消できないという報告もあり、確実とはいえないが試してみる価値はあるだろう。
レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリ・エディタの操作は慎重に行うとともに、あくまで御自分のリスクで設定を行ってください。何らかの障害が発生した場合でも、本Windows Server Insider編集部では責任を負いかねます。ご了承ください。
SessionImageSize値は次のレジストリ・キーに設定する。デフォルトではこの値は存在しないが、グラフィックス・カードによってはディスプレイ・ドライバのインストール時にこの値を自動で設定することもある。
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Session Manager\Memory Management |
値の名前 | SessionImageSize |
型 | REG_DWORD |
値の内容 | 0x10 → 16Mbytes 0x20 → 32Mbytes 0x30 → 48Mbytes 0x40 → 64Mbytes …… |
SessionImageSize値を設定するレジストリ・キーとその内容 SessionImageSize値に、確保したい容量をMbytes単位で設定する。この項目が存在していない場合は、DWORD型で新しく作成してから設定すること。新しい設定を有効にするにはシステムの再起動が必要。デフォルトは8Mbytesなので、例えば16Mbytesから16Mbytes単位で増加させながらリモート・デスクトップ接続を試していけばよいだろう。 |
デフォルトでは8Mbytesのようなので、例えば16Mbytesから16Mbytes単位で増やしながらリモート・デスクトップ接続を試していけばよいだろう。ただし、変更した設定を有効にするにはシステムの再起動が必要である。なお、筆者が遭遇したトラブルは、この値を64Mbytesにすることで解消できた。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.