7

以下に示すように、perfmon カウンターは、ipconfig/all および c# システム コールと比較して、異なる NIC 名を使用しています (これは ipconfig/all からのものです)。

   Ethernet adapter HHHH:       

   Connection-specific DNS Suffix  . :   

   Description . . . . . . . . . . . : HP NC364T PCIe Quad Port Gigabit Server Adapter #3
   Physical Address. . . . . . . . . : 00-1F-29-0D-26-59
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   IPv4 Address. . . . . . . . . . . : 166.49.47.10(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.240
   Default Gateway . . . . . . . . . :
   NetBIOS over Tcpip. . . . . . . . : Disabled
using System.Net.NetworkInformation;
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

私は得るHP NC364T PCIe Quad Port Gigabit Server Adapter #3。ipconfig とまったく同じです。 しかし、perfmon は使用していますHP NC364T PCIe Quad Port Gigabit Server Adapter _3(ハッシュの代わりにアンダースコア)。perfmon とまったく同じカウンター名を取得するには、別の呼び出しを使用する必要がありますか? もしそうなら、それは何ですか?

4

1 に答える 1

0

私は個人的にレジストリを使用して、ネイティブな方法でネットワークデバイスを一覧表示します。情報を取得する方法はたくさんありますが、システムのようにすべての方法で情報を表示できるわけではありません。考えられるコードサンプルは次のようになります(完全にエラー処理されていない)。Windows Vista 32/64ビットおよび7で動作します。NETクラスとはかなり異なりますが、同じように動作すると思います。コードを実行するには、「Microsoft.Win32を使用する」名前空間を追加する必要があります。

private void button1_Click(object sender, EventArgs e)
    {
        ListPCIDevices(false, listBox1);
    }

    public static void ListPCIDevices(bool ListOnlyNetworkDevices, ListBox LB)
    {
        string NetKey = @"SYSTEM\ControlSet001\Enum\PCI";
        using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(NetKey))
        {
            foreach (string skName in rk.GetSubKeyNames())
            {
                using (RegistryKey sk = rk.OpenSubKey(skName))
                {

                    foreach (string skSubName in sk.GetSubKeyNames())
                    {

                        using (RegistryKey ssk = sk.OpenSubKey(skSubName))
                        {

                            object ItemName = ssk.GetValue("DeviceDesc");
                            object ItemCat = ssk.GetValue("Class");
                            if (ItemCat == null) { ItemCat = "Unknown"; }

                            if ((ItemName != null) && ((ItemCat.ToString() == "Net")||(!ListOnlyNetworkDevices)))
                            {
                                LB.Items.Add(ItemName.ToString().Split(';')[1]);
                            }

                        }
                    }
                }
            }
        }
    }
于 2012-06-25T22:16:06.890 に答える