程序在使用 RPC 与 UNIX 服务器进行通信时可能停止运行

针对 Windows XP 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Windows XP 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

本文已归档。它按“原样”提供,并且不再更新。
症状
当使用远程过程调用 (RPC) 并在 Microsoft Windows XP 上运行的客户端程序与 UNIX 服务器上运行的 RPC 服务器通信时,可能会随机地遇到访问冲突。
原因
此问题是由于 RPC 运行时 DLL (Rpcrt4.dll) 中存在不正确的缓冲区而引起的。仅在客户端已空闲 40 到 60 秒钟之后向 UNIX 服务器发出传出的 RPC 调用并且该 RPC 调用需要大规模响应时,才会发生缓冲区溢出现象。溢出的缓冲区会损坏跟在 RPC 所使用的缓冲区后面的内存块,并可能在客户端程序中导致随机的访问冲突。
解决方案

Service Pack 信息

要解决此问题,请获取最新的 Microsoft Windows XP Service Pack。有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322389 如何获取最新的 Windows XP Service Pack

修补程序信息

Microsoft 目前提供了一个受支持的修补程序。但是,此修补程序仅用于修复本文所述的问题。请仅将此修补程序应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果这个问题没有给您造成严重的影响,我们建议您等待包含此修补程序的下一个 Service Pack。

要解决此问题,请向 Microsoft 在线客户服务提交请求以获取该修补程序。要提交联机请求以获取该修补程序,请访问下面的 Microsoft 网站:注意:如果发生其他问题或需要进行任何疑难解答,则您可能需要创建单独的服务请求。对于此特定修补程序无法解决的其他支持问题和事项,将照常收取支持费用。要创建单独的服务请求,请访问下面的 Microsoft 网站: 此修补程序的英文版具有下表中列出的文件属性(或更新的属性)。这些文件的日期和时间按协调世界时 (UTC) 列出。当您查看文件信息时,相应的时间将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用“控制面板”中“日期和时间”工具中的“时区”选项卡。
日期         时间   版本           大小     文件名------------------------------------------------------23-Dec-2002  09:31  5.1.2600.1154  505,856  Rpcrt4.dll

状态
Microsoft 已经确认这是在“这篇文章的信息适用于:”部分中列出的 Microsoft 产品中存在的问题。 此问题最早在 Microsoft Windows XP Service Pack 2 中得到了解决。
更多信息
某些 RPC 服务器可能要求客户端程序结束其空闲连接以降低资源使用率。这是通过向客户端发送关闭协议数据单元 (PDU) 来完成的。在客户端上,RPC 仅在向 RPC 服务器发出传出调用时才检查它的接收缓冲区。有些 UNIX 服务器每经过 20 秒的空闲时间就会发送一次关闭 PDU。如果客户端的空闲时间过长,以致服务器连续发送了 2 次关闭 PDU,则客户端上的 RPC 会将这些 PDU 合并到它的接收缓冲区中。如果客户端此时决定发出传出调用,它将先尝试处理其接收缓冲区中合并的两个 PDU。在处理期间,合并处理会导致接收缓冲区被重新分配。但是,没有正确跟踪缓冲区大小信息。这可能导致所报告的缓冲区比其实际大小要大。然后,将发出传出调用。如果响应的大小大于重新分配的接收缓冲区的实际(而不是报告的)大小,就会发生访问冲突。

如果客户端空闲时间过长,以致服务器发送了三次关闭 PDU,RPC 将关闭该连接。然后,将创建一个新的连接以运行传出调用。这种情况下,不会出现此问题。因此,当客户端程序的空闲时间在 40 到 60 秒钟之间时,可能会出现此问题。不过,这取决于 UNIX 服务器在发送关闭 PDU 之前等待的时间。
属性

文章 ID:811576 - 上次审阅时间:01/12/2015 21:14:02 - 修订版本: 3.0

  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • kbnosurvey kbarchive kberrmsg kbbug kbfix kbqfe kbenv kbwinxpsp2fix kbwinxppresp2fix kbhotfixserver KB811576
反馈