Thema: Delphi USB Gerät deaktivieren

Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

USB Gerät deaktivieren

  Alt 21. Jun 2007, 09:38
Hallo!

Für einen u.U. öffentlich zugänglichen Computer soll ich ein Zusatzprogramm entwickeln, dass bestimmte USB-Geräte sperrt. Wichtig dabei ist, dass -im Gegensatz zu bereits bestehenden Lösungen- auch Tastatur und Maus gesperrt werden müssen. Der PC ist ein reines Anzeigesystem und die Steuerung erfolgt zur Wartung mit VNC über das Netzwerk.

Die USB-Ports werden zwar ansich nicht von dem PC gebraucht, so dass man sie im Bios deaktivieren könnte, aber ggf. muss man bei einem Systemfehler mal schnell an das System ran.

Ideal wäre, wenn jedes USB-Gerät eine GUID (wie MAC-Adressen bei Netzwerkkarten) hätte: also nicht eine für die komplette Klasse "Mäuse und Zeigegeräte". Dann könnte man eine bestimmte Maus und eine bestimmte Tastatur freischalten. Der Rest wird blockiert.

Zunächst würde mich auch soetwas langen wie:
Neues USB-Geräte wird angesteckt --> Mein Programm wirft es automatisch wieder aus, es sei denn ...

Mittels der Suchfunktion habe ich auch schon viele theoretisch sinnvolle Codeschnipsel gefunden. Ich kann diese aber leider nicht so kombinieren, dass sie alles das können, was ich brauche.

1) SwissDelphiCenter http://www.swissdelphicenter.ch/de/showcode.php?id=2211 : ...entdecken, ob ein USB Device angeschlossen oder abgezogen wird
--> Netter Code, aber wie kann ich die Geräte wieder auswerfen oder deaktivieren?

2) Jedi VCL JvHidControllerClass von Robert Marquardt
--> Sehr Umfangreich mit Beispielen, aber der Auswerfen-Befehl "Checkout" bewirkt keine Änderungen, ausserdem (wie der Klassenname besagt) funktioniert die Klasse nur für HIDs und nicht für alle USB Geräte.

3) http://www.yeahware.com/ , Demo-Source Enable oder Eject http://www.yeahware.com/download/eject.zip
--> Listet zwar viel Hardware (auch Nicht-USB), aber leider sind da meine USB-Drucker etc. nicht dabei. Deshalb gehe ich von aus, dass die Liste wohl nicht ganz komplett ist. Der Code ist schlecht/gar nicht dokumentiert. Die Eject/Disable Funktion ist so komisch an den TTreeview angepasst, in dem die Hardware steht, dass ich das leider nicht soweit ableiten kann , dass ich die Eject/Disable Funktion z.B. mit einer hDevInfo von 1) oder 2) aufrufen könnte.

Eigentliche Fragen:
Q1) Gibt es für jedes einzelne USB-Gerät auf der Welt eine GUID wie bei den Netzwerkkarten die MAC-Adresse?

Q2) Wie kann ich eine bestimmte Hardware auswerfen/deaktivieren, z.B. mit einer hDevInfo?
Mit dem folgenden kann ich leider nichts anfangen:
Delphi-Quellcode:
  function CM_Request_Device_Eject(dnDevInst: DWord; out pVetoType: TPNPVetoType;
  pszVetoName: PChar; ulNameLength: ULong; ulFlags: ULong): DWord; stdcall;
  external SetupApiModuleName name 'CM_Request_Device_EjectA';
  Mit Zitat antworten Zitat