从命令行从 Windows .sys 驱动程序调出对话框窗口?

从命令行从 Windows .sys 驱动程序调出对话框窗口?

我想允许我的应用程序的用户直接打开(Win​​dows 控制面板)“Internet 协议版本 4 (TCP/IPv4)”属性对话框(见下图),以选择网络连接;要做到这一点,我首先必须确保我可以从 Windows 10 命令行(或cmd.exePowerShell)执行相同操作。

这与这个问题中问的基本上相同:

...除了我在这个问题上有稍微多一点的细节,所以我希望我能得到比以下更具结论性的答案:

没有办法直接打开该特定属性窗口。只有一个快捷方式可以打开“通用”接口屏幕,即ncpa.cpl

...这样我就能解决这个问题了。

请注意我不是对如何从命令行更改网络连接设置感兴趣(引用的问题已经有了回答我也不是有兴趣查找打开的窗口,并向其发送虚拟键盘按下/击键(引用的问题已经有了自动键答案;尽管人们也可以从命令行获取所有打开的窗口的列表 进而将键发送到 Powershell 中的活动窗口

我认为我可以将这个具体问题简化为如何从 Windows 驱动程序 .sys 文件调出对话框窗口。但首先,让我介绍一下到目前为止我可以从命令行执行的操作。其中大部分来自引用的帖子。

首先,我们可以查询注册表以获取实际的网卡;以下是我cmd.exe在 Windows 10 机器上得到的结果:

C:\tmp>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\6

因此,我有网络接口卡 (NIC) 5 和 6。让我们查询 NIC 6 的 GUID,如下所示ServiceName

C:\tmp>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\6"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\6
    ServiceName    REG_SZ    {80CD6CC2-1673-4BBB-A561-C219841EE3A9}
    Description    REG_SZ    Intel(R) Ethernet Connection (2) I219-V

好的,所以我的 NIC 6 的 GUID,即“Intel(R) Ethernet Connection (2) I219-V”,是{80CD6CC2-1673-4BBB-A561-C219841EE3A9}

然后,从https://www.autohotkey.com/docs/v1/misc/CLSID-List.htm我可以看到:

类标识符 地点 可用性
::{7007ACC7-3202-11D1-AAD2-00805FC1270E} 网络连接 XP-11

...(控制面板)网络连接窗口的 CLSID 是::{7007ACC7-3202-11D1-AAD2-00805FC1270E}

最后,我可以将网络 NIC/适配器的 GUID 用反斜杠附加到网络连接窗口的 CLSID,然后运行它cmd.exe

start ::{7007ACC7-3202-11D1-AAD2-00805FC1270E}\{80CD6CC2-1673-4BBB-A561-C219841EE3A9}

...我得到了如下图左所示的以太网状态对话框:

以太网状态 - 属性 - IPv4 属性

在以太网状态对话窗口中,我仍然需要单击“属性”以授予管理员权限 - 然后我会看到以太网属性窗口。在以太网属性窗口中,我必须滚动并找到“Internet 协议版本 4 (TCP/IPv4)”条目,然后双击它 - 之后,我终于会看到“Internet 协议版本 4 (TCP/IPv4) 属性”对话窗口。

重申这一点,只是为了说清楚:我想要做的是在命令行上运行一个命令,然后进入此(以太网)连接的“Internet 协议版本 4(TCP/IPv4)属性”直接地(无需单击中间窗口)。

现在,我尝试在 Windows 注册表中查找“TCP/IPv4”字符串,并且有以下两个条目:

  • Computer\HKEY_USERS\.DEFAULT\Software\Classes\Local Settings\MuiCache\a39\52C64B7E
  • Computer\HKEY_USERS\S-1-5-18\Software\Classes\Local Settings\MuiCache\a39\52C64B7E

... 两者都具有:

  • 钥匙:@%SystemRoot%\system32\drivers\tcpip.sys,-10100
  • 价值:Internet Protocol Version 4 (TCP/IPv4)

据我所知,.sysWindows 中的文件是驱动程序文件,它们有自己的限制(尽管我不知道这些限制的具体内容);tcpip.sysTCP/IP Windows 驱动程序也必须如此。

然后,它似乎tcpip.sys接受一个参数,在这种情况下-10100,它似乎表示 TCP/IPv4——在注册表中可以注意到,例如该参数-10102表示 TCP/IPv6。

因此,显然,“Internet 协议版本 4 (TCP/IPv4) 属性”以某种方式来自tcpip.sys,使用参数 -10100 设置以目标 TCP/IPv4;但也以某种方式设置了{80CD6CC2-1673-4BBB-A561-C219841EE3A9}我们想要查看其属性的目标网络连接 (此处) 的 GUID。

所以,我的问题是:有没有办法tcpip.sys从命令行(cmd.exe或 PowerShell)调出/打开 Windows 驱动程序文件的对话框窗口,同时指定参数(这里 TCP/IPv4 为 -10100,目标网络适配器/连接为 {80CD6CC2-1673-4BBB-A561-C219841EE3A9})?

如果不是直接从命令行执行,是否有任何 API 可以让我在 VBScript 或 Visual Studio 中的 C/C++ 中执行此操作,我可以查找/查阅?

相关内容