5.57 Win7下如何开启普通共享 https://scz.617.cn/windows/201204121415.txt Q: 服务端Server服务已启动,网络属性里的"文件和打印机共享"已勾中,445/TCP侦听 中。客户端可以建立到服务端IPC$的管理员级SMB会话并访问服务端的缺省共享、管 理共享。 现在服务端的当前帐号是Administrator,尝试开启某个目录的普通共享时,得到错 误提示"试图共享...时出现错误。函数不正确。此时尚未创建共享资源"。 在"控制面板\所有控制面板项\网络和共享中心\高级共享设置"中发现"关闭文件和打 印机共享"被选中,改为"启用文件和打印机共享",保存修改后再次检查,发现"关闭 文件和打印机共享"仍被选中。 A: scz@nsfocus 2012-04-12 14:15 这个问题在网上有一些人碰到过,这里给一个更接近真相的解释。 检查Win7自带PFW的高级设置,确保入站规则中有一条预定义规则: 文件和打印机共享(SMB-In) 文件和打印机共享的预定义规则有很多条,只要留上面这一条就可以了。这条规则的 很多设置都无所谓,比如启用、禁用、允许连接、阻止连接、本地IP、远程IP等等, 这些设置是什么都无所谓。但是,必须为这条规则选择匹配的网络,如果本地连接属 于公用网络,必须让这条规则适用于"公用"。可以禁用这条规则,但不要删除这条规 则,它必须位于入站规则列表中。 Win7在开启普通共享时有个API会去访问上述预定义规则,如果它不在那里,就会导 致错误提示"试图共享...时出现错误。函数不正确。此时尚未创建共享资源"。这个 API比较底层,即使在cmd.exe中用"net.exe share ..."开启共享,也会得到错误提 示"Incorrect function"。最终无法开启普通共享。 MS从来没有在面向End User的帮助文档中解释过它的网络共享到底如何运作的,过去 关于配置、访问网络共享的问题层出不穷,相当大一部分是PFW配置不当导致的。真 正解决这类问题的终极办法是动用wireshark观察SMB协议报文。不可能要求End User 是SMB协议专家,于是MS在Win7中作了改变,配置网络共享时与自带PFW进行联动,试 图部分解决End User的困挠。 前述预定义规则其实就是允许本地子网访问本机445/TCP。这条规则默认位于入站规 则列表里。 有一些吃撑了的高级用户,他们会清空入站规则列表,然后根据自己对各种网络协议 的理解自建规则,比如我就自建规则对445/TCP放行。但是,Win7开启共享时用到的 API不理会自建规则,它认死了预定义规则,哪怕自建规则的效果与预定义规则完全 一样也没用。必须要让API找得到预定义规则,但API不会纠缠预定义规则是否启用。 这个问题与是否禁用Win7自带PFW无关,只与前述预定义规则是否位于入站规则列表 中有关。缺省共享、管理共享不受此问题影响。更扯淡的是,开启普通共享之后,可 以从入站规则列表里删除前述预定义规则,已开启的普通共享一切正常,不再依赖。 "高级共享设置"中"关闭文件和打印机共享"始终被选中不是本质而是表象,其实这里 根本就是个摆设,不用管这里的设置。当开启普通共享成功后,这里的设置自动变成 "启用文件和打印机共享"。假设前述预定义规则缺失,禁用Win7自带PFW后,可以选 中并保持"启用文件和打印机共享",但没有任何意义,开启普通共享时仍会得到"函 数不正确"。 觉得这算是功能性BUG。话说回来,End User很难碰上这个自虐型问题。 友情提示,本文有很多先验知识型假设,不是给小白们看的。我是假设一个SMB协议 专家在Win7上试图开启普通共享时碰上此问题,已经进行了无低级错误的前期技术排 查。