Как узнать заводской номер флэшки?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Как узнать заводской номер флэшки?

Сообщение aleksmir » 13.08.2009 (Чт) 11:05

Здравствуйте!
Как узнать заводской номер флэшки?
Третий день чтение тем и хождения по поисковикам не привело к нужному результата.
Нашёл только: [url="http://www.sql.ru/forum/actualthread.aspx?bid=22&tid=639371&hl=%ea%ee%e4+%fd%ea%e7%e5%ec%ef%eb%ff%f0%e0"]определение кода экземляра устройства[/url] (как из него выцарапать серийный номер так и не понял). К тому же он будет работать только там, где есть WMI.
Подскажите - как это сделать через Win API, причём на VB5 или VB6.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как узнать заводской номер флэшки?

Сообщение Денис » 13.08.2009 (Чт) 13:03

Ну ты и профессионал!
Ссылка - это во-первых.
Во-вторых, WMI есть везде.
В-третьих
Форум вверху этого раздела писал(а):Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.

Жди предупреждения от администрации...
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 13.08.2009 (Чт) 14:09

Ссылку, которую вы мне дали, я уже читал. Там расшифровка только вендора, а не всего кода экземпляра устройства.
К тому же у меня код экземпляра устройства флэшки вообще не содержит кода вендора, одни только буквы:
USBSTOR\DISK&VEN_GENERIC&PROD_USB_FLASH_DISK&REV_0.00\200704C3A4F6BA&0"
WMI в Windows 98 нет.

Так что по всем пунктам вы "гоните" молодой человек.
К тому же ваш ответ мне ничем не помог.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как узнать заводской номер флэшки?

Сообщение iGrok » 13.08.2009 (Чт) 16:33

И тем не менее, либо я Вас не правильно понял, либо с поиском у Вас действительно не очень.
search.php?keywords=%D1%81%D0%B5%D1%80%D0%B8%D0%B9%D0%BD%D0%B8%D0%BA+usb
label:
cli
jmp label

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Как узнать заводской номер флэшки?

Сообщение trash » 13.08.2009 (Чт) 17:48

WMI в Windows 98 нет.
Если захотеть — будет.

Я пользовался такой функцией:
Код: Выделить всё
Public Function GetFlashID() As String
Dim obj As Object, objs As Object, PnPID As String
    Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
    For Each obj In objs
        If obj.InterfaceType = "USB" Then PnPID = obj.PnPDeviceID
    Next
    GetFlashID = Replace(Mid(PnPID, InStrRev(PnPID, "\") + 1), "&0", "")
End Function


Собственно, выделенный участок в строке "USBSTOR\DISK&VEN_GENERIC&PROD_USB_FLASH_DISK&REV_0.00\200704C3A4F6BA&0" и есть серийный номер флешки.
Еще его можно найти в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_058f&Pid_6387\, там будет список из серийников.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 13.08.2009 (Чт) 18:05

Всем спасибо за ответы! Завтра внимательно почитаю.

Пока возник ещё один вопрос: Как узнать серийник флэшки, на которой она в данный момент расположена (ну на которой сам файл exe)?

Просто у меня защита в программе устроена так, что сначала она читает серийник, а потом уже из этого номера строит защиту. А если флэшек в системе окажется две или три, то она ведь найдёт первую попавшуюся флэшку, а не ту на которой расположена программа....

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как узнать заводской номер флэшки?

Сообщение alibek » 13.08.2009 (Чт) 21:24

aleksmir, тебе предупреждение.
Перенес.
Lasciate ogni speranza, voi ch'entrate.

Xcode
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 131
Зарегистрирован: 31.10.2008 (Пт) 8:12
Откуда: Pavlodar

Re: Как узнать заводской номер флэшки?

Сообщение Xcode » 14.08.2009 (Пт) 10:45

aleksmir писал(а):Как узнать серийник флэшки, на которой она в данный момент расположена (ну на которой сам файл exe)?

Узнать путь до файла, выделить имя диска.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 07.01.2010 (Чт) 3:28

trash писал(а):Я пользовался такой функцией:
Код: Выделить всё
Public Function GetFlashID() As String
Dim obj As Object, objs As Object, PnPID As String
    Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
    For Each obj In objs
        If obj.InterfaceType = "USB" Then PnPID = obj.PnPDeviceID
    Next
    GetFlashID = Replace(Mid(PnPID, InStrRev(PnPID, "\") + 1), "&0", "")
End Function

Собственно, выделенный участок в строке "USBSTOR\DISK&VEN_GENERIC&PROD_USB_FLASH_DISK&REV_0.00\200704C3A4F6BA&0" и есть серийный номер флешки.
Еще его можно найти в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_058f&Pid_6387\, там будет список из серийников.


Хорошо, а как функцию Win32_DiskDrive вызывать через API, а не через GetObject? а то функция GetObject тормозит сильно...

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 07.01.2010 (Чт) 3:29

Xcode писал(а):
aleksmir писал(а):Как узнать серийник флэшки, на которой она в данный момент расположена (ну на которой сам файл exe)?

Узнать путь до файла, выделить имя диска.


Тоже хороший вариант. Только как теперь узнать букву диска флэшки через WMI?

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Как узнать заводской номер флэшки?

Сообщение djalex777 » 07.01.2010 (Чт) 14:12

App.Path?

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 07.01.2010 (Чт) 14:35

djalex777 писал(а):App.Path?


Вы меня не поняли...
Имя диска через app.path узнал, допустим это буква H.
Серийный номер через Win32_DiskDrive узнал, сравнил с требуемым номер, допустим он 12345.
Теперь нужна фунция API, чтобы узнать букву диска, которая относятся к флэшке с серийным номером 12345.
Эта проверка нужна, чтобы исключить возможность запуска программы с жёстского диска или с другой флэшки или по сети.
Чтобы программу можно было запускать только с флэшки!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как узнать заводской номер флэшки?

Сообщение Хакер » 07.01.2010 (Чт) 14:37

А кому это нафиг нужно?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 07.01.2010 (Чт) 14:47

Хакер писал(а):А кому это нафиг нужно?


Вообще-то мне нужно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как узнать заводской номер флэшки?

Сообщение Хакер » 07.01.2010 (Чт) 14:49

Если только тебе нужно, чтобы программа запускалась только с флешки, следи за собой и запускай её только с флешки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 07.01.2010 (Чт) 14:59

Хакер писал(а):Если только тебе нужно, чтобы программа запускалась только с флешки, следи за собой и запускай её только с флешки.


Мне нужно, чтобы другие люди запускали мою программу только с флэшки.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как узнать заводской номер флэшки?

Сообщение Хакер » 07.01.2010 (Чт) 15:00

Зачем такая дурь может быть нужна?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Как узнать заводской номер флэшки?

Сообщение awl100Alex » 08.01.2010 (Пт) 0:08

aleksmir писал(а):Теперь нужна фунция API, чтобы узнать букву диска, которая относятся к флэшке с серийным номером 12345.

Никакие API не надо. Эту задачу можно решить тем же WMI, например, так...
Код: Выделить всё
Private Sub Form_Load()
  Me.AutoRedraw = True
  strComputer = "."
  Set objSWbemService = GetObject("winmgmts:\\" & strComputer & "\ROOT\CIMV2")
  Set wmiDiskDrives = objSWbemService.ExecQuery("SELECT * FROM Win32_DiskDrive")
  For Each wmiDiskDrive In wmiDiskDrives
   If wmiDiskDrive.InterfaceType = "USB" Then 'IDE
    Print "USB диск:", wmiDiskDrive.Model
    Print "Size:", wmiDiskDrive.Size & " Байт"
    PnPID = wmiDiskDrive.PnPDeviceID
    Print "Заводской номер:", Replace(Mid(PnPID, InStrRev(PnPID, "\") + 1), "&0", "")
    strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
    Set wmiDiskPartitions = objSWbemService.ExecQuery _
                       ("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _
                       strEscapedDeviceID & """} WHERE AssocClass = " & _
                       "Win32_DiskDriveToDiskPartition")
    For Each wmiDiskPartition In wmiDiskPartitions
    Set wmiLogicalDisks = objSWbemService.ExecQuery _
                       ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
                       wmiDiskPartition.DeviceID & """} WHERE AssocClass = " & _
                       "Win32_LogicalDiskToPartition")
    For Each wmiLogicalDisk In wmiLogicalDisks
     Print "Логический диск:", wmiLogicalDisk.DeviceID
    Next
   Next
   End If
  Next
End Sub

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 08.01.2010 (Пт) 5:52

awl100Alex писал(а):Никакие API не надо. Эту задачу можно решить тем же WMI, например, так...


Спасибо огромное! Это то, что надо!

.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Как узнать заводской номер флэшки?

Сообщение 0xy » 08.01.2010 (Пт) 21:40

aleksmir
Думаю, Вам проще проверять валидность номерка флешки, прежде чем строить на нем защиту.

trash писал(а):Еще его можно найти в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_058f&Pid_6387\, там будет список из серийников.

В Windows 9x нет ключа \Enum.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 09.01.2010 (Сб) 1:46

0xy писал(а):aleksmir Думаю, Вам проще проверять валидность номерка флешки, прежде чем строить на нем защиту.


Практика покажет.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как узнать заводской номер флэшки?

Сообщение alex77755 » 09.01.2010 (Сб) 1:57

Добавьте Хакеру ещё пару рядо звёздочек, а то уже некуда повышать рейтинг
А кому это нафиг нужно?

Зачем такая дурь может быть нужна?

Очень полезные и вразумительные ответы
В 1,5% оценили помощь Хакера. Они явно льстили

[Хакер] :: А в следующий раз будет предупреждение за оффтопик.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как узнать заводской номер флэшки?

Сообщение aleksmir » 09.01.2010 (Сб) 2:10

alex77755 писал(а):Очень полезные и вразумительные ответы


:D :D :D

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как узнать заводской номер флэшки?

Сообщение iGrok » 09.01.2010 (Сб) 23:32

Ребят, я, конечно, понимаю вашу радость по поводу ответов Хакера, но.. Вы вообще осознаёте, что это(такая привязка/защита) ломается за 5 секунд, и мало того, будет работать далеко не у каждого пользователя?

awl100alex у нас славится своими решениями несуществующих проблем через задницу, alex77755 к нему, в последнее время, приближается по этой же характеристике..

Ну а Вам, aleksmir, я вынужден только посочувствовать. Вы строите защиту по заведомо неверной системе..
label:
cli
jmp label

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как узнать заводской номер флэшки?

Сообщение FireFenix » 09.01.2010 (Сб) 23:41

2iGrok: сор, протупил...
Последний раз редактировалось FireFenix 10.01.2010 (Вс) 0:43, всего редактировалось 1 раз.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как узнать заводской номер флэшки?

Сообщение iGrok » 09.01.2010 (Сб) 23:59

FireFenix, скажи мне пожалуйста, как VolumeID соотносится с серийным номером устройства?
label:
cli
jmp label

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Как узнать заводской номер флэшки?

Сообщение awl100Alex » 10.01.2010 (Вс) 1:02

iGrok писал(а):awl100alex у нас славится своими решениями несуществующих проблем через задницу, alex77755 к нему, в последнее время, приближается по этой же характеристике...

Вот это уже оскорбление сразу двух(!) участников форума. iGrok у тебя что... плохое настроение? Или после новогодних праздников из похмелья не вышел? Трех слов не связал, а уже всем характеристики успел обгадить! Какая еще несуществующая проблема? Какая задница? iGrok перестань бредить!

iGrok писал(а):Вы вообще осознаёте, что это(такая привязка/защита) ломается за 5 секунд...

Мне кажется, iGrok, ты слишком переоцениваешь возможности обычных юзеров. Или ты думаешь aleksmir пишет программу для пентагоновских хакеров?
Последний раз редактировалось awl100Alex 10.01.2010 (Вс) 1:33, всего редактировалось 1 раз.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Как узнать заводской номер флэшки?

Сообщение Debugger » 10.01.2010 (Вс) 1:50

[offtopic]
Ну не могу не прокомментировать
iGrok писал(а):Вы вообще осознаёте, что это(такая привязка/защита) ломается за 5 секунд, и мало того, будет работать далеко не у каждого пользователя?

5 секунд, но овчинка выделки не стоит. Вряд ли автор пишет мегасофт. Если софт будет серьезным, никакая защита не помешает.
Работать будет далеко не у каждого - хм. viewtopic.php?p=6613226#p6613226 - там метод получения серийника похожий. В правильности Antonariy я не сомневаюсь.
[/offtopic]

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как узнать заводской номер флэшки?

Сообщение Хакер » 10.01.2010 (Вс) 2:10

awl100Alex писал(а):уже оскорбление

Ай-яй-яй!

двух(!)

Ай-яй-яй-яй-яй-яй!!!

Вообще-то это всё те же уже описанные комплексы: критика решений воспринимается как критика человека.


Вообще-то iGrok абсолютно объективно заметил.

Во-первых, я никогда не забуду твою легендарную тему. Это тема всё показала, уже её одной достаточно.

Но можно поискать твои ответы и найти ещё массу проявлений того, о чём говорил iGrok:
<тут был длинный список, но потом я подумал: а какой смысл, ведь всё равно, просмотрев его, ты ни при каких обстоятельствах не признаешь, что был не прав и советовал людям дрянь>


Что же касается защиты, то это двойная дурь: во-первых, защиты надо делать иными путями, а не ограничивая список возможных расположений исполняемого файла одним лишь флеш-накопителем. Во-вторых, в основе любой защиты лежит здравый принцип: защита имеет смысл, когда затраты на её взлом не окупают затрат на лицензионную версию. Здесь затраты на взлом значительно меньше не только лицензии, здесь они значительно меньше даже просто стоимости флеш-накопителя, без учёта лицензии.

Но мы же самые умные, исповедуем самые правильные подходы, а кто с нами не согласен --- хамы и флудеры...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 14

    TopList  
cron