Добрый день. Не знаю в какой из разделов лучше бы обратиться.. Требуется узнать заводской номер флешек (УСБ, microSD, CompactFlash и тд) разных производителей. Не метку тома, а именно серийник. С винтами проще, в них есть SMART и серийный номер можно вытащить из него. Задача стоит - привязаться к флешке (независимо от производителя). Можно конечно взять метку тома+название флешки, но вариант плох тем, что метку можно изменить руками, и купить такую же флешку, или например у всей конторы служебные флешки одинаковы. Может что придумать можно? Может с помощью дравера что-то удастся? Как дополнение к приведенному, можно в начале флешки записать несколько байт - в служебной области (вроде есть неиспользуемое место).. Спасибо за советы. В винде в свойствах флешки не обнаружил ничего такого. Может кто видел софтину которая показывает серийник... Боюсь что только заводскеи утилиты могут подобное делать..
можно например открыть флешку CreateFile'ом и прочитать первые N секторов в поисках серийника или уникальной последовательности, свой драйвер тут не нужен
RamMerLabs, проблема в том, что образ флешки можно легко скопировать (( Конечно, если серийник не найду, то прийдется так делать..
Народ, а случайнос строка в диспетчере устройств типа: USBSTOR\DISK&VEN_CORSAIR&PROD_UFD&REV_1100\AA4400000 ... о чем может говорить, особенно последние цифры. Прога типа USBDeviev в качестве серийника показывает именно его...
NtQueryVolumeInformationFile(FileFsVolumeInformation). http://msdn.microsoft.com/en-us/library/aa364993.aspx
Clerk, я Вас очень уважаю. Но я вроде бы ясно выразился что мне надо узнать "не метку тома, а именно серийник" - заводской... Скачал за это время книгу П.В.Агуров - Интерфейс USB. Практика использования и программирования, разобрался с примерами, там можно читать серийники HID устройств, но, увы, кроме моей мыши ничего не под HID устройством не опознается... (( Зато удается считать "серийник мыши".. Он состоит из одного символа. Все это делается через hid.dll
Итак, тему наверное можно закрыть. Ибо перерыл кучу интернета, пару книжек, и уже убежден что нет стандарта, регламентирующего серийники флешек. У каких-то отдельных производителей фирменные утилиты могут его доставать, не больше этого. Прийдется делать идентификацию по метке тома, названию, и записать в служебные области "левые" данные.
test555, Глянь исходники \KmdKit\examples\setup\EnumDisk И еще полезная статья с еще полезными исходниками Плюс полезная утилита
Увы, полезная утилитка ничего не показала, полезная статья научила только безопасно извлекать устройства, а полезном примере обнаружил только *.lib файл и .exe Не знаю как надо, может там еще какой-нибудь файл забыли положить.. Прога та дает серийники винтов, но флешки молчит. Да, открыл IDA библиотеку setupapi.dll, посомтрел какие там есть функции CM_ Судя по названиям, нужно нет...
короче, как человек, который с этими флешками умучался, могу сказать,что: 1. если флешка по спецификации сделана, то серийник у нее есть. InstanceId у этой флешки и есть серийник. если не по спецификации(т.е. древняя) - серийник осутствует, InstanceId сгенерирован виндой. 2. InstanceId - это если смотреть по реестру следующее (пример): HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_058f&Pid_6362\058F312D81B. 3. и самое интересное: как узнать наверняка)) IOCTL_STORAGE_QUERY_DEVICE_PROPERTY - катит не всегда - только для новых устройств, по причине, о которой уже говорил - на этот ктл отвечать будет USBSTOR. IOCTL_SCSI_PASS_THROUGH - с его помощью послать комманду SCSIOP_INQUIRY с соответствующим кодом страницы - 100% правдивая инфа. Кто-то тут спрашивал, как узнать устройство - флешка или диск жесткий - так вот с кодом страницы 0 получите данные по умолчанию - в них-то и будет этот признак. Если нужен примерчик - скажите, завтра могу выложить.
и вообще - все связанное с носителями инфы в винде, начиная от класс-драйверов и ниже работает через SCSI комманды - вот по ним то и стоит курить мануалы.
WMI Select InterfaceType,PNPDeviceID FROM Win32_DiskDrive InterfaceType - USB/IDE PNPDeviceID - содержит серийник.
Partner, согласен, НО WMI уже формируется на основе данных, предоставляемых ДРОВАМИ!!!, и как там сформировано будет от версии к версии - неизвестно. Насколько я знаю(если что не так - поправьте), там постфиксы добавляются, если серийник короче скольких-то символов. Именно поэтому и IOCTL_STORAGE_QUERY_DEVICE_PROPERTY не всегда подходит, а SCSI - forever real data))))