INetSharingConfiguration-> EnableSharing(ICSSHARINGTYPE_PUBLIC)返回0x80040201

Ste*_*son 6 c++ sharing windows-7

我正在尝试以编程方式在与Windows 7计算机上的已知GUID匹配的设备上启用与共享类型public共享.

API位于:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365944(v = vs.85).aspx

错误列表显示以下内容:E_ABORT,E_FAIL,E_INVALIDARG,E_NOINTERFACE,E_NOTIMPL,E_OUTOFMEMORY,E_POINTER和E_UNEXPECTED.

我得到的错误代码是0x80040201,它解析为:"一个事件无法调用任何订阅者." 它似乎与上面列出的任何错误代码都不匹配.

如果我手动进入网络适配器属性并转到共享选项卡并启用共享并选择专用网络并单击确定,则正确启用共享.

在此之后我的上述代码运行没有问题.

我甚至可以手动设置另一个适配器(公共)和不同的专用网络上的共享,然后运行我的代码,看到我的代码将公共和专用网络更新为我想要的.只有在首先通过网络属性窗格手动启用共享后,这似乎才有效.

这个问题已在两台不同的计算机上运行Windows 7 64位重复出现.在系统上启用共享然后重新安装网络适配器驱动程序后,从系统卸载网络适配器驱动程序后,似乎会发生这种情况.

我已经尝试在卸载期间使卸载程序禁用共享,但这似乎是命中或错过.

Windows网络共享属性窗格正在做这个API调用不能做的事情,因为每次手动设置适配器上的共享.

有没有人有任何想法可能是什么?

小智 1

我在 Windows 8.1 上遇到了同样的问题,并在阅读后最终修复了它: https: //support.microsoft.com/kb/828807

\n\n

我的代码是 C#,但我\xc2\xb4m 确信你可以在 C++ 中做同样的事情

\n\n
// Disable ICS on any network iterfaces which may no longer be present in the system\npublic void Disable_ICS_WMI()\n{\n  ManagementScope scope = new ManagementScope("\\\\\\\\.\\\\ROOT\\\\Microsoft\\\\HomeNet");\n\n  //create object query\n  ObjectQuery query = new ObjectQuery("SELECT * FROM HNet_ConnectionProperties ");\n\n  //create object searcher\n  ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);\n  //get a collection of WMI objects\n  ManagementObjectCollection queryCollection = searcher.Get();\n\n  //enumerate the collection.\n  foreach (ManagementObject m in queryCollection)\n  {\n    // access properties of the WMI object\n    Console.WriteLine("Connection : {0}", m["Connection"]);\n    try\n    {\n       PropertyDataCollection properties = m.Properties;\n       foreach(PropertyData  prop in properties)\n       {\n         if (prop.Name == "IsIcsPrivate" && ((Boolean) prop.Value ) == true)\n         {\n            prop.Value = false;\n            m.Put();\n         }\n       }          \n     } catch (Exception e)\n     {\n       Console.WriteLine("ex " + e.Message);\n       continue;\n     }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n