![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() как программно узнать серийный номер флешки?
а то есть такая идея, запретить доступ к компу флешек с другими серийными номерами нежели у моей ![]() |
#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 секунд после извлечения очередной - делал для начальства, чтоб не подсматриволо ![]() 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. на форуме поменяли принцип раздачи + |