Einstellungen
Die im Folgenden beschriebenen Einstellungen sind in der USBDLM.INI im Abschnitt [Settings] einzutragen.
In den Beispielen wird immer wieder aufs Neue der Abschnitt [Settings] genannt. Damit ist natürlich der eine gemeinsame Abschnitt gemeint. Auch mit USBDLM V5 kann es nur einen geben...
Die Einstellungen werden ab V4.2 bis auf wenige Ausnahmen sofort wirksam.
Laufwerks-Buchstaben beim Start überprüfen
Die gemachten Laufwerks-Einstellungen werden standardmäßig bei Start des USBDLM-Dienstes überprüft, um auch beim Booten bereits angeschlossene Laufwerke zu erfassen.
Soll USBDLM das nicht tun:
[Settings]
CheckLettersOnStartup=0
Konflikte mit Netz-Laufwerken können hier nicht ohne weiteres behoben werden, da diese zu diesem Zeitpunkt noch nicht vorhanden sind und USBDLM nicht in die Zukunft blicken kann... Außerdem würde das Anlegen der Netzlaufwerke eh fehlschlagen, wenn der jeweilige Buchstaben schon besetzt ist.
Künftige Netz-Laufwerke, die hier berücksichtigt werden sollen, müssen deshalb im Abschnitt [NetworkLetters] eingetragen werden.
Laufwerks-Buchstaben beim Nutzer-Login / Nutzerwechsel überprüfen
Die konfigurierten Laufwerks-Einstellungen werden standardmäßig beim Wechsel des aktiven Nutzers überprüft, um nutzerabhängige Konfigurationen zu berücksichtigen.
Soll USBDLM das nicht tun:
[Settings]
CheckLettersOnLogon=0
Laufwerks-Buchstaben beim Aufwachen aus Standby und Ruhezustand überprüfen
Bei manchen Windows-Installationen kommen nach dem Aufwachen aus Standby und Ruhezustand ("Resume") die Laufwerksbuchstaben durcheinander. USBDLM kann dann die Buchstaben überprüfen, normalerweise ist das aber nicht nötig.
Soll USBDLM beim Resume die Buchstaben überprüfen:
[Settings]
CheckLettersOnResume=1
AutoRuns bei Nutzer-Login / Nutzerwechsel ausführen
Die konfigurierten OnArrival-Ereignisse werden standardmäßig nur beim Anschließen eines Laufwerks bzw. Einlegen eines Datenträgers überprüft und ggf. ausgeführt.
Soll USBDLM AutoRuns auch beim Login oder Nutzerwechsel ausführen:
[Settings]
AutoRunOnLogon=1
Beim automatischen Logon ist der USBDLM-Dienst möglicherweise noch nicht gestartet, da XP nicht auf den Start aller Dienste wartet - die Illusion vom schnellen Windows-Start hat Vorrang. USBDLM verpasst so das Logon-Ereignis.
Deshalb führt USBDLM beim Dienst-Start die AutoRuns dennoch aus, wenn seit dem Systemstart weniger als zwei Minuten vergangen sind und bereits ein Nutzer eingeloggt ist, es sich also offenbar um einen verpassten Logon handelt.
Die Zeitspanne innerhalb der USBDLM von einem verpassten Logon ausgeht kann in Millisekunden konfiguriert werden:
[Settings]
AssumeMissedLogonMaxTime=120000
Sichere Kommandozeilen
Bei Kommandozeilen die Leerzeichen enthalten und die ausführbare Datei nicht in Anführungszeichen eingeschlossen ist, muss USBDLM raten, wo die ausführbare Datei endet und die Parameter beginnen. Das funktioniert zwar, ist aber unsicher.
Beispiel:
open=C:\Program Files\tool.exe
Hier kann als ausführbare Datei C:\Program Files\tool.exe ohne Parameter gemeint sein, oder aber C:\Program.exe mit Files\tool.exe als Parameter.
USBDLM würde zwar C:\Program Files\tool.exe ausführen, aber es gibt schwierigere Fälle wo es auch mal daneben gehen könnte.
Mit SafeCommandLines=1 akzeptiert USBDLM keine Kommandozeilen, die Leerzeichen enthalten, die ausführbare Datei aber nicht in Anführungsstriche eingeschlossen ist:
Beispiele für ungültige Kommandozeilen:
open=C:\Program Files\tool.exe
open=C:\Tools\tool.exe -x
Obige Kommandozeilen gültig:
open="C:\Program Files\tool.exe"
open="C:\Tools\tool.exe" -x
Default ist 0 um Probleme mit vorhandenen Konfigurationen zu vermeiden, in der von _edit_ini.cmd angelegten USBDLM.ini steht's für neue Nutzer aber auf 1:
[Settings]
SafeCommandLines=1
UsbDriveInfo sucht nach problematischen Kommandozeilen und zeigt einen Fehler oder eine Warnung, je nach dem wie SafeCommandLines steht.
USBDLM warnt mit einem Balloon-Tip.
NTFS-Ordner beim Entfernen des Laufwerks löschen
Wird in Ordner auf NTFS-Laufwerken gemountet, werden diese Ordner beim Entfernen des dort bereitgestellten Laufwerks durch USBDLM gelöscht. Wenn USBDLM das nicht tun soll:
[Settings]
DeleteMountPointsOnRemoval=0
Richtlinie "Für Leistung optimieren" für USB-Laufwerke
Unter XP und höher kann man für USB-Laufwerke zwischen den "Richtlinien" "Für schnelles Entfernen optimieren" und "Für Leistung optimieren" wählen, mit der Behauptung, letztere würde einen Schreibcache aktivieren. Tut es aber nicht, wenn es sich beim Laufwerk um einen USB-Wechseldatenträger handelt - so geben sich fast alle USB-Sticks zu erkennen! "Für Leistung optimieren" aktiviert für Wechseldatenträger lediglich die Möglichkeit, das Laufwerk mit NTFS zu formatieren und dann bekommt man tatsächlich einen Schreibecache - auch auf anderen Rechnern, da unabhängig von der Richtlinie... Es geht allein um die Erlaubnis, mit NTFS zu formatieren.
Auf FAT-formatierten USB-Festplatten wird tatsächlich ein Schreibcache aktiviert, mit NTFS hat man auch hier in jedem Fall einen Schreibcache.
USBDLM kann die Richtlinie für alle USB-Laufwerke auf "Für Leistung optimieren" umstellen:
[Settings]
OptimizeUsbDrivesForSpeed=1
Bei erstmals angeschlossenen Laufwerken klappt das sofort. Vorhandene Laufwerke müssen zweimal neu angeschlossen werden (beim ersten Mal wird der Registry-Eintrag gemacht, beim zweiten Mal wird er wirksam).
Nebenwirkung: Der Windows 10 Task-Manager zeigt Wechseldatenträger auf seinem Reiter "Leistung" wenn sie für Leistung optimiert sind.
Schreibcache für USB-Laufwerke erzwingen
Unter XP und höher haben FAT-formatierte USB-Laufwerke standardmäßig keinen Schreibcache - das Schreiben vieler kleiner Dateien geht entsprechend langsam und stresst das Laufwerk.
Mit der Richtlinie "Für Leistung optimieren" kann man den Schreibcache für USB-Festplatten (DriveType FIXED) aktivieren, bei USB-Wechseldatenträgern (DriveType REMOVABLE) ist das dagegen völlig wirkungslos, siehe vorherige Abschnitt.
Es gibt aber einen Wert in der Registry, mit dem sich der Schreibcache erzwingen lässt, auch für USB-Wechseldatenträger (WriteCacheEnableOverride). Setzt man diesen für ein Laufwerk auf 1 bekommt es einen Schreibcache spendiert.
Um Datenverluste zu vermeiden, muss man dann natürlich immer schön "Hardware sicher entfernen" oder ein anderes Tool, wie mein RemoveDrive oder EjectMedia benutzen.
USBDLM kann diesen Wert für alle USB-Laufwerke setzen:
[Settings]
UsbWriteCacheEnable=1
Bei erstmals angeschlossenen Laufwerken klappt das sofort. Vorhandene Laufwerke müssen zweimal neu angeschlossen werden (beim ersten Mal wird der Registry-Eintrag gemacht, beim zweiten Mal wird er wirksam).
- UsbWriteCacheEnable=0 -> setzt WriteCacheEnableOverride auf 0
- UsbWriteCacheEnable=1 -> setzt WriteCacheEnableOverride auf 1
- UsbWriteCacheEnable=-1 -> WriteCacheEnableOverride wird nicht verändert (default)
Datenträgerverwaltung automatisch starten für leere Festplatten
Beim Anschließen einer komplett leeren Festplatte gibt's mangels Partition keinen Laufwerksbuchstaben. Die Platte muss in der Datenträgerverwaltung "initialisiert", partitioniert und formatiert werden.
USBDLM startet die Datenträgerverwaltung automatisch, wenn eine USB-Festplatte mit komplett leerem Bootsektor angeschlossen wird:
[Settings]
StartDiskMgmtForUninitializedDrives=1
- 0: deaktiviert
- 1: für USB-Festplatten (default)
- 2: für alle Festplatten
Auf externe Mount-Ereignisse reagieren
Wenn eine andere Software einen Laufwerksbuchstaben ändert, bekommt das ein Dienst wie USBDLM nicht gemeldet. Um sowas dennoch mitzubekommen, erzeugt USBDLM ein unsichtbares Fenster, das diese Benachrichtigung empfängt.
Unter Vista, Win7 und unter XP bei mehr als einem angemeldeten Nutzer reicht das nicht, hier startet USBDLM die USBDLM_usr.exe im Kontext des Nutzers zum Empfang der Benachrichtigungen.
Wenn man das alles nicht braucht:
[Settings]
ExternalMountEvents=0
Am unsichtbaren Fenster bzw. der USBDLM_usr.exe hängen auch die OnArrival-Events und Balloontips für gemountete TrueCrypt-, Subst- und Netzlaufwerke - die bekommt USBDLM auch nur so gemeldet. Wenn davon etwas genutzt wird, ist ExternalMountEvents=0 wirkungslos.
Standardmäßig ermittelt USBDLM anhand der Einstellungen ExternalMountEvents, [Balloons] ShowVirtual und der verwendeten OnArrival/OnRemoval-Abschnitte, ob USBDLM_usr.exe benötigt wird.
Das Laden der USBDLM_usr.exe kann auch gezielt gesteuert werden, siehe auch Technische Infos:
[Settings]
LoadUsbdlm_Usr=0
- 0: nicht laden
- 1: laden falls wie benötigt (default)
- 2: immer laden (bei aktiver UAC für den eingeschränkten Nutzer)
- 3: immer laden (bei aktiver UAC für den eingeschränkten und für elevated Nutzer)
Volume-Infos Timeout
Beim Lesen einer Datei und beim Ermitteln von Volume-Label, Volume-Serial und Dateisystemname wartet USBDLM maximal 10 Sekunden auf das Ergebnis. Wenn länger gewartet werden soll, kann das in Millisekunden festgelegt werden:
[Settings]
VolumeInformationMaxWait=10000
Debug-Infos
Wenn es Probleme gibt, kann man u.U. anhand von Debug-Ausgaben herausfinden, was schiefläuft.
Für Ausgaben in die Log-Datei ist WriteLogFile=1 zu setzen. Standardmäßig wird eine _USBDLM.LOG ins Stammverzeichnis des Windows-Laufwerks geschrieben. Mit LogFile=Pfad\Datei lässt sich ein anderes Ziel festlegen.
Für Live-Debug-Ausgaben, die man mit Tools wie SysInternals DebugView oder TraceSpy einfangen kann, ist WriteDebugOutput=1 zu setzen.
Wie detailliert die Ausgaben ausfallen, wird über den LogLevel 1 bis 5 gesteuert, wobei es ab 4 extrem ins Detail geht. Beispiel:
[Settings]
LogLevel=3
WriteLogFile=1
LogFile=C:\USBDLM.LOG
WriteDebugOutput=1
LogLevel=2 reicht, um zu sehen, wie die Abschnitte aus der INI für ein Laufwerk ausgewählt werden. Mit LogLevel=3 wird's dann unübersichtlich und LogLevel=4 bringt detaillierte Ablauf-Infos, die nur dem Autor bei der Fehlersuche helfen.
LogLevel=0 schreibt nur je eine Zeile beim Anschließen und Entfernen eines Laufwerks, Ausführen einer open= Zeile und beim Starten und Beenden des USBDLM-Dienstes.
Mit LogShowDate=1 wird jeder Log-Zeile das Datum vorangestellt, mit LogShowTech=0 werden Timing, Loglevel und Thread-ID weggelassen.
Ab V4.2 ist dafür kein Neustart des USBDLM-Dienstes nötig. Die Einstellungen für die Log-Datei werde immer aus der INI gelesen, auch wenn die anderen Einstellungen aus Registry kommen sollten.
Beim Neustart des USBDLM-Dienstes wird die Logdatei gelöscht. Damit dabei potentiell wertvolle Logs nicht verloren gehen, können Kopien angelegt werden, Standard ist zwei:
LogFileBakCount=2
So wird beim Start USBDLM_BAK2.LOG gelöscht, USBDLM_BAK1.LOG in USBDLM_BAK2.LOG umbenannt und USBDLM.LOG in USBDLM_BAK1.LOG.
Wenn man das Datum am Anfang jeder Log-Zeile will:
LogShowDate=1
Cache flushen und Dateisystem dismounten bei Standby und Ruhezustand
Wenn Windows in Standby oder Ruhezustand geht, flusht USBDLM den Schreibcache aller Laufwerke. Die Dateisysteme bleiben aber gemountet, deshalb ist es keine gute Idee dann ein anderes Betriebssystem zu laden, das dann auch die Dateisysteme mountet - das führt zu Inkonsistenzen, ein Dateisystem kann nicht Diener zweier Herren sein.
USBDLM kann versuchen, alle Laufwerke (außer dem Windows-Laufwerk) zu dismounten:
[Settings]
DismountOnSleep=1
Das Dismounten klappt aber nur, wenn keine offene Dateien auf dem jeweiligen Laufwerk sind. Das Dismounten kann per DismountOnSleep=2 für USB und andere Hotplug-Laufwerke erzwungen werden, offene Datei-Handles werden dann ungültig, die zugehörige Software wird sich dann beim Wiederaufwachen beschweren oder merkwürdig reagieren. Mit DismountOnSleep=3 wird es für alle Laufwerke erzwungen.
Das System-Volume dismountet USBDLM nicht. Ich habe auch nicht getestet, was passiert, wenn man es erzwingt.
Ab V5.1 prüft USBDLM zunächst, ob ein Laufwerk schläft und läßt es dann in Ruhe außer DismountOnSleep=4.
Entfernung von Schreibrechten für Nicht-Admins auf USBDLM.EXE und USBDLM.INI
Beim Start überprüft USBLDM, ob Nicht-Admins Schreibzugriff auf USBDLM.EXE und USBDLM.INI haben. Wenn dem so ist, ändert USBDLM die Zugriffsrechte entsprechend. Wenn man das nicht will:
[Settings]
FixUsbdlmFilePrivileges=0
Kommandoschnittstelle für Programme die mit eingeschränkten Rechten arbeiten
Einige nützliche Windows-Funktionen benötigen Admin-Rechte, obwohl sie völlig harmlos sind, z.B. das Flushen des Schreibcaches von Datenträgern.
Ab V4.8 hat USBDLM dafür eine Kommando-Schnittstelle, die einige Funktionen zur Verfügung stellt. Welche freigeschaltet sind, kann konfiguriert werden, die Funktionen sind bit-kodiert:
Werte für die Funktionen, bei Bedarf addieren:
Keine Funktion 0 (default)
Schreibcache flushen 1
Dismounten 2
Auswerfen 4
Auswerfen oder Dismounten erzwingen 8
Hardware sicher entfernen: 16
Volume on/offline nehmen 32
Code-21-Geräte reaktivieren 64
Bei Bedarf addieren. Beispiel für alles außer "erzwingen": (1+2+4+16+32+64):
[Settings]
CommandInterface=119
Beispiel für alles: (1+2+4+8+16+32+64):
[Settings]
CommandInterface=127
255, 65535, 0xFF usw. gehen auch.
Ein Laufwerk zu sperren heißt, sich exklusiven Zugriff zu verschaffen. Das klappt nur wenn sonst niemand auf das zu sperrende Laufwerk zugreift, sprich, keine Dateien geöffnet sind. Sperren ist die Vorraussetzung, um ein Laufwerk korrekt zu dismounten. Ohne Sperren geht's auch, offene Dateien bleiben aber offen, Zugriffe führen aber zur einer Fehlermeldung, die betroffene Software wird nicht gut drauf reagieren.
Tools die die Funktionen benutzen:
- FFB: Cache flushen und ggf. dismounten
- EjectMedia: Cache flushen, dismounten, auswerfen, ggf. mit erzwingen, Volume "offline" nehmen
- LoadMedia: Auswerfen rückgängig, Volume "online" bringen
- RemoveDrive: Cache flushen, dismounten+auswerfen, reaktivierbares "Hardware sicher entfernen"
- RestartSrDev: Geräte mit Problemcode 21 und u.U. 47 reaktivieren