Как получить уникальную подпись машины без WMI?

Я знаю, что уже задан вопрос о создании уникального идентификатора для машины, но мой вопрос немного другой.

Я хочу знать, есть ли какие-либо другие методы (вызовы API?) для получения информации об оборудовании и НЕ использовать WMI. Из MSDN я понял, что WMI представлен в Win2000, поэтому в Win98 его нет. У меня есть приложение, которое должно работать даже на Win98 (я знаю, что это отстой, но что поделаешь?) и по-прежнему получать информацию об оборудовании.


person Hemant    schedule 16.05.2009    source источник
comment
На каком языке вам нужен пример?   -  person Robert Venables    schedule 16.05.2009
comment
Я ищу соответствующие вызовы API, которые могут дать мне эту информацию. Подойдет пример на любом языке (C#, C++, C, Pascal).   -  person Hemant    schedule 16.05.2009


Ответы (3)


Я делал это несколько раз для лицензионных проектов. Для серийного номера жесткого диска используйте:

private static extern long GetVolumeInformation(string PathName, StringBuilder VolumeNameBuffer, UInt32 VolumeNameSize, ref UInt32 VolumeSerialNumber, ref UInt32 MaximumComponentLength, ref UInt32 FileSystemFlags, StringBuilder FileSystemNameBuffer, UInt32 FileSystemNameSize);

Используйте VolumeSerialNumber, возвращаемый функцией.

Кроме того, вы могли подумать об использовании идентификатора продукта Windows (расположенного по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId). Будьте осторожны, большое количество пользователей Windows XP имеют пиратские копии и используют одни и те же ключи продукта.

person Robert Venables    schedule 16.05.2009
comment
Интернет-сайт MSDN скажет вам, что GetVolumeInformation доступен только в Windows 2000, но это не так. Последние версии содержимого библиотеки MSDN вроде бы отрицают существование Windows 9x, но если вы посмотрите на старую версию библиотеки MSDN (я посмотрел на ту, которая поставлялась с Visual Studio 2005), вы увидите, что GetVolumeInformation is< /i> доступен в Windows 98. - person RichieHindle; 16.05.2009

Вы можете комбинировать различную информацию об оборудовании для создания уникального ключа.

Например, идентификатор ЦП, MAC-адрес и т. д. Вы извлекаете их, комбинируете, шифруете, и у вас есть уникальное представление аппаратной настройки этой машины.

Попробуйте погуглить на тему: как читать информацию об оборудовании.

Из того, что я вижу, в CodeProject есть очень полезный пост: Как получить информацию об оборудовании ( Идентификатор процессора, информация о материнской плате, серийный номер жесткого диска, информация о системе, ...).

person Konstantinos    schedule 16.05.2009
comment
Вот именно вопрос! КАК получить эту информацию? - person Hemant; 16.05.2009
comment
пример относится к .NET 2.0, который подходит для ваших требований Win98. - person Konstantinos; 16.05.2009

Просмотрите библиотеку WinAPI kernel32 и user32. У него есть всевозможные вкусности, такие как EnumDisplayDevices, GetLogicalDrives, GlobalMemoryStatus, GetVolumeInformation и т. д. и т. д. Мне нравится использовать PInvoke для просмотра API, поскольку он дает мне C# код оболочки, но MSDN также будет иметь все это в Windows SDK.

Ответ @novatrust относительно серийного номера жесткого диска хороший, но его можно комбинировать с другими. Я предоставил ссылку API GetVolumeInformation для pinvoke выше, но простой Google также должен работать.

person TheSoftwareJedi    schedule 16.05.2009