API на C# для получения идентификаторов ЦП и серийного номера диска/тома.
Вопрос
Я знаю, что могу получить идентификатор ЦП и серийный номер тома физического диска, запросив WMI, но WMI обычно не торопится.Какие еще более быстрые варианты, если таковые имеются, доступны для получения этой информации?Существуют ли API-интерфейсы Win32, которые позволят это сделать?
Редактировать: Позвольте мне уточнить.Под идентификатором ЦП я имею в виду то же значение, которое можно получить, запрашивая следующие свойства экземпляра WMI:
- Win32_Processor::ProcessorId
- Win32_LogicalDisk::VolumeSerialNumber
Решение
Просто имейте в виду, что идентификатор процессора не всегда доступен.
Кстати, чего ты пытаешься добиться?Если вы хотите сгенерировать уникальный ключ для экземпляра компьютера, установите флажок Генерация уникального ключа (отпечатка пальца) для компьютера в целях лицензирования сообщение Соукота Османа в Codeproject;он может дать вам несколько подсказок (также читайте комментарии).
Другие советы
Вы можете запросить в реестре Windows информацию о диске, но не уверены в процессоре.Кажется, что ваш вопрос рассматривается в этом вопросе SO (демонстрируется ряд методов получения этой информации, но для скорости, возможно, лучше всего получить ее из реестра):
WMI фактически берет значительную часть своих данных из реестра.Система хранит большое количество информации о системе и, очевидно, очень быстро реагирует.
Если вы хотите выполнить привязку к материнской плате, процессору и/или жесткому диску по причинам лицензирования, проверьте следующие значения:
HKLM\HARDWARE\DESCRIPTION\System\BIOS\BaseBoardManufacturer
HKLM\HARDWARE\DESCRIPTION\System\BIOS\BaseBoardProduct
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\Идентификатор
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\ProcessorNameString
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\BuildLabEx
HKLM\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\DiskController\0\DiskPeripheral\0
(может быть характерно для плат с использованием RAID)
Если вы хотите получить серийный номер диска без WMI, выполните вызов DeviceIoControl к устройству физического диска.Пример кода в VB.NET: http://www.dreamincode.net/code/snippet429.htm
Для CPUID попробуйте следующее: http://devpinoy.org/blogs/cvega/archive/2006/04/07/2658.aspx
Для серийного номера тома попробуйте следующее: http://www.eggheadcafe.com/articles/20021019.asp
Гугл твой друг ;-)
Мне нравится GetSystemInfo но это не распространяется на физические диски..