Erkennen ob USB-Gerät angeschlossen ist

  • Hallo.

    Wenn man ein USB-Stick nicht angeschlossen hat sieht der Eintrag unter [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum]
    so aus:

    "Count"=dword:00000002
    "NextInstance"=dword:00000002

    Wenn man ein USB-Stick aber angeschlossen hat sieht der Eintrag unter [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum]
    so aus:
    "Count"=dword:00000003
    "NextInstance"=dword:00000003

    Und jetzt sollte man doch ein Script erstellen können, das prüft, ob ein Stick dran ist oder nicht.

    Da das ganze ja bereits hier im Forum für eine andere Hardware so cirka gefragt wird, habe ich das mal als neues Thema gemacht, da man sich dann da allg. an Hardware dran oder nicht evtl. halten kann.

    Wer möchte darf gerne Scripte posten, die eine Hardwareprüfung anhand des oberen Unterschiedes durchführt. ACHTUNG ! Es muß geschaut werden ob die Zahl sich erhöht hat. Bei mir steht immer ohne Stick die 2, da ich 2 HDD's drinne habe. Das hat aber nicht jede/r.

    Ich bin gespannt ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Den von dir genannten Reg-Schlüssel würde ich nicht nehmen da es zuviele Fehlerquellen gibt.

    Ich würde eher
    HKLM\SYSTEM\ControlSet001\Control\DeviceClasses\
    benutzen.

    Der gesamte Schlüssel für meinen USB-Stick sieht so aus:
    HKLM\SYSTEM\ControlSet001\Control\DeviceClasses\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\##?#USBSTOR#Disk&Ven_Kingston&Prod_DT_HyperX&Rev_1.00#0018F30C6AF2SK88060A1199&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\#\Control\Linked: 0x00000001

    Soll nur eine bestimmte Hardware (könnte ja auch ein Bluetooth-STICK sein) ist der Weg der sicherste.
    Man erfährt den genauen Schlüssel indem man Regshot benutzt.

    Eine allgemeine Abfrage für jede Hardware sollte so auch möglich sein.

    Soll es nur für USB-Laufwerke sein käme noch dieser Schlüssel in betracht:
    HKLM\SYSTEM\ControlSet001\Services\USBSTOR\Enum\Count: 0x00000001
    Hätte den Vorteil das es unabhängig von installierten Festplatten ist.

    Einmal editiert, zuletzt von Bitboy (4. April 2009 um 18:27)

  • Schaue ich mir beides mal an !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hallo Alina,
    Oscar hatte mal ein Script zum Sperren des PC's via USB-Stick.
    Er verwendete den Reg-Schlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor\Enum
    (wobei 'Enum' nur existiert, wenn ein Usb-Gerät vorhanden ist)

    Hier der Link zu seinem Script

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

    • Offizieller Beitrag

    Hallo,

    Hier noch zwei Möglichkeiten die aktiven USB-Geräte bzw. USB-Massenspeicher-Geräte auszulesen:

    auslesen mit WMI
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Const $wbemFlagReturnImmediately = 0x10
    Const $wbemFlagForwardOnly = 0x20

    [/autoit] [autoit][/autoit] [autoit]

    Local $szComputer = "."
    Local $colItems = ""
    Local $objWMIService = ObjGet("winmgmts:\\" & $szComputer & "\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_USBControllerDevice', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aActiveDevices = "", $aActiveUSBStorDevices = ""
    Local $szActiveDevices = "", $szActiveUSBStorDevices = ""

    [/autoit] [autoit][/autoit] [autoit]

    ; Aktive USB-Geräte auslesen
    If IsObj($colItems) Then
    For $objItem In $colItems
    ; alle USB-Geräte
    $aRegExp = StringRegExp($objItem.Dependent, "(?i).*=""(USB.*\\\\.*)""", 1)
    If IsArray($aRegExp) Then
    If $szActiveDevices <> "" Then $szActiveDevices &= @CRLF
    $szActiveDevices &= $aRegExp[0]
    EndIf
    ; nur USB-Massenspeicher
    $aRegExp = StringRegExp($objItem.Dependent, "(?i).*=""(USBSTOR\\\\.*)""", 1)
    If IsArray($aRegExp) Then
    If $szActiveUSBStorDevices <> "" Then $szActiveUSBStorDevices &= @CRLF
    $szActiveUSBStorDevices &= $aRegExp[0]
    EndIf
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $aActiveDevices = StringSplit($szActiveDevices, @CRLF, 1)
    _ArrayDisplay($aActiveDevices, "aktive USB-Geräte")

    [/autoit] [autoit][/autoit] [autoit]

    $aActiveUSBStorDevices = StringSplit($szActiveUSBStorDevices, @CRLF, 1)
    _ArrayDisplay($aActiveUSBStorDevices, "aktive USB-Massenspeicher")

    [/autoit]
    auslesen mit DEVCON.EXE
    [autoit]


    #include <Array.au3>
    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $szComputer = "."
    Local $aActiveDevices = "", $aActiveUSBStorDevices = ""

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Aktive USB-Geräte auslesen
    $PID = Run(".\devcon.exe -m:\\" & $szComputer & " find @USB*", "", @SW_HIDE, $STDOUT_CHILD)
    $szStdOut = ""

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $szStdOut &= StdoutRead($PID)
    If @error Then ExitLoop
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    $aActiveDevices = StringRegExp($szStdOut, "(?i)(USB.*\\\S*)\s*:", 3) ; alle aktiven USB-Geräte
    $aActiveUSBStorDevices = StringRegExp($szStdOut, "(?i)(USBSTOR\\\S*)\s*:", 3) ; alle aktiven USB-Massenspeicher-Geräte

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aActiveDevices, "aktive USB-Geräte")
    _ArrayDisplay($aActiveUSBStorDevices, "aktive USB-Massenspeicher")

    [/autoit]


    Die DEVCON.EXE muss im gleichen Verzeichnis vorhanden sein.

  • Danke schön !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr