在Windows 7中断开共享时如何避免12秒延迟?

时间:2011-07-05 12:52:59

标签: windows windows-7 smb netbios

我正在制作一些使用NetUseAdd和NetUseDel函数连接/断开共享的工具。在Windows 7中,我注意到在调用NetUseDel和真正的disconnnection之间通过将近12秒。 我做了一些调查,发现net use \ server / del也只在12秒后断开连接。这是一个小脚本和Wireshark输出,对应于脚本运行:

net use \\server "" /user:""
net use \\server /delete

http://i.stack.imgur.com/5CyCw.png

设置last tree connect smb命令作为参考,我们可以看到,树断开延迟了12秒。

有谁知道如何减少这种超时?

3 个答案:

答案 0 :(得分:1)

连接可以保持活力有时甚至超过12秒。 诀窍是删除后强制登录。

如果您强行登录错误,则该份额将立即无法访问。我们可以使用本地Guest帐户(它通常会出现错误"登录失败:帐户当前已禁用。"即使启用它也无法访问)。

而不仅仅是:

net use \\server /delete

我们将执行:

net use \\server /delete
net use \\server "" /user:"Guest"
net use \\server /delete 2>nul

执行第三行是为了防止Guest登录成功(它使用 2> nul 将错误流重定向到nul设备,以避免显示任何错误消息)。

这是使用" net use"的批量版本。命令,但是当使用来自netapi32.dll的NetUseAdd和NetUseDel,或者来自mpr.dll的WNetAddConnection和WNetCancelConnection时,可以应用相同的解决方案。

答案 1 :(得分:0)

为什么要延迟断线?超时的重点是从根本上缓存共享,因为Windows知道如果你访问一次共享,你可能会再次这样做。它不想浪费时间不断设置和拆除一个很容易被打开的连接,因此它会延迟关闭它。

如果您需要访问共享,那么可以帮助您。不要担心删除它,以便您可以重新创建它;只是使用它。

答案 2 :(得分:0)

由于SMB客户端内核驱动程序处理这些请求,您无法控制它何时实际断开连接,您遇到的12秒延迟实际上只是内核处理程序用于终止底层tcp连接的时间。作为一种解决方法,我会使用NetUseEnum来验证在带有计数器的while循环中实际删除了连接。

您可以看到我的答案here,了解有关如何创建多个连接的更多信息,不使用其他smb实现或每个连接创建一个Windows工作站,但运气不佳。

相关问题