某些 IDL 构造是封送处理和 unmarshaled 不正确的 RPC

文章翻译 文章翻译
文章编号: 824835 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
重要本文包含有关如何修改注册表的信息。请确保您对其进行修改之前备份注册表。请确保您知道如何还原注册表发生问题。有关如何备份、 还原,以及修改注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986在 Microsoft Windows 注册表的说明
展开全部 | 关闭全部

本文内容

症状

远程过程调用 (RPC) 通信与其他 Microsoft 基于 Windows 的计算机在网络上使用的程序可能会失败。封送例如对于时,使用两个的远程计算机之间的自定义 Microsoft Visual Basic 程序和可能的 Visual Basic 程序使用用户定义类型封送处理,查找特定的接口定义语言 (IDL) 构造的不正确处理和取消封送。例如对于您可能会遇到下列症状之一:
  • 将失败远程调用和 RPC_X_BAD_STUB_DATA 错误代码由 Visual Basic 程序返回。
  • 不正确的数据是取消封送的。

原因

如果 RPC 组件错误地将封送处理或取消封送某些 IDL 结构,可能会出现此问题。版本的 Windows,它们可能会不正确地封送处理,并且 unmarshal IDL 结构如下所示:
  • Microsoft Windows XP (原始版本) 和 Windows XP 包含 ms03-039 安全服务包 1 (SP1) 安装更新。 下面的 Microsoft 知识库文章中,此更新进行了说明:
    824146ms03-039: 一个缓冲区溢出 RPCSS 中可能允许攻击者运行恶意程序
  • Microsoft Windows 2000
  • Microsoft Windows 4.0 NT
  • Microsoft Windows 98
如果两个以下条件,则 Visual Basic 程序中可能会出现此问题:
  • IDL 文件使用一种结构,它包含一个使用下列类型之一的 8 字节字段:
    日期
    双精度型
    CY
    变量
    十进制
    int64/uint64
  • 8 位字节的字段是一个非第一个字段,并且没有为 4 个字节的字段或包含在相同的结构中的 8 字节域之前更小。
例如对于如果 IDL 文件使用类似于以下内容的结构,可能会出现此问题:
Public Type myType

member1 As Long

member2 As Double

End Type

解决方案

对于 Windows Server 2003 的修补程序信息

若要与版本的 Windows 的不正确地封送处理和 unmarshal IDL 结构,请按照下列步骤操作:
  1. 请执行以下任一操作:
    • 安装的 Windows Server 2003 最新 service pack 有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
      889100如何获取最新的 service pack,Windows Server 2003 的
    • 我 nstall 安全公告 版 051 中介绍的安全更新。有关安全公告更新 051 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
      902400更新-051: MS DTC 和 COM + 中的漏洞可能允许远程执行代码
  2. 添加 UDTAlignmentPolicy 注册表项。若要这样做,请按照下列步骤操作:

    警告如果您修改注册表错误地使用注册表编辑器或使用另一种方法,则可能会出现严重问题。这些问题可能需要重新安装操作系统。Microsoft 不能保证可以解决这些问题。修改注册表的风险由您自己承担。
    1. 单击 开始、 单击 运行,在 打开 框中,键入 regedit,然后单击 确定
    2. 找到以下注册表子项:
      HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc
    3. 编辑 菜单上指向 新建,然后单击 DWORD 值
    4. 键入 UDTAlignmentPolicy,然后按 ENTER 键。
    5. 双击 UDTAlignmentPolicy,然后键入一个值,以确定 RPC 将使用数据格式根据以下信息:

      如果 UDTAlignmentPolicy 值设置为 0,RPC 将封送处理通过使用"旧"不正确的数据格式。使用不正确地封送处理和 unmarshal IDL 构造的 windows 版本,RPC 将进行通信。例如对于 RPC 会与 Windows 2000 进行通信或包括在 ms03-039 的 Windows XP SP1 安装更新。

      如果 UDTAlignmentPolicy 值设置为 0,RPC 可以与基于 Windows 2000 的计算机进行通信。

      如果 UDTAlignmentPolicy 值设置为 1,RPC 将封送处理使用新的正确的连续线格式。RPC 将与版本的 Windows 的正确封送处理和 unmarshal IDL 构造进行通信。例如对于 RPC 会与 Windows Server 2003 进行通信或包括在 ms03-026 的 Windows XP 安装更新。

      如果 UDTAlignmentPolicy 项不存在,则远程调用将失败,并且 RPC 将返回 RPC_X_BAD_STUB_DATA 错误代码当 RPC 尝试封送或 unmarshal 受影响的类型。

      重要UDTAlignmentPolicy 值设置为 0 时,基于 Windows Server 2003 的计算机可以交换的 IDL 构造,与不正确地封送处理和 unmarshal IDL 构造的 Windows 版本的数据。但是,IDL 构造是取消封送到格式不正确。使用不正确的封送处理和取消代码可能会阻止此相同的 IDL 构造的互操作性和其他 IDL 构造程序与 Windows 的版本的正确运行的计算机的通讯时封送处理和 unmarshal IDL 构造。

对于 Windows XP 的服务包信息

若要解决此问题,获得最新的 service pack,对于 Windows XP。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322389如何获取最新的 Windows XP 服务包
在 Windows XP Service Pack 2 中,您可以修改 UDTAlignmentPolicy 注册表项,若要调整与不同版本的 Windows 的 RPC 通信的方式。要这样做请按照步骤 3 中"修补程序的 Windows Server 2003 信息"部分。

对于 Windows XP 修补程序信息

若要与版本的 Windows 的不正确地封送处理和 unmarshal IDL 构造,如 Windows 2000 或 Windows XP SP1 的安装,包括 ms03-039 替代更新,请在基于 Windows XP SP1 的计算机上安装 ms03-039 更新。有关在 ms03-039 的详细信息更新,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824146ms03-039: 一个缓冲区溢出 RPCSS 中可能允许攻击者运行恶意程序
受支持的修补程序不是 windows 的当前可用于通过使用版本的正确封送处理和 unmarshal IDL 结构使用 RPC 进行通信的基于 Windows XP 的计算机。这些版本的 Windows Server 2003 和 Windows XP 安装包含该 ms03-026 的更新。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。 在 Microsoft Windows XP Service Pack 2 中,第一次已得到纠正此问题。

更多信息

正确地封送处理和 unmarshal IDL 构造在"原因"部分中提到的 windows 版本包括下列内容:
  • Microsoft Windows Server 2003 及更高版本
  • 包括在 ms03-026 的 Microsoft Windows XP Service Pack 1 (SP1) 安装更新,但不能包括 ms03-039 安全更新。在下面的 Microsoft 知识库文章中介绍了 ms03-026 更新:
    823980ms03-026: 溢出 RPC 接口中的缓冲区可能允许执行代码
  • Windows XP Service Pack 2 (SP2)
注意受支持的修补程序不是 windows 的当前可用于通过使用版本的正确封送处理和 unmarshal IDL 结构使用 RPC 进行通信的基于 Windows 2000 的计算机。这些版本的 Windows Server 2003 和 Windows XP 安装包含该 ms03-026 的更新。

属性

文章编号: 824835 - 最后修改: 2014年2月27日 - 修订: 13.6
这篇文章中的信息适用于:
  • 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
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium) 2003
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium)
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows XP Media Center Edition 2005 Update Rollup 2
关键字:?
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbtshoot kbwinxpsp2fix kbwinxppresp2fix kbfix kbbug KB824835 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 824835
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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