0

我得到一个带有 GetBestInterface (iphlpapi.dll) 的 InterfaceIndex。

目标:读取其他接口属性。

这个 WMI 查询很慢:

SELECT MACAddress,Name,GUID,NetConnectionID FROM Win32_NetworkAdapter WHERE InterfaceIndex=

在 C# 中,更快,

NetworkInterface.GetAllNetworkInterfaces()

但每个 NetworkInterface 都没有属性 InterfaceIndex (原文如此!)。

我不知道如何优化这个:

    EnumerationOptions wmi_options = new EnumerationOptions();
    wmi_options.Rewindable = false;
    wmi_options.ReturnImmediately = true;
    string wql = "SELECT MACAddress,Name,GUID,NetConnectionID FROM Win32_NetworkAdapter WHERE InterfaceIndex=" + iface;
    ManagementObjectCollection recordset = new ManagementObjectSearcher(@"root\cimv2", wql, wmi_options).Get();
    foreach (ManagementObject mo in recordset)

这些选项似乎没有帮助。我可以拆分操作并缓存任何步骤吗?

或者其他路径:避免 WMI 并从注册表中查找接口(使用 InterfaceIndex)?

HKLM\SYSTEM\CurrentControlSet\Services\tcpip\Parameters\Interfaces

HKLM\SYSTEM\CurrentControlSet\Control\Network{4D36E972-E325-11CE-BFC1-08002BE10318}

4

1 回答 1

0

我不知道这是否真的更快,但你试过 powershell 吗?

string IfIndex = "15";
        string psscript = "get-netadapter |  Where-Object interfaceindex -eq " + IfIndex;
        PowerShell powershell = PowerShell.Create();
        powershell.Runspace = RunspaceFactory.CreateRunspace();
        powershell.Runspace.Open();
        powershell.AddScript(psscript);
        foreach (PSObject result in powershell.Invoke())
        {
            Console.WriteLine("Name: {0} " + "Status: {1}",result.Members["Name"].Value, result.Members["status"].Value);
        }
        Console.Read();

使用 System.Management.Automation & System.Management.Automation.Runspaces 从您的应用程序运行它;

我还没有测试代码,这是我的头顶。

于 2013-08-18T20:53:37.983 回答