Конференция "WinAPI" » Как узнать серийный номер процессора и винчестера [D6, WinXP]
 
  • Wadimka (30.01.09 14:03) [0]
    Подскажите, как узнать серийный номер процессора и винчестера?
  • clickmaker © (30.01.09 14:07) [1]
    например, через WMI, классы Win32_Processor и Win32_DiskDrive
  • AllDontFire (05.05.09 18:06) [2]
    Мне попался пример "WMI.zip", в котором перечисляются все классы со всеми их данными. Так вот в классе Win32_DiskDrive, наверное, есть всё, кроме серийного номера HDD. На одном форуме видел пост, что там серийника быть и не должно, он есть в классе Win32_PhysicalMedia - да, свойство SerialNumber там есть, но в рез. данных только:
    instance of Win32_PhysicalMedia {Tag = "\\\\.\\PHYSICALDRIVE0";};



    1)Вот пример опредения через \\.\SCSI и IOCTL_SCSI_MINIPORT:
    http://www.delphikingdom.com/asp/answer.asp?IDAnswer=18102
    2)Вот через \\.\PhysicalDrive и Smart. Пример на C++.
    http://www.sql.ru/forum/actualthread.aspx?tid=378384

    (винт SATA II):
    1 - не работает под Win64 и Vista.
    2 - не работает под Vista (под админом DoEnableSmart выдаёт "неверная функция")

    У кого-нибудь есть рабочие примеры для приведенных случаев?
  • Игорь Шевченко © (05.05.09 19:32) [3]

    > У кого-нибудь есть рабочие примеры для приведенных случаев?


    у Коншина ?
  • AllDontFire (06.05.09 15:56) [4]
    http://home.earthlink.net/~akonshin/delphi_ru.htm
    В этом сайте есть 4 примера по сабжу, с сожалению, ни один из них не сработал на Win64 и Висте (да и там не сказано что проверялось на 64 бит и Висте).
    Пример ScsiSN использует $0004D004 - IOCTL_SCSI_PASS_THROUGH,
    но серийного номера там нет. (кстати чтоб это увидеть, нужно переделать пример):  
    if DeviceIoControl( DeviceHandle, $0004d004, @sptwb, SizeOfTScsiPassThrough), @sptwb, len, dwReturned, nil )
    //and ((PChar(@sptwb.bDataBuf)+1)^=#$80)
     then for i:=0 to 191 do write(sptwb.bDataBuf[i])


    В описании  var bDataBuf изменить на char и добавить i:byte.

    У меня есть рабочий пример (\\.\PhysicalDrive и Smart под админом) под Win64, но под Vista он не работает (DoEnableSmart выдаёт "неверная функция).

    На http://www.astra32.com/ru/ есть программа определяющая серийник под Вистой, так что сабж возможен :-)
  • Nickoss © (06.05.09 17:59) [5]

    > в классе Win32_DiskDrive, наверное, есть всё, кроме серийного
    > номера HDD


    А чего ж нет ? Вот, вроде есть
    http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx

    SerialNumber  string
  • AllDontFire (06.05.09 18:25) [6]
    Там чуть ниже :-) :

    > SerialNumber
    >
    >     Data type: string
    >     Access type: Read-only
    >
    >     Number allocated by the manufacturer to identify the
    > physical media.
    >
    >     Example: WD-WM3493798728
    >
    >         Windows Server 2003, Windows XP, Windows 2000, and
    > Windows NT 4.0:  This property is not available.
  • Nickoss © (06.05.09 20:43) [7]
    Нашел интересный архивчик с демкой по WMI. Серийник винта определяется из под Висты. Исходники прилагаются.

    http://www.magsys.co.uk/delphi/magwmi.asp
  • AllDontFire (06.05.09 22:56) [8]
    Спасибо за пример по WMI, но и он не справился с тем хардом на Висте. И дело, похоже не в Висте. Помню пару лет назад на Висте обычный IDE винт определялся смартом на раз-два.

    В общем,  винт c виду обычный Serail Ata.
    OS: Ms Windows Vista Home Basic 6.0.6000
    В примере определяется как WDC WD25 00AAJS-00VWA SCSI Disk Device (так он называется в диспетчере устройств)
    По кнопке “Disk SMART” выдаёт «No SCSI Drive Serial Number Returned». В других местах серийника тоже нет (Ткните пальцем, плиз, если не туда жму).

    Что выдаёт Astra32:
    Модель м. платы WinFast 6100M2MA
    Имя чипсета NVIDIA GeForce 6100/6150/nFoce 500 Family
    Чипсет C51 Host Bridge
    Южный мост MCP51 LPC Bridge

    Hdd:
    Model: WDC WD25 00AAJS-00VWA
    Interface Type : Serial Ata II
    Serial: WD-WM[demo]
    Verdor ATA controller: Nvidia
    Name ATA controller: MCP51 SATA controller
    Location: Tertiary/Master.


    Кстати у меня винт на WinXP64bit тоже Serial ATA II, определяется астрой, если просто выбрать «Жёсткий диск», а на той Висте нужно ещё включить “Внешний UDMA/SATA”, хотя винт в корпусе подключен сразу в материнку.
  • brother © (07.05.09 04:17) [9]
    > а на той Висте нужно ещё включить “Внешний UDMA/SATA”, хотя
    > винт в корпусе подключен сразу в материнку.

    может "дрова" коряво встали или не от него?
  • QAZ (07.05.09 14:33) [10]
    у процесоров нет серийника
    а у диска проще всего узнать серийник тома
  • Anatoly Podgoretsky © (07.05.09 16:03) [11]
    Задачу то какую решаешь?
  • AllDontFire (07.05.09 18:39) [12]
    Задача:
    Получить серийный номер Hdd и использовать его для защиты ПО.
  • Nickoss © (07.05.09 19:38) [13]
    Прога testwmi.


    > По кнопке “Disk SMART” выдаёт «No SCSI Drive Serial Number
    > Returned»


    А что выдает по кнопке "Disk serial (xp)" ?

    или по кнопке "Get Class or Query" Win32_PhysicalMedia в разделе SerialNumber.

    Кстати, а нельзя ли привязаться к PNPDeviceID из Win32_DiskDrive ? Его легко вытащить и из системного реестра. Только вот насколько он уникальный и неизменяемый.
  • AllDontFire (07.05.09 20:06) [14]
    "Disk serial (xp)" --NULL
    "Get Class or Query" Win32_PhysicalMedia" -- NULL все кроме Tag.


    > привязаться к PNPDeviceID

    - интересная идея, конечно, но опять же сразу вопросы
    > насколько он уникальный и неизменяемый"


    Мне, благодаря "Астре", уже хочется найти код для "Внешний UDMA/SATA”.
  • Сергей М. © (07.05.09 20:22) [15]

    > обычный IDE винт


    > винт c виду обычный Serail Ata


    Хрень какая-то ..

    Левый глаз видит на винте IDE-разъем, а правый глаз на том же винте видит SATA-разъем ?
  • Nickoss © (07.05.09 20:43) [16]
    Попробовал подключить IDE-диск через USB-адаптер - та же картина. testwmi его определяет, но в SerialNumber = NULL. По кнопке "Disk model" пишет ST322413A USB Device, также определяются размер, caption. Всё это из под ХР.

    Нашел еще два параметра, ИМХО, уникальных:

    Win32_BaseBoard   SerialNumber (15-значный ID).  Номер совпадает с номером на узкой наклейке со штрих-кодом, расположенной справа от разъема питания материнки (Asus P5K-E).

    Win32_Processor    ProcessorId (16-значное шестнадцатиричное число).
  • AllDontFire (07.05.09 21:01) [17]
    Сергей М. ,
    это 2 разных HDD.
  • AllDontFire (07.05.09 21:11) [18]
    Nickoss,
    У меня Win32_BaseBoard  SerialNumber выдал "MB-1234567890" для Asus P5B.
    ProcessorID более вменяемый правда.
  • DVM © (08.05.09 00:13) [19]

    > Nickoss ©   (06.05.09 20:43) [7]
    >
    > Нашел интересный архивчик с демкой по WMI. Серийник винта
    > определяется из под Висты.

    Под админом только
 
Конференция "WinAPI" » Как узнать серийный номер процессора и винчестера [D6, WinXP]
Есть новые Нет новых   [134434   +26][b:0][p:0.002]