特定の IDL 構造体のマーシャリングとマーシャリング解除が RPC によって正しく処理されない

文書翻訳 文書翻訳
文書番号: 824835 - 対象製品
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリをバックアップし、レジストリの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Microsoft Windows レジストリの説明
すべて展開する | すべて折りたたむ

目次

現象

リモート プロシージャ コール (RPC) を使用して、Microsoft Windows が実行されている他のコンピュータとネットワーク経由で通信するプログラムが、異常終了することがあります。たとえば、2 台のリモート コンピュータ間でユーザー定義の Microsoft Visual Basic プログラムを使用する場合、その Visual Basic プログラムでユーザー定義の型マーシャリングが使用されていると、特定のインターフェイス定義言語 (IDL) 構造体のマーシャリングとマーシャリング解除が正しく処理されないことがあります。たとえば、次のいずれかの現象が発生することがあります。
  • リモート呼び出しが失敗し、Visual Basic プログラムによってエラー コード RPC_X_BAD_STUB_DATA が返されます。
  • 誤ったデータのマーシャリング解除が行われます。

原因

この問題は、RPC コンポーネントが特定の IDL 構造体のマーシャリングまたはマーシャリング解除を正しく処理しない場合に発生することがあります。IDL 構造体のマーシャリングまたはマーシャリング解除を正しく処理しない可能性のある Windows のバージョンを以下に示します。
  • Microsoft Windows XP (最初のバージョン) およびセキュリティ更新プログラム MS03-039 が適用されている Windows XP Service Pack 1 (SP1)。この更新プログラムについては、以下の「サポート技術情報」 (Microsoft Knowledge Base) に記載されています。
    824146 [MS03-039] RPCSS サービスのバッファ オーバーランにより、攻撃者によって悪質なプログラムが実行される
  • Microsoft Windows 2000
  • Microsoft Windows NT 4.0
  • Microsoft Windows 98
この問題は、以下の両方の条件に該当している場合に、Visual Basic プログラムで発生することがあります。
  • IDL ファイルで、以下のいずれかの型を使用する 8 バイト フィールドを含む構造体を使用しています。
    DATE
    Double
    CY
    VARIANT
    DECIMAL
    INT64/UINT64
  • その 8 バイト フィールドが先頭のフィールドではなく、同じ構造体の中に、8 バイト フィールドより前に 4 バイト以下のフィールドがあります。
たとえば、この問題は IDL ファイルで次のような構造体を使用している場合に発生することがあります。
Public Type myType

member1 As Long

member2 As Double

End Type

解決方法

Windows Server 2003 用修正プログラムの情報

IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されないバージョンの Windows と通信するには、次の手順を実行します。
  1. 次のどちらかを実行します。
    • Windows Server 2003 の最新 Service Pack をインストールします。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
      889100 Windows Server 2003 の最新の Service Pack を入手する方法
    • セキュリティ情報 MS05-051 に記載されているセキュリティ更新プログラムをインストールします。 セキュリティ情報 MS05-051 の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
      902400 [MS05-051] MSDTC および COM+ の脆弱性により、リモートでコードが実行される
  2. レジストリ値 UDTAlignmentPolicy を以下の手順で追加します。

    警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。
    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。次に、[名前] ボックスに regedit と入力し、[OK] をクリックします。
    2. 次のレジストリ サブキーに移動します。
      HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc
    3. [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。
    4. UDTAlignmentPolicy と入力し、Enter キーを押します。
    5. [UDTAlignmentPolicy] をダブルクリックし、以下の情報に基づいて、RPC が使用するデータ形式を決定するための値を入力します。

      UDTAlignmentPolicy 値が 0 に設定されている場合、RPC は "古い" 誤ったデータ形式を使用してマーシャリングを行います。RPC は、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されないバージョンの Windows と通信します。たとえば、Windows 2000 または更新プログラム MS03-039 が適用されている Windows XP SP1 と通信します。

      UDTAlignmentPolicy 値が 0 に設定されている場合、RPC は Windows 2000 ベースのコンピュータと通信できます。

      UDTAlignmentPolicy 値が 1 に設定されている場合、RPC は "新しい" 正しいワイヤ形式を使用してマーシャリングを行います。RPC は、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されるバージョンの Windows と通信します。たとえば、Windows Server 2003 または更新プログラム MS03-026 が適用されている Windows XP と通信します。

      UDTAlignmentPolicy 値が存在しない場合、リモート呼び出しは失敗し、RPC が問題の型をマーシャリングまたはマーシャリング解除するときに、エラー コード RPC_X_BAD_STUB_DATA が返されます。

      重要 : UDTAlignmentPolicy 値が 0 に設定されている場合、Windows Server 2003 ベースのコンピュータは、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されないバージョンの Windows と、IDL 構造体のデータを交換することができます。だたし、IDL 構造体は誤った形式にマーシャリング解除されます。マーシャリングとマーシャリング解除に誤りのあるコードを使用すると、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されないバージョンの Windows とプログラムが通信するときに、この同じ IDL 構造体と他の IDL 構造体の相互運用性が損なわれる場合があります。

Windows XP Service Pack の情報

この問題を解決するには、Windows XP の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
322389 最新の Windows XP Service Pack を入手する方法
Windows XP Service Pack 2 では、UDTAlignmentPolicy レジストリ エントリを修正して、異なるバージョンの Windows と RPC が通信する方法を調整できます。これを行うには、「Windows Server 2003 用修正プログラムの情報」の手順 3. を実行します。

Windows XP 用修正プログラムの情報

Windows 2000、更新プログラム MS03-039 が適用されている Windows XP SP1 など、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されないバージョンの Windows と通信するには、使用している Windows XP SP1 ベースのコンピュータに更新プログラム MS03-039 をインストールします。 更新プログラム MS03-039 の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
824146 [MS03-039] RPCSS サービスのバッファ オーバーランにより、攻撃者によって悪質なプログラムが実行される
現在のところ、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されるバージョンの Windows と RPC を使用して通信する Windows XP ベースのコンピュータ用には、サポートされる修正プログラムは公開されていません。マーシャリングとマーシャリング解除が正しく処理されるバージョンは、Windows Server 2003 および更新プログラム MS03-026 を適用している Windows XP です。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。 この問題は、Microsoft Windows XP Service Pack 2 で最初に修正されました。

詳細

「原因」に記載されている IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されるバージョンの Windows は次のとおりです。
  • Microsoft Windows Server 2003 およびそれ以降のバージョン
  • 更新プログラム MS03-026 が適用され、セキュリティ更新プログラム MS03-039 が適用されていない Microsoft Windows XP Service Pack 1 (SP1)。更新プログラム MS03-026 については、以下の「サポート技術情報」 (Microsoft Knowledge Base) に記載されています。
    823980 [MS03-026] RPC インターフェイスのバッファ オーバーランによりコードが実行される
  • Microsoft Windows XP Service Pack 2 (SP2)
: 現在のところ、IDL 構造体のマーシャリングとマーシャリング解除が正しく処理されるバージョンの Windows と RPC を使用して通信する Windows 2000 ベースのコンピュータ用には、サポートされる修正プログラムは公開されていません。マーシャリングとマーシャリング解除が正しく処理されるバージョンは、Windows Server 2003 および更新プログラム MS03-026 を適用している Windows XP です。

プロパティ

文書番号: 824835 - 最終更新日: 2014年2月27日 - リビジョン: 14.1
この資料は以下の製品について記述したものです。
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows XP for Itanium-based Systems Version 2003
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium)
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows XP Media Center Edition
キーワード:?
kbnosurvey kbarchive kbtshoot kbbug kbfix kbqfe kbwinxpsp2fix kbwinxppresp2fix kbhotfixserver KB824835
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com