Серийный номер 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.
Код, конечно, грубоват, но собран на коленке. Главное – работает. Пользуйтесь, если нужно:
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-накопителей. Выберите каталог, соответствующий названию флешки, серийный номер которой требуется узнать.
Серийный номер флеш-накопителя при необходимости можно узнать при помощи встроенного инструментария ОС или же специализированного софта. Применение решений от сторонних разработчиков проще, но требует скачивания на компьютер. Для использования в этих целях системного реестра не требуется загрузки никаких дополнительных элементов, но этот вариант несколько сложнее, чем предыдущий.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Серийный номер 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 секунд: и еще. предупрежу сразу. если обе вариации неопределят подткнутой флешки..скачай другие версии. должно помочь. |
Последний раз редактировалось: Лесник (17 Сен 2010, 19:26), всего редактировалось 2 раз(а) detector |