четверг, 20 февраля 2014 г.

Описание API библиотеки мини-HASP ключа из любого USB-устройства

Данная библиотека* предназначена для получения идентификаторов VID/PID/серийного имени и Frendly- имени устройств, подключенных по USB-интерфейсу, средствами SetupAPI в ОС NT/2000/2003/XP/7/8, отключения всех или выбранных USB-накопителей, а также блокирования машины (клавиатуры и мыши) при активации функции контроля по серийному номеру.

Cистемные требования и зависимости:
  1. Win32/64 (NT/2003/XP/7/8/10).
  2. Модуль 'mhasp.pas' для коммерческого использования под любые версии Delphi предоставляется по запросу.
  3. mHASP - является третьей версией библиотеки, опубликованной в ж.Радиолюбитель, 2008, №8, с.16. Первая версия более не предоставляется и не поддерживается.
 
Библиотека обеспечивает:
  1. Отображение списка, подключенных на текущий момент времени, серийных номеров и имени устройств на USB- портах в виде [SERIAL] [NAME].
  2. Отображение списка подключаемых и отключаемых (на момент событий) устройств любого типа (HID, CDC, виртуальный COM, накопителей) в виде [VID] [PID] [SERIAL] [NAME] на USB- портах.
  3. Отображение списка подключаемых и отключаемых (на момент событий) устройств только накопительного типа в виде [VID] [PID] [SERIAL] [NAME] [статус] на USB- портах.
  4. Отключение (деинициализацию) всех или выбранных накопителей на USB-портах, при условии закрытых хэндлов файлов на накопителе(ях).
  5. Блокировку клавиатуры и мыши при активации функции контроля по серийному номеру.
Внешние свойства и методы компонента (модуля 'mhasp') представлены в таблице:

 

 
Пример динамического подключения модуля 'mhasp' (Delphi 6/7/2006/2009/2010/TDL):
uses mhasp, remove_usb;

 public
    procedure hList_SUSB(Sender: TObject; ListSer{, ListName}: TStringList);
    procedure hChange(Sender: TObject; VID, PID: Word; const Serial,
      GUID,NAME: string; Operation: TDeviceOperation);
    procedure hType(Sender:TObject; VID,PID:Word; const Serial,
      GUID,NAME,Logical_volume:string; Operation:TDeviceOperation);
  end;

var h: TDUSB;

{ инициализация }
begin
 h:= TDUSB.Create(nil);
 h.OnChange:= hChange;
 h.List_SUSB:= hList_SUSB;
 h.OnType   := hType;
...

{ деинициализация }
begin
 FreeAndNil(h);
...

{ пример использования }
procedure TForm1.hList_SUSB(Sender: TObject; ListSer, ListName: TStringList);
var i: integer;
begin
 // текущие подключенные USB-устройства [SERIAL] [NAME]
 memo1.Clear;
 for i := 0 to ListName.Count - 1 do begin
  memo1.Lines.add(ListSer[i] + // Serial
                  #9 +
                  ListName[i]) // FrendlyName
 end;
 //memo1.lines.Assign(ListSer)
end;

procedure TForm1.hChange(Sender: TObject; VID, PID: Word; const Serial,
  GUID,NAME: string; Operation: TDeviceOperation);
begin
 // отображение подключения-отключения USB-устройств [VID] [PID] [SERIAL] [NAME]
 case Operation of
  doinsert: memo2.Lines.Add(format('Вставили VID=%d, PID=%d, Serial=%s, Name=%s', [vid, pid, serial, name]));
  doremove: memo2.Lines.Add(format('Вытыкнули VID=%d, PID=%d, Serial=%s, Name=%s', [vid, pid, serial, name]));
 end
end;

procedure TForm1.hType(Sender:TObject; VID,PID:Word; const Serial,
  GUID,NAME,Logical_volume:string;Operation:TDeviceOperation);
begin
 // отображение подключения-отключения USB-накопителей [VID] [PID] [SERIAL] [NAME] [статус]
 case Operation of
  doinsert: memo3.Lines.Add(format('Вставили VID=%d, PID=%d, Serial=%s, Name=%s, Тип=%s', [vid, pid, serial, name, Logical_volume]));
  doRemove: memo3.Lines.Add(format('Вытыкнули VID=%d, PID=%d, Serial=%s, Name=%s, Тип=%s', [vid, pid, serial, name, Logical_volume]));
 end
end;

{ пример отключения всех накопителей с получением списка подключенных }
begin
 removeUSB(true, -1, memo1.lines);
...

{ пример отключения накопителя под нулевым номером в списке подключенных }
begin
 removeUSB(true, 0, memo1.lines);
...

{ пример получения списка накопителей без отключения }
begin
 removeUSB(false, -1, memo1.lines);
...
ПОРЯДОК ИСПОЛЬЗОВАНИЯ БИБЛИОТЕКИ
  1. Для HID-устройств и устройств CDC-типа, а также виртуальных COM-портов - серийный номер отсутствует.
  2. Не все накопители имеют серийный номер, к примеру некоторые флешки от LG.
  3. Для возможности отключения всех или выбранных накопителей, хэндлы файлов на них должны быть закрыты.
  4. При активации режима проверки серийного номера подключаемого USB-устройства (флешки), блокировка клавиатуры и мыши осуществляется постоянным вызовом в потоке функции BlockInput() из системной библиотеки 'user32.dll'. Эффект заключается в том, что при постоянном зажатии клавиш 'Ctr'+'Alt'+'Del' диспетчер задач вызывается, но клавиатура и мышь блокируются постоянно, следовательно снять процесс не представляется возможным.
  5. Для использования модуля mHASP в приложениях контроля доступа в безопасном (safemode) режиме следует использовать ключи однократного запуска с их восстановлением:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
Это дает возможность запуститься приложению в защищенном режиме, после этого ключи однократного запуска очищаются, для сохранения возможности такого запуска - данные ключи следует заполнять заново, скажем, после закрытия приложения.


* Библиотека mHASP (далее mHASP или просто библиотека) - является коммерческой разработкой и предоставляется "as is" без права модификации и декомпиляции. Используя библиотеку вы соглашаетесь с условиями лицензионного соглашения.
Ресурсы по тематике
  1. Мини-HASP ключ из любого USB-устройства
  2. Пример работы с HASP-ключом iButton USB reader
  3. Система управления доступом на базе iButton+NFC/RFID ридера из нано-буратины

1 комментарий:

  1. BlockInput не работает в Windows 7? Ути-пути )))
    SetupAPI. Кому лень заглянуть в исходники devcon по отключению/подключению устройств - пользуйте его параметры командной строки, пример: devcon disable "@usb\root_hub20\4&29c2c6ea&0"

    ОтветитьУдалить

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.