Как получить аппаратный идентификатор для сетевого адаптера программно в C # - PullRequest
3 голосов
/ 20 сентября 2011

Мне нужно запросить Hardware-Id для сетевого адаптера, используя C #.

Используя System.Management, я могу запросить информацию об идентификаторе устройства, описании и т. Д., Но не об идентификаторе оборудования.

где, listBox1 - это простой элемент управления списком для отображения элементов в приложении winform.

Например:

ManagementObjectCollection mbsList = null;
ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_NetworkAdapter");
                mbsList = mbs.Get();
                foreach (ManagementObject mo in mbsList)
                {
                    listBox1.Items.Add("Name : " + mo["Name"].ToString());
                    listBox1.Items.Add("DeviceID : " + mo["DeviceID"].ToString());
                    listBox1.Items.Add("Description : " + mo["Description"].ToString());
                }

Однако, глядя на MSDN ссылку на WMI, я не могу получить HardwareId. Используя инструмент devcon ( devcon hwids = net ), я знаю, что каждое устройство связано с HardwareId

Любая помощь высоко ценится

1 Ответ

3 голосов
/ 20 сентября 2011

Требуемый HardwareID находится в другом классе WMI.Если у вас есть экземпляр Win32_NetworkAdapeter, вы можете выбрать Win32_PnpEntry с помощью PNPDeviceId.Вот пример кода, который перечисляет все сетевые адаптеры и их аппаратный идентификатор, если таковые имеются:

        ManagementObjectSearcher adapterSearch = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_NetworkAdapter");

        foreach (ManagementObject networkAdapter in adapterSearch.Get())
        {
            string pnpDeviceId = (string)networkAdapter["PNPDeviceID"];
            Console.WriteLine("Description  : {0}", networkAdapter["Description"]);
            Console.WriteLine(" PNPDeviceID : {0}", pnpDeviceId);

            if (string.IsNullOrEmpty(pnpDeviceId))
                continue;

            // make sure you escape the device string
            string txt = "SELECT * FROM win32_PNPEntity where DeviceID='" + pnpDeviceId.Replace("\\", "\\\\") + "'";
            ManagementObjectSearcher deviceSearch = new ManagementObjectSearcher("root\\CIMV2", txt);
            foreach (ManagementObject device in deviceSearch.Get())
            {
                string[] hardwareIds = (string[])device["HardWareID"];
                if ((hardwareIds != null) && (hardwareIds.Length > 0))
                {
                    Console.WriteLine(" HardWareID: {0}", hardwareIds[0]);
                }
            }
        }
...