IRPStackSize 和从 Windows XP 客户端访问 Windows 7 共享

IRPStackSize 和从 Windows XP 客户端访问 Windows 7 共享

我收到了一个新的 Windows 7 工作站(替换旧的 Windows 7 工作站)并开始遇到从 Windows XP 机器访问我的文件共享的错误。

我遇到了各种错误,这些错误似乎时有发生(有时它可以正常工作几个小时)。其中一个是:

存储空间不足,无法处理此命令

我还发现当应用程序尝试从共享访问大量文件时,打开文件会随机失败。

微软就此主题发布了一篇神秘的知识库文章,建议增加IRPStackSize修复次数,但没有任何解释说明为什么需要这样做。

我发现IRPStackSize在我的工作站和客户端 XP 机器上增加似乎可以解决这些问题。

但是,我为什么需要这样做?为什么一台 Win7 机器有这个问题而另一台没有?它们都在同一个域中,因此组策略将相同的设置推送给它们,其中一些我已经手动验证过。我怎么知道合适的值是什么?或者我应该设置为最大值 50?

答案1

以下是我了解到的信息:

“我还发现当应用程序尝试从共享访问大量文件时,打开文件时会出现随机失败的情况。”

Windows 使用分层 I/O 模型,其中驱动程序相互连接并利用底层驱动程序的服务来执行其工作。利用彼此服务的驱动程序层通常称为“驱动程序堆栈”。

特定堆栈中的过滤器过多(每个请求经过防病毒层、基本过滤引擎、ntfs 等层),因此默认 IRPStackSize 不够大。增加默认值可让所有过滤器拥有自己的 I/O 堆栈位置,这样每个人都会满意。这不是一般的 Windows 问题,而只是系统中某些驱动程序的限制。

考虑将频繁使用的文件共享托管在文件服务器上,然后阅读2008 R2 调整指南,特别是有关调整文件服务器性能的部分:http://msdn.microsoft.com/en-us/windows/hardware/gg463392

相关内容