AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi USB - Autostart dynamisch unterbinden
Thema durchsuchen
Ansicht
Themen-Optionen

USB - Autostart dynamisch unterbinden

Ein Thema von Schwedenbitter · begonnen am 20. Sep 2009 · letzter Beitrag vom 27. Feb 2015
Antwort Antwort
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
444 Beiträge
 
Delphi 12 Athens
 
#1

AW: USB - Autostart dynamisch unterbinden

  Alt 23. Feb 2015, 13:19
Hallo,

ich wollte dieses etwas "angestaubte" Thema noch einmal aufgreifen, da ich zurzeit eine Lösung suche. Nach dem Durcharbeiten des gesamten Threads habe ich verschiedene Sources und Varianten probiert, die aber allesamt nicht zu Erfolg führten.

Der letzte Post scheint sehr vielversprechend zu sein, allerdings benötige ich eine Lösung ohne DLL, also direkt in die Sources eines Formulares eingebettet. Das Problem ist, dass es bei einigen USB-Sticks jedes mal und ohne Probleme funktioniert, Autostart zu unterbinden. Allerdings habe ich hier einige Sticks, bei denen das nur beim ersten Anstecken funktioniert, wenn ich den Stick entferne und nach 5 Sekunden erneut anstecke, wird Autostart ausgelöst. Und das obwohl das Mainform permanent im Vordergrund ist und die Applikation über vollständige Admin-Rechte verfügt. Betriebssystem ist Windows 7 SP1 32 Bit. Woran könnte das liegen?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

  PDevBroadcastHdr = ^TDevBroadcastHdr;
  TDevBroadcastHdr = Packed Record
                       dbcd_size : DWORD;
                       dbcd_devicetype : DWORD;
                       dbcd_reserved : DWORD;
                     end;

var hWndProcHook: HHOOK=0;
    Form1: TForm1;

implementation

{$R *.dfm}

function CallWndProc(Code: integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var pCWP: PCWPSTRUCT;
begin
  if Code >= 0 then
  begin
    Result := CallNextHookEx(hWndProcHook, Code, wParam, lParam);
  end else
  begin
    Result := CallNextHookEx(0, Code, wParam, lParam);
    EXIT;
  end;

  pCWP := pointer(lParam);

  if pCWP^.message = WM_DEVICECHANGE then
  begin
    case pCWP^.wParam of
     $8000 :
       if PDevBroadcastHdr(pCWP^.lParam)^.dbcd_devicetype = $00000002 then
       begin
         //-- Fenster der Hostapplication suchen und an dieses posten,
         //-- oder Host Application speichert Handle vor dem Laden der DLL in
         //-- shared memory oder Registry.
         //-- Elegant wäre hier eine IPC mit einem PIPE Client oder Socket Client
       end;
     $8004 :
       if PDevBroadcastHdr(pCWP^.lParam)^.dbcd_devicetype = $00000002 then
       begin
         //-- Ergo wie oben
       end;
     else
       pCWP.message := WM_NULL; //-- Message vernichten
    end;
  end;
end;

function CreateHook: integer; stdcall;
begin
  hWndProcHook := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, hInstance, 0);
  result := hWndProcHook;
end;

function DeleteHook: integer; stdcall;
begin
  result := Ord(UnhookWindowsHookEx(hWndProcHook));
end;

function StartUp:integer; stdcall;
begin
  result:=0;
end;

procedure DLLEntryPoint(dwReason: DWORD);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: ; //-- IPC init
    DLL_PROCESS_DETACH: ; //-- IPC release
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var HookResult : integer;
begin
  IsMultithread := true;
  DisableThreadLibraryCalls(hInstance);
  DllProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);

  HookResult:=CreateHook;
end;

end.
Devid
Devid Espenschied
Pre-Sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
444 Beiträge
 
Delphi 12 Athens
 
#2

AW: USB - Autostart dynamisch unterbinden

  Alt 27. Feb 2015, 14:04
Hmm, hat das jemand austesten können? Funktioniert die Unterdrückung des USB-Autostarts?
Devid
Devid Espenschied
Pre-Sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz