AutoRun beim Entfernen

USBDLM

 

AutoRun beim und nach dem Entfernen


 

Analog zur AutoRun-Funktion kann USBDLM beim "Vorbereiten zum sicheren Entfernen" sowie nach dem Entfernen eines Laufwerks eine Kommandozeile ausführen.

 

Um wirksam zu werden, muss das betreffende Gerät neu angeschlossen oder der USBDLM-Dienst neu gestartet werden.

 

 

1. Beim Vorbereiten zum sicheren Entfernen

 

Wird ein USB-Laufwerk über "Hardware sicher entfernen" abgemeldet, hat USBDLM noch Gelegenheit, auf diese Anfrage zu reagieren, während das Laufwerk noch verfügbar ist.

Zu lange sollte das Ausführen des Kommandos nicht dauern, die maximale Dauer die USBDLM zugesteht beträgt 10 Sekunden. Ist der gestartete Prozess dann noch nicht beendet, wird die Anfrage zum "Sicheren Entfernen" durch USBDLM zurückgewiesen, Windows meldet dann "USBDLM verhindert das Entfernen".

XP würde bis zu 30, Vista und Win7 bis zu 15 Sekunden warten.

 

Beispiele

 

Kopieren der Datei c:\text.txt in das Verzeichnis \backup auf dem zu entfernenden Laufwerk (die 10 ist wie immer eine beliebige Zahl von 1 bis 99):

 

[OnRemovalRequest]

open="%windir%\System32\cmd.exe" /c copy "C:\test.txt" %drive%\backup

 

Das Gleiche, aber nur wenn Laufwerk X: "sicher entfernt" wird

 

[OnRemovalRequest]

Letter=X

open="%windir%\System32\cmd.exe" /c copy "C:\test.txt" %drive%\backup

 

 

Wie oben, aber nur wenn die Datei \backup\test.txt bereits auf dem Laufwerk vorhanden ist

 

[OnRemovalRequest]

FileExists=%drive%\backup\test.txt

open="%windir%\System32\cmd.exe" /c copy "C:\test.txt" %drive%\backup

 

 

 

Ein TrueCrypt-Laufwerk auf T: unmounten, wenn die Datei geheim.tc auf dem zu entfernenden Laufwerk vorhanden ist:

 

[OnRemovalRequest]

FileExists=%drive%\geheim.tc

open="%ProgramFiles%\TrueCrypt\TrueCrypt.exe" /q /d T

 

Leider muss man den Laufwerksbuchstaben des TrueCrypt-Laufwerks kennen. Anhand des TrueCrypt-Containers (also Partition oder Datei) unmounten wäre technisch kein Problem - leider ist das bei TrueCrypt nicht vorgesehen.

 

 

Bei langwierigen Operationen ist es besser, eine Batch-Datei zu schreiben, die alles Nötige erledigt und abschließend das Laufwerk zum sicheren Entfernen vorbereitet - dafür gibt's mein Kommandozeilentool RemoveDrive:

http://www.uwe-sieber.de/drivetools.html#removedrive

 

 

Um ein laufendes Programm zu schließen, das auf das zu entfernende Laufwerk zugreifet, kann man das ab XP verfügbare Kommando tskill nutzen.

 

Beispiel zum Beenden eines Prozesses, der auf das Laufwerk zugreift und etwas warten, bis das erledigt ist:

 

[OnRemovalRequest]

Letter=X

open=tskill MeinProzess

afterdelay=2000

 

Einen Prozess abzuschießen ist aber nicht nett - der freundliche Weg ist, eine WM_CLOSE-Nachricht an das betreffende Anwendungs-Fenster zu senden.

USBDLM kann das betreffende Fenster anhand dessen Texts (Titelzeile) und (optional) dessen Fenster-Klasse finden.

Falls die zu schließende Anwendung nach Schließen des Fensters noch etwas Zeit braucht, kann USBDLM bis zu vier Sekunden warten.

 

Beispiel: Beim Versuch, Laufwerk X: abzumelden den Taschenrechner beenden und sicherheitshalber eine Sekunde warten:

 

[OnRemovalRequest]

Letter=X

CloseWindowText=Calc

CloseWindowClass=SciCalc

afterdelay=1000

 

Wildcards können verwendet werden, falls die Titelzeile des Fensters variabel ist:

 

[OnRemovalRequest]

Letter=X

CloseWindowText=* - Notepad

CloseWindowClass=Notepad

afterdelay=2000

 

Die Fensterklasse kann z.B. mit meinem Tool WinInfo ermittelt werden:

http://www.uwe-sieber.de/files/wininfo.zip

 

 

 

2. Beim Fehlschlagen des Vorbereitens zum sicheren Entfernen

 

Wenn noch auf das zu entfernende Laufwerk zugegriffen wird, schlägt das "sichere Entfernen" fehl. Man kann dann z.B. eine gelöschte Freigabe wiederherstellen:

 

[OnRemovalFailed]

Letter=U

open=net share Stick_U=U:\

system=1

 

Mit system=1 wird es im Kontext "LocalSystem" ausgeführt, so dass es die benötigten Rechte hat, auch wenn der Nutzer kein Admin ist. Zu sehen ist dann nichts, da "LocalSystem" einen eigenen Desktop hat.

 

 

3. Nach dem Entfernen

 

Beispiel: Laufwerk A: wurde entfernt, ein anderes Laufwerk soll auf den frei gewordenen Buchstaben gemountet werden:

 

[OnRemoval]

Letter=A

open=mountvol A: \\?\Volume{433619ea-c6ea-11d9-a3b2-806d6172696f}\

system=1

 

MountVol ist ein Kommandozeilentool das ab Windows 2000 verfügbar ist.

 

Ab V5.2.5 gibt es ausserdem OnSafeRemoval und OnUnsafeRemoval:

 

[OnUnsafeRemoval]

open="%WinDir%\System32\mplay32.exe" /play /close "%WinDir%\Media\chord.wav"

windowstyle=hidden

 

mplay32.exe gab es nur bis XP, ab Vista brauch man zusätzliche Software, ein VB-Script oder die Powershell um eine WAV-Datei abzuspielen ohne mit einem offenen Player zu enden.

 

Man kann auch die USBDLM_usr.exe nutzen, um eine Message-Box anzuzeigen:

 

[OnUnsafeRemoval]

open="%USBDLMPATH%\USBDLM_usr.exe" -msgbox -type:0 -icon:48 -title:Warnung -text:%BusType%-Gerät '%FriendlyName%' wurde brutal entrissen

 

 

Einschränkung

 

Alle beschriebenen Ereignisse beim Entfernen werden nur für Laufwerke ausgelöst, die mindestens 5 Sekunden lang angeschlossen waren.