Progress-servis55.ru

Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Серийный номер usb флешки

Узнать серийный номер флешки

Как-то встала передо мной задача – написать программу-сторож, позволяющую использовать только разрешенные USB-флешки на определенных компьютерах. Привязку решил делать к серийному номеру, а так же VID и PID флешки (Vendor ID и Part ID), что в общем случае можно считать уникальной информацией.

Я сейчас не рассматриваю способы перепрошивки флешек под произвольный VID, PID, Serial, это всё можно сделать, подобрав соответствующую утилитку под производителя контроллера.

Итак, нависла задача узнать всю нужную информацию. Сейчас я не буду рассматривать разработку целого приложения, покажу лишь основную функцию. Буду даже рад, если кто-то поможет доработать программу. Да и сам я буду постоянно улучшать и модернизировать этот код.

Итак, для выбора данных воспользуемся моим любимым WMI (Windows Management Instrumentation). Почему оно мне нравится? Да потому что все работает “из коробки”, не нужно устанавливать дополнительные программы и компоненты и есть множество классов.

Вот видео по теме:

Как работать с технологией – посмотрите по тегам WMI, WMIC, а я повествую дальше.

Выковыривать данные будет из строки идентификатора устройства, которая выглядит как-то так:

В этой строке есть VID, PID и серийный номер после второй косой черты.

Важно не перепутать серийный номер флешки и серийный номер тома. Последний (можно получить командой dir) меняется при форматировании флешки и никак не годится для уникальной идентификации.

Механизм получения серийного номера флешки

Теперь задача – получить строку эту.

Средствами WMI мы получаем эту информацию из класса Win32_usbhub , объявленного в пространстве \rootcimv2

Итак, запускаем командную строку, там программу wmic.

Пишем там команду выбора поля DeviceID из класса Win32_usbhub . Забегая вперед скажу, что выдастся много устройств (корневые концентраторы, мышь и т.д.,) поэтому я сразу напишу фильтр по запоминающим устройствам.

wmic:rootcli>path win32_usbhub Where (Caption=»Запоминающее устройство для USB») get DeviceID

wmic path get where

Вот и получили наши заветные строки. Парсить их придется уже другими средствами.

Кстати, вот наработка на Delphi, кому-то может это пригодится.

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
lst1: TListBox;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
var
Form1: TForm1;
implementation
<$R *.dfm>
uses ActiveX, ComObj;
procedure TForm1.btn1Click(Sender: TObject);
Var Enumerator: IEnumVariant;
WbemLocator, WbemServices, WbemObjectSet: Variant;
Properties: IEnumVariant;
Property_, System: OleVariant;
j: LongWord;
sProperty: string;
VID,PID,Serial: ShortString;
begin
lst1.Clear;
WbemLocator := CreateOleObject(‘WbemScripting.SWbemLocator’);
WbemServices := WbemLocator.ConnectServer;
WbemObjectSet := WbemServices.InstancesOf(‘Win32_usbhub‘);
Enumerator := IEnumVariant(TVarData(WbemObjectSet._NewEnum).VDispatch);
try
while Enumerator.Next(1, System, j) = S_OK do
try
try
if (System.Caption <> ‘Запоминающее устройство для USB‘) then Continue;
except end;
Properties := IEnumVariant(TVarData(System.Properties_._NewEnum).VDispatch);
while Properties.Next(1, Property_, j) = S_OK do
begin
sProperty := VarToStr(Property_.Value);
if (Property_.Name = ‘DeviceID’) then
begin
V ,sProperty)+4,4);
P ,sProperty)+4,4);
Serial := Copy(sProperty, Pos(‘PID_’,sProperty)+9,Length(sProperty)-Pos(‘PID_’,sProperty)+10);
if ((Pos(»,Serial) > 0)) then
Begin
Serial := Copy(Serial,Pos(»,Serial)+1,Length(Serial)-Pos(»,Serial));
end;
lst1.Items.Add(‘VID: ‘+ VID + ‘ PID: ‘ + PID + ‘ SERIAL: ‘ + Serial);
end;
end;
except end;
except end;
end;
end.

Читать еще:  Usb show скачать для открытия флешки

Код, конечно, грубоват, но собран на коленке. Главное – работает. Пользуйтесь, если нужно:

Delphi

Скачать проект с исполняемым файлом можно по ссылке

Таким образом, используя WMI мы получили серийный номер флешки, а так же дополнительную информацию в виде VID и PID.

А можно ли как-нибудь изменить серийный номер флешки?

Да, можно. Есть программы-прошивальщики (под каждый чип своя программа), которые можно использовать для изменения серийного номера и VID PID идентификаторов. Например, для чипов Alcor я использую Alcor Change Vid Pid Rework.

Смена серийного номера флешки Смена серийного номера флешки Смена серийного номера флешки

Сменить серийный номер флешки несложно. Подключаем флешку, выбираем её в порту в списке. Нажимаем Setup (открывается окно на фотках выше) вводит нужные VID PID и SN и жмём кнопку START. Флешка готова через секунду с новым серийным номером.

