|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
серийник USB-флешки
как программно узнать серийный номер флешки?
а то есть такая идея, запретить доступ к компу флешек с другими серийными номерами нежели у моей |
#2
|
||||
|
||||
Код:
function GetHardDiskSerial(const DriveLetter: Char): string; var NotUsed: DWORD; VolumeFlags: DWORD; VolumeInfo: array[0..MAX_PATH] of Char; VolumeSerialNumber: DWORD; begin GetVolumeInformation(PChar(DriveLetter + ':\'), nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed, VolumeFlags, nil, 0); Result := Format('VolSer = %8.8X', [VolumeSerialNumber]) end; применять так: ShowMessage(GetHardDiskSerial('c')); |
#3
|
||||
|
||||
спасибо вроде работает! единственное вроде как не будет работать после форматирования флешки(где-то в нете нарыл)
А теперь вопросы номер два и три : 2) как определить момент подключения флешки? 3) как программно отсоединять(извлекать) не нужные мне флешки? |
#4
|
||||
|
||||
Лучше запрет других флешек делать так:
1. удалить из системы информацию о всех ранее установленных флешек ( кроме своей или ее потом подключить и инсталировать ) Это можно сделать - либо программкой USBDeview ( но она вроде не всю информацию удаляет, но может быть достаточно ). - запустить диспечер устройств следующим батником: Код:
echo off set DEVMGR_SHOW_DETAILS=1 set DEVMGR_SHOW_NONPRESENT_DEVICES=1 start devmgmt.msc - либо могу выложить исходники программки ( устанавливается сервисом и удаляет информацию о всех ранее установленных флешках через 10 секунд после извлечения очередной - делал для начальства, чтоб не подсматриволо ). из нее можно выдрать код очистки, но тогда надо либо права System либо ставить разрешение записи для некоторых ветвей реестра ). После первых двух способов надо перезапустить комп, чтобы стерлась инфа из резервной ветки реестра. Врезультате должны остатся зарегистрированными только флешки которые можно пользоваться. 2. Запретить установку новых флешек как описано здесь ( думаю должно сработать, но не пробовал ) 3. Наслаждаться мучениями ( удивлением ) товарищей |
#5
|
||||
|
||||
Цитата:
Код:
procedure TRSAMessForm.FormCreate(Sender: TObject); var NF:TDEV_BROADCAST_DEVICEINTERFACE; begin FNeedExecute := False; NF.dbcc_size:=sizeof(TDEV_BROADCAST_DEVICEINTERFACE); NF.dbcc_devicetype:=DBT_DEVTYP_DEVICEINTERFACE; FDeviceNotification := RegisterDeviceNotification(Handle,@NF,DEVICE_NOTIFY_ALL_INTERFACE_CLASSES); end; { procedure OnDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE; } procedure TRSAMessForm.OnDeviceChange(var Msg: TMessage); begin case Msg.WParam of DBT_DEVICEREMOVECOMPLETE: WaitExec(); DBT_DEVICEARRIVAL: WaitExec(True); DBT_DEVNODES_CHANGED: WaitExec(); end; end; |
#6
|
||||
|
||||
s0Creator, сенкс!
но в исходнике у меня делфа ругается. можешь скинуть целый исходник |
#7
|
||||
|
||||
Лови, написано на D7.
FastMM4 - если у тебя нет просто закоментируй ( использую для выявления утечек памяти ) Если еще какого модуля не хватит - скажи ( у меня некоторые общие в другом месте ). Registry.pas - немного исправленная версия стандартного ( была одна ошибка ). Работает: при запуске спрашивает - установить сервис? если да копирует себя в System32 и запускает сервис. второй запуск - спрашивает удалить сервис? если да удаляет сервис но прога в System32 остается дальше как писал - разбирайся - может просто переделаеш так чтоб запомнила все уже установленные или вывела список и спросила какие оставить а затем удаляла при подключении новой ( но по мне лучше запрет в реестре как написано поссылке ). |
#8
|
||||
|
||||
В догонку несколько нюансов:
- RegisterDeviceNotification работаем только с оконными дескрипторами, поэтому в сервисе создается пустое невидимое окно, которое получает сообщение. - какая то из использованных функций не работает на виндах ниже XP (т.е. 2000 винде ). - отслеживаемые события тебе надо подкоректировать - у меня ищутся фантомы ( установленные но не подключенные флешки ) , тебе надо будет наверное подключенные искать и получать о них информацию только в той инфе вроде нет отдельно серийника но можно получить из строки типа "HardwareID" = USB\Vid_046e&Pid_5540&Rev_0130&MI_01 USB\Vid_046e&Pid_5540&MI_01 но тут могу ошибаться - не использовал |
#9
|
||||
|
||||
friz.
Большое спасибо за плюсик - добавилось 354 бала. Правда не знаю радоваться или сразу готовиться к лишению награды администрацией. Исходники наверное выложу в отдельной теме ( раз с твоей помощью вспомнил о них ) - там много можно для примера взять ( и про сервисы и немного про флешки ) - в свое время изрядно по бороздил инет и MSDN. |
#10
|
||||
|
||||
Спасибо за все!
p.s. + я пока тебе не ставил p.p.s. на форуме поменяли принцип раздачи + |