Windows-7:当网络适配器处于隐藏状态时,禁用网络连接共享

本文关键字:状态 共享 连接 网络 隐藏 网络适配器 于隐藏 Windows-7 | 更新日期: 2023-09-27 18:37:07

我正在尝试使用 NetConLib.dll 通过 Windows-7 上的网络适配器共享互联网。

为此,应在所有其他网络适配器上禁用互联网共享。

正常情况下。我可以迭代所有已安装的网络适配器并禁用其上的共享。但是,有时当拔网络设备时,适配器隐藏在窗口中。但它的属性仍然存在于Windows注册表中。

我什至在控制面板中找不到适配器。当然,不能使用 NetConlib 库迭代它。


可能的情况。

  • 最简单的方法是使用 Windows 命令禁用互联网在所有适配器上共享。无论他们的可见性如何。

    这可能吗?

  • 第二种解决方案是从隐藏状态恢复网络适配器,以便 NetConlib可以循环访问它并禁用它。

    我试图在Windows注册表中找到适配器的属性并unhide它,但找不到任何东西

有什么解决办法吗?


@erm3nda。

感谢您提供翔实的答案。虽然它没有解决我面临的问题NetConlib.

SC 配置正确关闭 ICS 服务。但共享网络适配器继续被标记为Shared 1。因此,关闭 ICS 服务似乎不会影响适配器的设置。

非常有趣的是;当您尝试使用 Windows GUI 共享另一个适配器 ( Right click on adapter -> Properties -> Share ) 时,会提示您一条消息,告诉您

"当前正在共享另一个适配器,即您的新适配器 将改为共享"。您单击"确定",它就完成了。

整个下午我一直在挖掘整个互联网,看看是否有其他使用 CMD 命令的解决方案。

也许可能会有一个与命令共享适配器的离开。这样,窗口将处理禁用其他适配器。与使用 GUI 时的方式类似。


1:Windows 告诉您当前在 Control Panel'Network and Internet'Network Connections 中共享哪个适配器)。

Windows-7:当网络适配器处于隐藏状态时,禁用网络连接共享

可能的解决方案 1:完全禁用 ICS。您可以停止 ICS 服务,因此任何连接都不会处于共享状态,并且不会与NetConLib.dll冲突。(不确定隐藏的,您必须尝试)。

您可以使用以下命令从命令行管理它: net start SharedAccessnet stop SharedAccess

此外,如果您需要从重新启动到禁用它,则必须使用以下方法禁用服务: sc config SharedAccess start= disabled

注释和参考文献:

  • 执行sc config将显示"start= OPTIONS"和其他一些选项。下面的空格 = 和选项是必需的。您可以检查结果从运行或 cmd 运行services.msc
  • 执行net以显示选项。服务名称位于来自 ICS 服务的"服务名称"标签下的 services.msc 列表。
  • netsh 路由不再在 Win7 上,因此您只能启动/停止/启用/禁用但不启用特定接口。您必须通过手动鼠标设置...这在Win7 ICS下不适用于XP系统
  • Sc Config命令来自我发现的这个很酷的文档今天。

可能的解决方案 2:删除幻影接口?我也尝试将适配器和接口放入注册表,但没有看到有关显示/隐藏/幽灵/启用或类似内容的任何信息。我也在这里搜索 kb 314053注册表会议。

我可以尝试可能的解决方案 1 :)或直接删除隐藏/幽灵适配器。您可以通过两种方式做到这一点。Devcon删除选项也将删除驱动程序。

  • 设备管理器:运行set devmgr_show_nonpresent_devices=1并运行 devmgmt.msc .您必须在"查看"上看到"显示隐藏"选项。这show_nonpresent还必须揭示隐藏的设备,而不仅仅是非活动设备。kb 269155 - 您必须单击名为"让我修复它"#link我自己"
  • 使用devcon.exe实用程序:这是Windows的设备管理器工具用力量移动。 你会发现一个非常大和有用的指南这里。

查找网卡的基本用法 devcon findall =net ,您也可以devcon findall =net *ndis*列出所有 ndis 卡。删除的基本用法将devcon remove =net *ndis*删除所有 ndis 卡类型。

我也尝试启用/禁用命令,但我的网络接口列表中没有任何变化。我删除了自己的wifi卡来测试它:)无论如何,我没有注意到任何关于连接面板中此类设备的"取消隐藏"功能的选项。

