Я возился с Windows API (мне сказали держаться подальше от WMI, поскольку это ненадежно), пытаясь получить серийные номера устройств для моих жестких дисков и подключенных USB-устройств. Но, похоже, большинство функций предназначено для доступа к серийным серийным идентификаторам, а не к уникальному серийному номеру устройства данного производителя. Кажется, что эти серийные серийные номера рассчитаны на основе последней даты и времени форматирования диска.
Что ж, это не подходит для приложения, которое я хочу разработать — если устройство отформатировано и скопирована та же информация на это устройство, то при запуске моего приложения оно должно иметь возможность обрабатывать внутреннюю информацию (определенную через серийный номер) как принадлежащий тому устройству, которое, если я использую серийный идентификатор тома, будет потеряно.
Я посмотрел на код для http://www.winsim.com/diskid32/ но это, кажется, просто возвращает серийный идентификатор тома. РЕДАКТИРОВАТЬ: На самом деле, это значение отличается от серийного тома, как вы можете видеть в выводе ниже:
Vol Name is Hellblazer Vol Serial is 3358611714 Max Filelength is 255 chars Filesystem is NTFS 202020202020202020205a204339464a38305345 Z9CJF08ES
Последовательность в первом бите кода (с использованием GetVolumeInformation) является десятичной версией шестнадцатеричного значения, которое вы получаете для накопителя при вводе ‘vol’ в командной строке — так что это серийный номер тома. Ниже приведен номер, который возвращается DeviceIoControl(hwDrive, IOCTL_STORAGE_QUERY_PROPERTY...
, Это тот же ID, программист diskid32 получает для моего привода, но отличается от фактического серийного ниже. Недоумение.
Для USB-накопителей:
Используя PSP_DEVICE_INTERFACE_DETAIL_DATA
struct, я могу получить доступ к перечислению устройства GUID, которое выглядит для моего USB-накопителя следующим образом:
\? \ USBSTOR # диск&ven_toshiba&prod_mk5059gsxp&rev_gn00 # 203216187542__&0 # {53f563
07-b6bf-11d0-94f2-00a0c91efb8b}
это часть информации об этом устройстве является серийной, предположительно:
203216187542__
Кроме того, я загрузил diskpart.exe (программу для разбиения строки на cmd) и посмотрел информацию о жестких дисках моего системного жесткого диска и внешнего USB-накопителя, и ни одно из них не соответствовало ни одному из значений, которые я получаю выше:
Код диска устройства TOSHIBA MK5055GSXF ATA: 00005B9E
TOSHIBA MK5059GSXP USB-идентификатор устройства: 51260D08
Что здесь может происходить? Где и как я могу получить доступ к фактическому серийному номеру изготовителя фактического устройства?
Любая помощь будет принята с благодарностью!
Задача ещё не решена.
Других решений пока нет …