Информация о Flash-накопителе.
Итак, имеем USB-Flash, на ней некие данные, зашифрованные. Требуется обеспечить защиту накопителя от полного копирования, использовав в ключе VendorID, ProductID и серийный номер флешки.
Отсюда задача: узнать оные характеристики.
Путь первый: используем на драйве IOCTL_STORAGE_QUERY_PROPERTY для получения STORAGE_DEVICE_DESCRIPTOR. В дескрипторе вроде бы имеются эти параметры. На деле же оно имеет смысл судя по всему только для SCSI. Для IDE поле Vendor пустое (NULL), поле Product содержит модель накопителя, полученную от него по команде Identify, поле SerialNo также пустое. Для USB - еще круче. Vendor = "USB", Product = "Flash disk" и серийника опять же нету.
Вычитал в DDK и Инете про IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, пробую его но он на моих флешках попросту не работает. Дальнейшее изучение вопроса показало, что он во-первых работает только на WinXP SP1 (ну это у меня есть), а во-вторых только если флешка поддерживает SCM-1. (Security content management). Все, на этом путь №1 зашел в тупик.
Путь второй: лезем в дерево USB-устройств в точности так же, как это делает программа USBView. Тут все в порядке, я вижу воткнутые флешки, их идентификационную информацию, но как теперь имея имя хаба и номер порта узнать, под каким именем смонтирована торчащая там флешка? IOCTL_USB_GET_NODE_CONNECTION_NAME дает пустую строку, видимо оно работает только на тех портах, куда воткнуты внешние хабы.
Что делать? Или задача не имеет решения?