新编辑(太啰嗦了,对吧?

我从这个超级用户帖子中找到了一个名为ics管理器的工具。 - 阅读答案#3你可以直接从utapyngo的Git项目页面下载。

它基于 .Net Framework 4。Yo 必须下载并运行构建.bat编译两个 exe(您还获得了 C# 源代码)。解决方案是仅获取已编译的 IcsManager.exe(命令行版本)以及唯一需要的库 IcsManagerLibrary.dll。

这个应用程序也使用NETCONLib.dll,所以你可以使用它,或阅读源代码以查看你需要做的正确功能,并在你的开发中实现。

如果 IP 范围"192.168.137.1"出现问题,可以从注册表永久设置,或运行netsh interface ipv4 set address name="YOUR-INTERFACE" source=static addr=192.168.2.1 mask=255.255.255.0 。使用波浪号启动netsh interface或将 accutes 放入接口名称时,您会遇到丑陋的错误(西班牙语默认以太网名称是"Conexión de áreal local"...一个笑话)。

注意:您可以一次打包所有内容,首先使用 Bat call IcsManager.exe' 所需的参数,然后稍后从同一批次启动 netsh 配置命令到完全配置。

评论:关于尝试覆盖共享连接时的提示,肯定是因为只能共享一个。我还看到,它们被配置为公共和家庭来设置这对,但我找不到注册表项在哪里......还从 reg 和使用 Diffs 进行一些导出,不走运。我陷入了差异,并开始在谷歌上搜索"ICS C++ and C#",然后找到了它。

另外:我把它netsh到蝙蝠里,当插入以太网电缆时,它会为Windows Task启动(这是操作方法),以便与Android反向网络共享一起使用。如您所见,我对你的问题太感兴趣了,因为它让我研究得更好,也学到了很多东西。

对不起我的英语不好。我不是。问候。

我发现通过进入设备管理器,您可以显示隐藏的设备并尝试禁用适配器上的互联网共享。

希望这接近您的要求。祝你好运!

自动取款机

来源: http://msdn.microsoft.com/en-us/library/windows/hardware/ff553955%28v=vs.85%29.aspx

我参加聚会大约 10 年了,但这个问题的完整解决方案在互联网上没有其他地方。要禁用已拔出或卸载的设备的互联网连接共享

,您需要:
  • 清除共享访问注册表
  • 清除设备的 WMI 共享条目
  • 禁用通过网络库共享

清除注册表:

您需要设置两个注册表项以0xFFFFFFFF

  • HKLM:'Software'Microsoft'Windows'CurrentVersion'SharedAccess'PrivateIndex
  • HKLM:'Software'Microsoft'Windows'CurrentVersion'SharedAccess'PublicIndex

例如在powershell中:

Set-ItemProperty -Path "HKLM:'Software'Microsoft'Windows'CurrentVersion'SharedAccess" -Name "PrivateIndex" -Value 0xFFFFFFFF
Set-ItemProperty -Path "HKLM:'Software'Microsoft'Windows'CurrentVersion'SharedAccess" -Name "PublicIndex" -Value 0xFFFFFFFF

清除设备的 WMI 共享条目:

对于每个HNet_ConnectionProperties,必须确保IsIcsPublicIsIcsPrivate设置为 false 。您可以查看在powershell中设置了IsIcsPublicIsIcsPrivate的接口:

Get-CimInstance -ClassName 'HNet_ConnectionProperties' -Namespace 'root'Microsoft'HomeNet' | Format-Table

遗憾的是,Set-CimInstance cmdlet 在这种情况下似乎不起作用,因此我们必须选择另一种语言。幸运的是,可以在线找到将这些值设置为 false 的代码。例如,下面是一些执行此任务的 C#(指向 utapyngo)

    public static void CleanupWMISharingEntries()
    {
        var scope = new ManagementScope("root''Microsoft''HomeNet");
        scope.Connect();
        var options = new PutOptions();
        options.Type = PutType.UpdateOnly;
        var query = new ObjectQuery("SELECT * FROM HNet_ConnectionProperties");
        var srchr = new ManagementObjectSearcher(scope, query);
        foreach (ManagementObject entry in srchr.Get())
        {
            if ((bool)entry["IsIcsPrivate"])
                entry["IsIcsPrivate"] = false;
            if ((bool)entry["IsIcsPublic"])
                entry["IsIcsPublic"] = false;
            entry.Put(options);
        }
    }

。和一些VBcript(归因于Billchaison):

set WMI = GetObject("WinMgmts:'root'Microsoft'HomeNet")
set objs1 = WMI.ExecQuery("SELECT * FROM HNet_ConnectionProperties WHERE IsIcsPrivate = TRUE")
for each obj in objs1
    obj.IsIcsPrivate = FALSE
    obj.Put_
next
set objs2 = WMI.ExecQuery("SELECT * FROM HNet_ConnectionProperties WHERE IsIcsPublic = TRUE")
for each obj in objs2
    obj.IsIcsPublic = FALSE
    obj.Put_
next

禁用通过 netcon 库共享:

这部分你可能已经知道了,但为了完整起见,这里有一些 powershell 可以做到这一点:

regsvr32.exe /s hnetcfg.dll
$NetShare = New-Object -ComObject HNetCfg.HNetShare
foreach ($RawConnection in $NetShare.EnumEveryConnection) {
    $Sharing = $NetShare.INetSharingConfigurationForINetConnection.Invoke($RawConnection)
    $Sharing.DisableSharing()
}
有关

netcon 相关 COM API 的文档可在 MSDN 上找到