Кстати, я уже писал ранее, как можно отформатировать флешку в ntfs – это может оказаться полезным!

Друзья! Вступайте в нашу группу Вконтакте, чтобы не пропустить новые статьи! Хотите сказать спасибо? Ставьте Like, делайте репост! Это лучшая награда для меня от вас! Так я узнаю о том, что статьи подобного рода вам интересны и пишу чаще и с большим энтузиазмом!

Также, подписывайтесь на наш канал в YouTube! Видео выкладываются весьма регулярно и будет здорово увидеть что-то одним из первых!

Узнаем серийный номер флешки

Потребность узнать серийный номер флешки возникает не так часто, но, иногда это все же происходит. Например, при постановке для каких-то целей USB-устройства на учет, для повышения безопасности ПК или просто для того, чтобы удостовериться, что вам не подменили носитель на аналогичный по виду. Это связано с тем, что каждая отдельная флешка имеет уникальный номер. Далее мы подробно разберемся, как можно решить поставленную в теме статьи задачу.

Способы определения серийного номера

Серийный номер USB-накопителя (InstanceId) прописан в его программном обеспечении (прошивке). Соответственно, если вы перепрошьете флешку, этот код поменяется. Узнать его можно, использовав либо специализированное ПО, либо же воспользовавшись встроенными средствами Виндовс. Далее мы пошагово рассмотрим действия при применении каждого из данных методов.

Способ 1: Сторонние программы

Прежде всего, рассмотрим порядок действий при использовании стороннего ПО. Он будет показан на примере утилиты USBDeview от компании Nirsoft.

    Подключите флешку к USB-разъему ПК. Скачайте по ссылке выше и распакуйте архив ZIP. Запустите находящийся в нем файл с расширением EXE. Утилита не требует инсталляции на ПК, а поэтому ее рабочее окно тут же откроется. В отобразившемся перечне устройств отыщите наименование нужного носителя и щелкните по нему.

Читать еще:  Антивирус на флешке без установки

Способ 2: Встроенные инструменты Виндовс

Как говорилось выше, узнать серийный номер USB-накопителя можно также используя исключительно встроенные инструменты ОС Виндовс. Сделать это можно при помощи «Редактора реестра». При этом совсем не обязательно, чтобы флешка была подключена к компьютеру в данный момент. Достаточно и того, что она когда-либо ранее подсоединялся к этому ПК. Дальнейшие действия будет описаны на примере Windows 7, но этот алгоритм подойдет и для других систем данной линейки.

    Наберите на клавиатуре Win+R и в открывшемся поле введите такое выражение:

Затем щелкните «OK».

Далее последовательно перейдите в ветки «SYSTEM», «CurrentControlSet» и «Enum».

Затем откройте раздел «USBSTOR».

Откроется перечень папок с наименованием когда-либо подключаемых к данному ПК USB-накопителей. Выберите каталог, соответствующий названию флешки, серийный номер которой требуется узнать.

  • Откроется вложенная папка. Именно её наименование без последних двух символов (&0) и будет соответствовать искомому серийному номеру.
  • Серийный номер флеш-накопителя при необходимости можно узнать при помощи встроенного инструментария ОС или же специализированного софта. Применение решений от сторонних разработчиков проще, но требует скачивания на компьютер. Для использования в этих целях системного реестра не требуется загрузки никаких дополнительных элементов, но этот вариант несколько сложнее, чем предыдущий.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    Серийный номер usb флешки

    Здравствуйте. Мне необходимо получить серийный номер флэш карты. Подскажите как его получить.
    Заранее спасибо.


    Lacmus © ( 2007-09-19 18:09 ) [1]

    На всякий случай, Вы его где-то видели ?


    palva © ( 2007-09-19 22:11 ) [2]

    Наверно, ему нужен серийный номер тома, который выдается среди прочего, если выдать команду dir


    Sairex © ( 2007-09-20 17:11 ) [3]

    Хех. мне нужно просто привязать программу к флэшке. Если подскажите как то буду очень рад


    Lacmus © ( 2007-09-20 20:22 ) [4]

    Lacmus © (16.09.07 16:51) [8]

    Для флеш-диска последняя часть PNPDeviceID — серийный номер

    Должен быть метод определения попроще, на данный момент не знаю.


    mr.Bear ( 2007-09-21 12:18 ) [5]

    Посмотрите в реестре ветку HKEY_LOCAL_MACHINESYSTEMControlSet001EnumUSBSTOR

    Для каждого нового устройства внутри этой ветки создается раздел. Внутри каждого раздела есть параметры FriendlyName, Hardware >Для простенькой защиты сойдет.


    DC-AC ( 2007-09-21 12:36 ) [6]

    У меня, например, в Win98, в ветке HKEY_LOCAL_MACHINEEnumSCSI есть инфа, что когда-либо были подключены такие накопители (HardwareID, других вышеназванных параметров у меня НЕТ):

    И что же здесь уникального .


    mr.Bear ( 2007-09-21 12:46 ) [7]

    Помогите определить серийный номер флэшки? [D6, D7, Win2k, WinXP]
    в 98 естественно параметров нет. для простенькой защиты сойдет.
    Серьезная защита предполагает серьезные исследования и денежные вложения, используйте аппаратные ключи типа Aladdin, Guardant

    Читать еще:  Флеш не форматируется защищена от записи


    Lacmus © ( 2007-09-21 13:04 ) [8]

    >mr.Bear (21.09.07 12:18) [5]

    «Внук» HKEY_LOCAL_MACHINESYSTEMControlSet001EnumUSBSTOR и есть серийный номер


    Lacmus © ( 2007-09-21 16:40 ) [9]

    На основе http://delphimaster.net/view/1-1189944571/

    const
    SetupApi = «SetupApi.dll»;

    type
    HDEVINFO = THandle;

    PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;
    SP_DEVINFO_DATA = packed record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: DWORD;
    Reserved: DWORD;
    end;

    function SetupDiGetClassDevsA(ClassGuid: PGUID; Enumerator: PChar; hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall; external setupapi;
    function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO; MemberIndex: DWORD; DeviceInfoData: PSP_DEVINFO_DATA): boolean; stdcall; external setupapi;
    function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): boolean; stdcall; external setupapi;
    function CM_Get_Device_ID_Size(pulLen: PDWORD; dnDevInst: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi;
    function CM_Get_Device_IDA(dnDevInst: DWORD; Buffer: PChar; BufferLen: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi;

    const
    CR_SUCCESS = $00000000;

    function GetDeviceName(aDevInst: THandle): string;
    var
    IDLen: Integer;
    begin
    Result := «»;
    if (CM_Get_Device_ > 0) then begin
    SetLength(Result, IDLen);
    if CM_Get_Device_IDA(aDevInst, PChar(Result), IDLen + 1, 0) <> CR_SUCCESS then
    Result := «»
    end
    end;

    procedure EnumDiskDrive;
    const
    GU > (D1: $4D36E967; D2: $E325; D3: $11CE; D4: ($BF, $C1, $08, $00, $2B, $E1, $03, $18));
    var
    hDevInfoSet: HDEVINFO;
    DevInfo: SP_DEVINFO_DATA;
    i: Integer;
    begin
    DevInfo.cbSize := sizeof(SP_DEVINFO_DATA);
    hDevInfoSet := SetupDiGetClassDevsA(@GUID_DEVCLASS_DISKDRIVE, nil, 0, 2);
    i := 0;
    if hDevInfoSet <> INVALID_HANDLE_VALUE then begin
    while (SetupDiEnumDeviceInfo(hDevInfoSet, i, @DevInfo)) do begin
    ShowMessage(GetDeviceName(DevInfo.DevInst));
    Inc(i)
    end;
    SetupDiDestroyDeviceInfoList(hDevInfoSet);
    end
    end;

    procedure TForm69.Button1Click(Sender: TObject);
    begin
    EnumDiskDrive
    end;


    Sairex © ( 2007-09-22 14:04 ) [10]

    Хммм интересно. попробую , если все получиться то напишу

    Серийный номер usb флешки

    Добавлено спустя 38 секунд:

    mp750 опередил редиско)

    Добавлено спустя 3 минуты 39 секунд:

    как посмотреть vin-pid говорить небуду.
    если сам непоймешь- лучше дальше не лезть._____________________________
    Вместо этих интересных слов скажу :

    МЕНЬШЕ ЗНАЕШЬ,КРЕПЧЕ СПИШЬ.

    В начало
    17 Сен 2010, 13:09 —>Ссылка : Ответить с цитатой
    Возраст: 34
    C нами с 27.05.2009
    Репутация: 50.4
    VID&PID: Vid_13fe&Pid_1d00

    а по поводу модели я чтот не понял. и как определить чип тож не понял.

    В начало
    17 Сен 2010, 13:26 —>Ссылка : Ответить с цитатой
    Возраст: 30
    C нами с 01.03.2006
    Репутация: 157.9
    поздравляю у тебя контроллер Phison.
    как я его ненавижу . его пихают обычно в китай и дешевые флешки.
    попробуй http://flashboot.ru/index.php?name=Files&op=view_file&l > сначала запускаешь утилиту, потом втыкаешь флешку.
    если не определится попробуй другие версии проги..их там много.
    к сожалению точнее назвать модель контроллера немогу. нада флешку разбирать.

    Добавлено спустя 5 минут 38 секунд:

    и еще. предупрежу сразу.
    утилита криворукая.
    там должны быть 4 экзешника
    первые 2 создают ини файл(ParamEdt)
    вторые 2 форматируют.
    всегда пользовался F1-*
    F2 неопределяло флешки.

    если обе вариации неопределят подткнутой флешки..скачай другие версии. должно помочь.

    Последний раз редактировалось: Лесник (17 Сен 2010, 19:26), всего редактировалось 2 раз(а)
    _____________________________
    Вместо этих интересных слов скажу :

    Ссылка на основную публикацию
    Adblock
    detector