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
中共享哪个适配器)。
可能的解决方案 1:完全禁用 ICS。您可以停止 ICS 服务,因此任何连接都不会处于共享状态,并且不会与NetConLib.dll
冲突。(不确定隐藏的,您必须尝试)。
您可以使用以下命令从命令行管理它: net start SharedAccess
或net 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
,必须确保IsIcsPublic
和IsIcsPrivate
设置为 false
。您可以查看在powershell中设置了IsIcsPublic
或IsIcsPrivate
的接口:
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 上找到