Перехват подключения USB-Flash
От: SaZaN Россия  
Дата: 16.01.07 08:54
Оценка:
Небходимо перехватить подключение USB-FLASH и отключить USB порт к которому подключена эта флэха. Помогите кто чем может.
Re: Перехват подключения USB-Flash
От: NeuroVirus Россия  
Дата: 16.01.07 10:03
Оценка:
Здравствуйте, SaZaN, Вы писали:

SZN>Небходимо перехватить подключение USB-FLASH и отключить USB порт к которому подключена эта флэха. Помогите кто чем может.


По поводу перехватить — читаем МСДН про сообщение WM_DEVICECHANGE
Re: Перехват подключения USB-Flash
От: Pavel_Agurov Россия  
Дата: 16.01.07 14:24
Оценка:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Panel1: TPanel;
    rgDeviceType: TRadioGroup;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Uses SetupApi;

procedure TForm1.Button2Click(Sender: TObject);
var
  Guid : TGUID;
  PnPHandle: HDevInfo;
  DeviceInfoData : SP_DEVINFO_DATA;
  DeviceInterfaceData: SP_DEVICE_INTERFACE_DATA;
  i : Cardinal;
  Success: LongBool;
  DataT, buffersize: Cardinal;
  buffer : PByte;
Const
  DisplayGuid : TGUID = '{4d36e968-e325-11ce-bfc1-08002be10318}';
  HidGuid     : TGUID = '{745a17a0-74d3-11d0-b6fe-00a0c90f57da}';
  USBGuid     : TGUID = '{36FC9E60-C465-11CF-8056-444553540000}';
begin
 ListBox1.Clear;

 If rgDeviceType.ItemIndex = 0 then begin  // Все устройства
  PnPHandle:= SetupDiGetClassDevs(nil, nil, 0, DIGCF_PRESENT or DIGCF_ALLCLASSES);
 End else begin
  Case rgDeviceType.ItemIndex of
   1: Guid:= DisplayGuid; // Все видеоадаптеры
   2: Guid:= USBGuid;     // Все USB-устройства
   3: Guid:= HidGuid;     // Все HID-устройства
  End;
  PnPHandle:= SetupDiGetClassDevs(@Guid, nil, 0, DIGCF_PRESENT);
 End;

 Try
  i:= 0;
  DeviceInfoData.cbSize:= SizeOf(SP_DEVINFO_DATA);
  DeviceInterfaceData.cbSize := SizeOf(SP_DEVICE_INTERFACE_DATA);
  Repeat
   Success:= SetupDiEnumDeviceInfo(PnPHandle, i, DeviceInfoData);
   If Success then begin
    buffer:= nil;
    buffersize:= 0;
    while not SetupDiGetDeviceRegistryProperty
          (
            PnPHandle,
            DeviceInfoData,
            SPDRP_DEVICEDESC,
            DataT,
            buffer,
            buffersize,
            buffersize
          )
    do begin
     if (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then begin
      if (buffer <> nil) then FreeMem(buffer);
      buffer:= AllocMem(buffersize);
     end else begin
      break;
     end;
    end;

    ListBox1.Items.Add(Format('%d: %s',[i, StrPas(PChar(buffer))]));
    if (buffer <> nil) then FreeMem(buffer);
   End;
   Inc(i);
   Application.ProcessMessages;
  until not Success;


 Finally                                         
  SetupDiDestroyDeviceInfoList(PnPHandle);
 End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// если используется динамическая загрузка библиотеки
// LoadSetupApi;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
// если используется динамическая загрузка библиотеки
// UnloadSetupApi;
end;

end.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.