Update: Achtung, seit Windows 10 1709 Fall Creators Update, funktioniert diese Anleitung nicht mehr, weil Microsoft Änderungen an der XML-Struktur der USB-Ereignisse vorgenommen hat!
(Danke an Peter für den Kommentar.)
Für so manche Aufgabe, die man am PC zu erledigen hat, kann es sinnvoll sein, wenn ein Task mittels USB Ereignis-Trigger automatisch gestartet wird, sobald ein bestimmtes Gerät angeschlossen wird. Ich verwende diese Methode hauptsächlich um Backup-Aufgaben zu automatisieren. Sie ist USB-Geräte-spezifisch: Das heißt der Task wird nur dann gestartet, wenn genau das eine von mir definierte USB-Gerät angesteckt wird. Dies wird durch einen USB Ereignis-Trigger mit manuell erstelltem Ereignisfilter erreicht.
Natürlich gibt es für diesen Anwendungsfall einige Tools und Anleitungen im Netz, jedoch möchte ich keine App installieren müssen und keine der Anleitungen mittels Windows 10 Bordmittel hat bei mir funktioniert. Deswegen musste ich mir das ganze genauer anschauen. Vielleicht wird ja dem ein oder anderen dadurch ein bisschen Zeit erspart…
Viel Spaß beim Nachbauen!
Schritt 1: Euer USB-Gerät eindeutig identifizieren:
Startet die Ereignisanzeige und klickt euch durch, bis ihr hier angekommen seid:
Anwendungs- und Dienstprotokolle
Microsoft
Windows
DriverFrameworks-UserMode
Betriebsbereit
Danach klickt ihr auf „Protokoll aktivieren“:
Wenn ihr das erledigt habt, könnt ihr euren USB-Stick anstecken und [F5] drücken sobald er von Windows erkannt wurde, damit die Einträge in der Ereignisanzeige aktualisiert werden.
Nun noch das Event 2006 suchen und den Wert bei „[instance]“ wegkopieren. Er beginnt (glaube ich) immer mit „SWD\…“
Schritt 2: Aufgabe für das ermittelte USB-Gerät anlegen:
Hier der funktionierende USB Ereignis-Trigger, der triggert, wenn ein von euch definierter USB-Stick angesteckt wird:
1 2 3 4 5 |
<QueryList> <Query Id="0" Path="Microsoft-Windows-DriverFrameworks-UserMode/Operational"> <Select Path="Microsoft-Windows-DriverFrameworks-UserMode/Operational">*[System[Provider[@Name='Microsoft-Windows-DriverFrameworks-UserMode'] and EventID=2006]] and *[UserData[UMDFHostAddDeviceEnd[@instance='HIER_EUER_INSTANCE_WERT']]]</Select> </Query> </QueryList> |
Wo „HIER_EUER_INSTANCE_WERT“ steht fügt ihr den Wert ein, den ihr im Event 2006 unter „instance“ gefunden und wegkopiert habt.
Wichtig dabei ist, dass ihr den Wert zuvor HTML-kodiert und erst dann einfügt.
Einen online HTML-Encoder hab ich hier gefunden: https://opinionatedgeek.com/Codecs/HtmlEncoder
(Danach sollten alle „&“ in „&“ umgewandelt worden sein…)
Ich nehme an ihr wisst, wie man eine Aufgabe erstellt, sonst hilft Google hier bestimmt weiter…
Einfach als Trigger „Bei einem Ereignis“ auswählen. Danach auf „Benutzerdefiniert“ und „Neuer Ereignisfilter“ klicken. Reiter „XML“ auswählen und den Hacken bei „Manuell bearbeiten“ setzen:
Zu guter Letzt den angepassten Code einfügen, alles bestätigen, und sich beim ständigen Ein- und Ausstecken der USB-Geräte freuen… 😉
Nachtrag: kurze Erläuterungen für die Erstellung eines spezifischen Ereignisfilters
Rechte Maustaste auf den Eintrag in der Ereignisanzeige, dann auf Kopieren und Details als Text kopieren.
Irgendwo reinkopieren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Protokollname: Microsoft-Windows-DriverFrameworks-UserMode/Operational Quelle: Microsoft-Windows-DriverFrameworks-UserMode Datum: 26.09.2017 12:54:17 Ereignis-ID: 2006 Aufgabenkategorie:Treiber werden geladen, um ein neu erkanntes Gerät zu steuern. Ebene: Ausführlich Schlüsselwörter: Benutzer: Lokaler Dienst Computer: test-lmc Beschreibung: Der UMDF-Host hat den Treiber erfolgreich auf Ebene "0" geladen. Ereignis-XML: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-DriverFrameworks-UserMode" Guid="{2E35AAEB-857F-4BEB-A418-2E6C0E54D988}" /> <EventID>2006</EventID> <Version>1</Version> <Level>5</Level> <Task>33</Task> <Opcode>2</Opcode> <Keywords>0x8000000000000000</Keywords> <TimeCreated SystemTime="2017-09-26T10:54:17.340824900Z" /> <EventRecordID>1752</EventRecordID> <Correlation /> <Execution ProcessID="7492" ThreadID="10012" /> <Channel>Microsoft-Windows-DriverFrameworks-UserMode/Operational</Channel> <Computer>test-lmc</Computer> <Security UserID="S-1-5-25" /> </System> <UserData> <UMDFHostAddDeviceEnd instance="SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_INTENSO&PROD_RAINBOW_LINE&REV_8.07#07A8B9F2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}" lifetime="{7F5313B1-9B11-4120-9D72-7D71B5029D35}" xmlns="http://www.microsoft.com/DriverFrameworks/UserMode/Event"> <Level>0</Level> <FinalStatus>0</FinalStatus> </UMDFHostAddDeviceEnd> </UserData> </Event> |
Hier nochmal der Code für den Ereignis-Filter:
1 |
*[System[Provider[@Name='Microsoft-Windows-DriverFrameworks-UserMode'] and EventID=2006]] and *[UserData[UMDFHostAddDeviceEnd[@instance='SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_INTENSO&PROD_RAINBOW_LINE&REV_8.07#07A8B9F2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}']]] |
Vergleiche die beiden Abschnitte und verstehe die Syntax… 😉
Hier eine detaillierte Anleitung by Microsoft…
Changelog:
- 19.01.2017
- Hinweis zu geändertem Verhalten seit Windows 10 1709 Fall Creators Update und Link zu aktualisiertem Artikel
Hallo David,
ich verwende diese Methode auch um ein selbst erstelltes Backupprogramm auszulösen. Der XML-Filter unterscheidet sich etwas von Ihrem, aber ich habe auch Ihren XML-Filter ausprobiert. Weshalb die Probiererei? Seit dem Upgrade auf WIN10 Version 1709 funktioniert es nicht mehr (auf mehreren Rechnern)! Auch in einem benutzerdefinierten Filter in der Ereignisanzeige kommt kein Ergebnis (mit gleichem XML-Filter). Also liegt der Kern des Problems im XML-Filter. Ich habe schon etliche Zeit damit verbracht, kann aber keine Lösung finden. Ich vermute, es hat sich irgendetwas an der Syntax geändert. Haben Sie das Problem auch schon festgestellt und vielleicht sogar schon eine Lösung?
Mit freundlichen Grüßen
Peter Nerger
Oje, nein ist mir noch nicht aufgefallen. Danke jedenfalls für die Vorwarnung, das werde ich mir ansehen, und den Blog updaten falls nötig. (Natürlich würde ich mich freuen, wenn du eine schon vorher gefundene Lösung hier postest.)
Einen Hinweis kann ich dir aber geben, auch wenn du ihn wsl. eh berücksichtigt hast: Ich habe lange nach einem Fehler in der Syntax meines Filters gesucht, bis ich gemerkt habe, dass es eigentlich an einem fehlenden Hackerl in den Eigenschaften der Aufgabe gelegen hat: Aufgabe nur starten, falls der Computer im Netzbetrieb ausgeführt wird. (Natürlich war der Laptop nicht am Strom)
Hallo David,
an dem Haken liegt es nicht und es ging ja bis zur Version 1703 klaglos auf etwa 10 Rechnern!
mfg
Peter
Hallo David,
ich weiß inzwischen, woran es liegt. Microsoft hat mit der Version WIN10 1709 die XML-Ausgabe bei einem Ereignis verändert. Ich habe die files mal unten angehängt. Der wichtige Teil hier kurz:
alt:
–
–
neu:
–
–
SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_SINGLE&PROD_FLASH_READER&REV_1.00#058F63356336&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
Die InstanceID ist also eine Ebene tiefer gerutscht. Das zieht natürlich eine Änderung an dem Ereignis-Filter nach sich.
Ich habe schon alle möglichen Varianten ausprobiert, aber kriege es nicht zum Funktionieren. Vielleicht hast Du eine Idee?
Viele Grüße
Peter
Alt:
–
–
2101
1
4
37
2
0x8000000000000000
12033
Microsoft-Windows-DriverFrameworks-UserMode/Operational
Server
–
–
–
0x0
0x141b
0x0
0x0
0
neu:
–
–
2100
1
4
37
1
0x8000000000000000
1620
Microsoft-Windows-DriverFrameworks-UserMode/Operational
PNprivat
–
–
{363C71CE-DE3F-41DA-B266-28113E44519A}
SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_SINGLE&PROD_FLASH_READER&REV_1.00#058F63356336&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
27
1
0x0
0x0
0x0
0x0
0
…das ist ja in der Anzeige total durcheinander geraten. Sorry.
Hi Peter,
wsl. hast du es inzwischen bereits selbst gelöst, aber falls nicht: Ich bin endlich dazugekommen mir das näher anzuschauen. Du findest den neuen funktionierenden Ereignisfilter für Versionen von Windows 10 ab 1709 als neuen Artikel hier im Blog.
lg, David
Hallo David,
ja, ich habe es inzwischen selbst gelöst gehabt. Ich hätte es Dir auch verraten, wenn Du Dich zu dem Thema mal gemeldet hättest. Was nach wie vor ärgerlich ist, dass nach jedem Windows Upgrade das Protokoll von DriverFrameworks-UserMode
deaktiviert ist und die Festplattenkennung auch eine andere ist. Man muß also jedesmal neu hinschauen und nacharbeiten. Ich hoffe, Microsoft fällt bald auf, dass da was schiefläuft.
Viele Grüße
Peter
Es sollte bei Punkt 1 Eohl ereignisanzeige heißen nicht aufgabenplanung oder?
Ja richtig, danke fürs Aufmerksam-machen. Habs korrigiert.