usbt Laufwerks-Tools für Windows  
  Laufwerks-Tools für Windows
 
Home

 English Version of this page 
 
  Lizenz
 
Alle Programme auf dieser Seite funktionieren unter Windows XP und höher. Sie sind Freeware.

Erlaubt:
- Nutzung in jeder Umgebung, auch kommerziell
- Ausliefern zusammen mit anderen Software-Produkten, auch kommerziellen
- Veröffentlichen auf CD/DVD von Computer-Zeitschriften
- Mittels Packet-Manager verteilen

Nicht erlaubt:
- Verändern von Dateien
- zum Download mittels einer "Downloader-Software" anbieten

Um Spenden bitte ich nicht, aber wer unbedingt möchte:
PayPal

 

  RemoveDrive V3.4.3 - Laufwerke sicher entfernen
 
RemoveDrive dient zum 'Hardware sicher entfernen' per Kommandozeile. Es funktioniert aber nur für Laufwerke. Für sonstige Geräte gibts DevEject von Matthias Withopf.
RemoveDrive Laufwerk: [-L][-47][-v][-d][-f][-vhd][-h][-a][-b][-i][-s][-dbg][-na][-w:nnnn]

Laufwerk: ist das zu entfernende Laufwerk, z.B. U: oder ein NTFS-Mountpunkt wie "E:\_CardReader\USB20 CF"
          oder . für das aktuelle Laufwerk
          oder \ für das Laufwerk der RemoveDrive.exe
          oder ein Volume-Name wie \\?\Volume{433619ed-c6ea-11d9-a3b2-806d6172696f}\
          oder ein Kernel-Name wie \Device\HarddiskVolume2 (Volume)
          oder ein Kernel-Name wie \Device\Harddisk2\DR0 (Disk)
          oder ein Partitions-Name wie \Device\Harddisk2\Partition1
          oder eine Geräte-ID
          oder ein 'Friendly Name' wie 'Corsair Voyager'
          oder eine Datenträgerbezeichnung wie 'Backup'
          Wildcards können benutzt werden.
-47     entfernt das Gerät so dass es Code 47 bekommt
-v      entfernt nur das Volume statt das Laufwerk oder das ganze Gerät
-d      entfernt nur das Laufwerk (drive) statt das ganze Gerät
-l      'loop', Endlosschleife bis Erfolg oder Abbruch
-f      sicheres Entfernen erzwingen (force), benötig Admin-Rechte und Windows ab Vista
-t      TrueCrypt-Volumes abmelden, die auf dem zu entfernenden Laufwerk gehosted sind
-vhd    detach VHD/VHDX/ISO (Win7+) wenn das zu entfernende Laufwerk in einer VHD-Datei lebt
-h      'handles', zeigt offene Handles auf dem Laufwerk
-h:X    'handles', zeigt offene Handles auf einem anderen Laufwerk, z.B. einem TrueCrypt-Laufwerk
-a      aktiviert Fenster denen die offenen Handles gehören
-s      'self delete', removedrive.exe löscht sich nach dem Beenden selbst
-b      'balloon', Windows XP..7 zeigt bei Erfolg den Balloontip "Hardware kann jetzt..."
        ab Windows 8 zeigt RemoveDrive ihn selbst

-i      'indexing', stoppt den Windows Index-Dienst für einen Moment
-na     'no about info' - keine Infos über das Programm zeigen
-w:nnnn 'wait', wartet nnnn Millisekunden vor dem Schließen des Konsolenfensters
-dbg    'debug', zeigt Debug-Infos
Achtung: Mit V2.4 ist der Parameter für Debug-Infos -dbg statt -d. -d bewirkt jetzt das Entfernen des Laufwerks statt des ganzen Gerätes.

RemoveDrive kann jede Art von USB-Laufwerk abmelden, mit Firewire-Platten funktioniert es auch problemlos. Bei SATA hängt das Vorgehen vom Treiber ab - wenn dieser die Platte nicht als entfernbar kennzeichnet, wird nur das Laufwerk abgemeldet, sonst so wie bei USB der Anschluß.
Mit Parameter -L gestartet wartet es in einer Endlosschleife bis Windows keinen Einspruch mehr erhebt, also z.B. auf einem Laufwerk keine offenen Dateien mehr vorhanden sind. Als Ergebnis wird dann grün 'success' oder rot 'failed' ausgegeben.
RemoveDrive versucht immer nur ein Laufwerk abzumelden, auch wenn der Parameter für das Laufwerk auf mehrere paßt. Für mehrere Laufwerke kann man in einer Batch-Datei eine Schleife bauen, bis RemoveDrive Errorlevel 2 (kein Laufwerk gefunden) zurückgibt.

removedrive u: -L
würde z.B. versuchen Laufwerk U: abzumelden und es endlos weiter versuchen bis es klappt.

Statt des LW-Buchstabens kann auch ein Mount-Point angegeben werden - wenn er Leerzeichen enthält natürlich in Anführungszeichen, z.B.

removedrive "E:\_CardReader\USB20 CF" -L
Ab V2.4 geht auch die Datenträgerbezeichnung (Volume Label):
removedrive "Backup001" -L
Bei einem USB-Multi-CardReader würde es den ganzen Reader abmelden - egal welchen Slot man angibt. Will man nur ein Medium 'auswerfen', nehme man mein EjectMedia, s. unten.

GeräteName ist einer der ID-Strings des Laufwerks, z.B. der 'Friendly Name' wie "Corsair Flash Voyager" oder die Hardware-ID des Laufwerks wie USB\VID_1234&PID_5678...
Hier können auch Wildcards eingesetzt werden, z.B. RemoveDrive *Flash* würde das erste Laufwerk mit Flash im Namen auswerfen.

Mit -t findet RemoveDrive auf dem Laufwerk gehostete TrueCrypt-Volumes und meldet dieser ab, mit -L auch in einer Schleife bis es klappt. Ab V2.7 funktioniert das auch mit VeraCrypt.

Mit Admin-Rechten (oder bei aktiver USBDLM-Kommando-Schnittstelle) hat ein mit RemoveDrive sicher entferntes USB-Gerät den Problem-Code 21 und kann mittels RestartSrDev oder UsbDriveInfo reaktiviert werden.
An manchen USB3-Controllern verschwinden sicher entfernte USB-Geräte aber komplett, hier kann man mittels Parameter -d nur das Laufwerk statt das USB-Gerät sicher entfernen.
Ohne Admin-Rechte oder mit Parameter -47 gestartet hat das Geräte Code 47 und kann allein nicht mittels Geräte-Management reaktiviert werden - hier hilft dann nur das Reaktivieren des Gerätes an dem es angeschlossen ist, z.B. ein USB-Hub oder bei einem USB-Gerät das Resetten des USB-Ports (XP, Win8..11) mittels UsbDriveInfo, UsbTreeView oder RestartUsbPort.

Wenn das Entfernen fehlschlägt, greift noch ein Programm auf das Laufwerk zu. Das kann etwas banales, wie ein geöffneter Ordner im Windows-Explorer (manchmal schließt sich das Explorer-Fenster automatisch) oder ein offenes Word-Dokument sein, ein gemounteter TrueCrypt-Container, aber auch die Überwachung eines Viren-Scanners. Auch eine Netzwerk-Freigabe auf das Laufwerk reicht, wenn diese bereits benutzt wurde.
RemoveDrive mit Parameter -h gestartet zeigt offene Handles auf dem Laufwerk, mit -a aktiviert es die zugehörigen Fenster. Es findet aber nicht immer alle Handles, hier hilft der SysInternals ProcessExplorer: Nach dem Start 'Find' -> 'Find Handle or DLL', hier den Laufwerksbuchstaben eingeben, z.B. X:\ und suchen.
Manchmal ist es auch ein Handle auf das Disk Device, sowas wie '\Device\Harddisk3\DP(1)0-0+b' - auch danach kann man im ProcessExplorer suchen - z.B. 'disk3' reicht.
Ist das Laufwerk mit TrueCrypt verschlüsselt, kann man den Laufwerksbuchstaben des Truecrypt-Laufwerks für die Suche nach offenen Handles angeben, z.B. -h:T. Ab V2.4 geht das von selbst, wenn -t angegeben wird. Mit VeraCrypt funktioniert das auch.
Wenn alles nichts hilft, kann man ab V3.3 das sichere Entferen erzwingen, dafür entweder Parameter -f nutzen oder -l und die Taste F drücken, wenn einem nichts mehr einfällt was das sichere Entfernen verhindert. RemoveDrive dismountet dann alle Volumes (das macht z.B. auch chkdsk X: /F nach Rückfrage) und setzt dann das Offline-Attribut für das Disk-Gerät. Das führt dazu, dass die offenen Handles das sichere Entfernen nicht mehr blockieren. Dank an Kazuyuki Nakayama (HotSwap!) für die Info.
Bei Handles auf das Disk-Device hilft das leider nicht. Weil der Windows-Task-Manager ein Handle auf jede Disk hält gibts ab V3.4 den Parameter -tm um den Task-Manager zu schließen und falls gewünscht wieder zu starten (-tmr).

RemoveDrive kann auch vom abzumeldenden Laufwerk aus gestartet werden. Es macht dann eine temporäre Kopie von sich und führt diese mit den selben Parametern aus. Eine aussagekräftigen Errorlevel gibts dann naturgemäß nicht. Die temporäre Kopie löscht sich dann anschließend selbst.

Download aktuelle Version: removedrive.zip
V2.5 für Windows 2000: removedrive2500.zip

Letzes Update: 07.02.2024

Für Entwickler habe ich bei codeproject.com ein Demo-Projekt zusammengestellt, das die grundlegenden Funktionen demonstriert:
How to prepare a USB drive for safe removal

Eine mit dem Windows-Trayicon vergleichbare Alternative ist übrigens "HotSwap!":
http://mt-naka.com/hotswap/index_enu.htm

 

  RestartSrDev - "sicher entfernte" Geräte reaktivieren
 
RestartSrDev V3.1 - reaktiviert "sicher entfernte" Geräte die Problem-Code 21 oder 47 haben per Kommandozeile
RestartSrDev DeviceId [-f][-t][-na][-w:nnnn]

DeviceId: die Geräte-ID des zu reaktivierenden Geräts, Wildcards sind möglich
-f       'force' - Neustart erzwingen falls der Hub neu Gestartet werden muss und dort weitere Geräte angeschlossen sind
-t       'test' - zeigt welches Gerät reaktiviert werden würde
-na      'no about info' - keine Infos über das Programm zeigen
-w:nnnn  'wait' - nnnn Millisekunden warten bevor das Konsolenfenster geschlossen wird
-d       'debug' - Zeigt Debug-Infos
Beispiele:
RestartSrDev *

RestartSrDev USB\VID_0781*PID_5406*

RestartSrDev "USB\VID_0781&PID_5406\0000051017037750"

RestartSrDev "Sandisk Extreme"

RestartSrDev "Corsair *"

RestartSrDev -f Kingston*

Wenn im Parameter das Zeichen & vorkommt, muß er in Anführungsstriche eingeschlossen werden. Sonst trennt das Zeichen & die Kommandozeile in zwei separate Kommandos, die dann natürlich nicht funktionieren...

Admin-Rechte werden benötigt (oder eine aktive USBDLM-Kommando-Schnittstelle), unter x64-Windows funktioniert nur die x64-Version.

Errorlevel:

0 - mindestens ein Gerät neu gestartet
1 - kein Gerät neu gestartet
2 - anderes Problem

Hintergrund-Infos

Nachdem ein Gerät von Windows "sicher entfernt" wurde, hat es den Problem-Code 47. Das ist eine Konstante aus der cfg.h: CM_PROB_HELD_FOR_EJECT.

Soweit bekannt, kann so ein Gerät nicht reaktiviert werden. Bei einem USB-Gerät gibt es die Möglichkeit, den Hub an den das Gerät angeschlossen ist, neu zu starten. Das reaktiviert alle an diesem Hub angeschlossenen Geräte. RestartSrDev tut das ab V2.0, wenn weitere Geräte angeschlossen sind nur mit Parameter -f (force).

Manchmal haben Geräte nach dem sicheren Entfernen aber den Code 21 (CM_PROB_WILL_BE_REMOVED). Solche Geräte können problemlos reaktiviert werden.

Welchen Problem-Code ein Gerät nach dem sicheren Entfernen hat, hängt offenbar von der verwendeten API-Funktion ab. Zum sicheren Entfernen gibt es zwei:
CM_Query_And_Remove_SubTree und CM_Request_Device_Eject.
CM_Query_And_Remove_SubTree führt zu "Code 21", CM_Request_Device_Eject dagegen zu "Code 47".
CM_Query_And_Remove_SubTree soll nicht für Geräte genutzt werden, die das "SurpriseRemovalOk" Flag haben. USB-Geräte haben dieses Flag, somit ist die Nutzung dieser Funktion für USB-Geräte eigentlich falsch, wahrscheinlich ist das auch der Grund für den anderen Problem-Code. Vermutlich ist bei Code 21 das sichere Entfernen nicht wirklich komplett, aber Probleme scheinen sich daraus aber nicht zu ergeben und da Laufwerk und Volume dann bereits weg sind, ist das zweifellos "sicher" genug.

CM_Query_And_Remove_SubTree benötigt Admin-Rechte, während CM_Request_Device_Eject auch für eingeschränkte Nutzer funktioniert aber wiederum nicht in einem Dienst, dort geht nur CM_Query_And_Remove_SubTree...

Mein Tool RemoveDrive versucht zuerst CM_Query_And_Remove_SubTree und falls das fehlschlägt CM_Request_Device_Eject.

Wenn man also mit Admin-Rechten (oder aktiver USBDLM-Kommandoschnittstelle) mit RemoveDrive ein USB-Laufwerk abmeldet, kann man es mit RestartSrDev reaktivieren.

Bei Geräten mit Code 47 muss der übergeordnete Gerät neu gestartet werden (z.B. ein USB-Hub) oder (ab V3.0) der USB-Port des Gerätes zurückgesetzt werden.

Dieselbe Funktion gibts jetzt auch in UsbTreeView und UsbDriveInfo, jeweils Rechtsklick auf das Gerät -> "Restart device" oder "Restart Port". Alles braucht Admin-Rechte.

Download: RestartSrDev.zip

Letzes Update: 24.10.2023

 

  EjectMedia V3.2.1 - Medium auswerfen
 
EjectMedia dient zum Auswerfen von Speicher-Medien per Kommandozeile, genau das was der Windows-Explorer bei Laufwerks-Rechtklick -> 'Auswerfen' macht. Bei Laufwerken die es unterstützen wird das Medium physisch ausgeworfen, z.B. bei CD/DVD- und ZIP-Laufwerken. Bei Flash-Kartenlesern wird das Medium nur logisch ausgeworfen - ist also nicht mehr ansprechbar bis es entnommen und erneut eingelegt wird, bei Kartenlesern klappt bei manchen Geräten auch ein logisches Laden, z.B. mit LoadMedia.
Das Auswerfen des Mediums ist die geeignete Methode, um eine Flashkarte in einem USB-Multislot-Kartenleser abzumelden. "Hardware sicher entfernen" oder mein RemoveDrive würden den ganzen Kartenleser abmelden.
Ein Volume 'offline' zu nehmen funktioniert nur bei Festplattenpartitionen und dynamischen Volumes. Online bekommt man sie meist wieder über die Datenträgerverwaltung oder mittels LoadMedia - da war die Funktion schnell mal eingebaut...
"Auswerfen" geht auch mit manchen USB-Festplatten, es hängt allein davon ab, ob das Gerät das Kommando kennt und entprechend beantwortet. Dazu brauchts im Gegensatz zu Wechseldatenträgern und CDROMs aber Admin-Rechte (oder eine aktive USBDLM-Kommandoschnittstelle). Unter XP dürfen eingeschränkte Nutzer auch keine 'Wechseldatenträger' auswerfen - das läßt sich aber ändern.
EjectMedia Laufwerk [-L][-d]][-o][-f][-h][-a][-na][-w:nnnn]

Laufwerk: ist das Laufwerk dessen Datenträger ausgeworfen werden soll, z.B.
          U: oder ein NTFS-Mountpunkt wie "E:\_CardReader\USB20 CF"
          oder . für das aktuelle Laufwerk
          oder \ für das Laufwerk der EjectMedia.exe
          oder ein Volume-Name wie \\?\Volume{433619ed-c6ea-11d9-a3b2-806d6172696f}\
-L        'loop', Endlosschleife bis Erfolg oder Abbruch
-d        'dismount', nur dismounten aber nicht auswerfen
-t        'TrueCrypt' Volumes freigeben
-f        'force', Dismounten oder Auswerfen erzwingen
-o        volume 'offline' nehmen
-h        'handles', zeigt offene Handles auf dem Laufwerk
-a        Fenster von Prozessen aktivieren die offene Handles halten
-na       'no about info' - keine Infos über das Programm zeigen
-w:nnnn   'wait', wartet nnnn Millisekunden vor dem Schließen des Konsolenfensters
Wie oben beschriebenes RemoveDrive kann EjectMedia vom abzumeldenden Laufwerk aus gestartet werden.

Download: ejectmedia.zip

Für Entwickler habe ich bei codeproject.com ein Demo-Projekt zusammengestellt, das die grundlegenden Funktionen demonstriert:
How to flush a storage volume's file cache, lock and dismount it, and eject the media

Letzes Update: 21.04.2020

 

  LoadMedia V1.5 - Medium laden/Volume online nehmen
 
LoadMedia macht das Gegenteil von EjectMedia, also zum einen eine Schublade eines CD/DVD-Laufwerks zu schließen oder einen logisch ausgeworfenen Wechseldatenträger zur reaktivieren und zum anderen ein 'offline' gesetztes Volume wieder 'online' zu nehmen. Per Kommandozeile natürlich...
ZIP-Drives können nur auswerfen. Bei Kartenlesern hängt es offenbar vom Gerät ab, was passiert. Entweder gibt es einen Fehler, es passiert trotz Erfolgsmeldung nichts oder es wird tatsächlich der Datenträger reaktiviert.
LoadMedia Laufwerk [-d][-f][-na][-w:nnnn]

Laufwerk: ist das Laufwerk dessen Datenträger geladen werden soll, z.B.
          U: oder ein NTFS-Mountpunkt wie "E:\CD-Laufwerke\Brenner1"
          oder . für das aktuelle Laufwerk
          oder ein Volume-Name wie \\?\Volume{433619ed-c6ea-11d9-a3b2-806d6172696f}\
-f        'force', Laden erzwingen (falls das Volume bereits online und nicht ausgeworfen zu sein scheint)
-na       'no about info' - keine Infos über das Programm zeigen
-w:nnnn   'wait', wartet nnnn Millisekunden vor dem Schließen des Konsolenfensters

Download: loadmedia.zip

Letzes Update: 04.01.2018

 

  EjectTcv V3.2.0 - TrueCrypt- oder VeraCrypt-Laufwerk 'auswerfen'
 
EjectTcv (EjectTrueCryptVolume) dient zum Abmelden eine TrueCrypt-Volumes per Kommandozeile, ab V2.7 funktioniert es auch mit VeraCrypt. Auswerfen anhand des Containernamens funktioniert ab VeraCrypt V1.6 nur mit EjectTcv ab V2.8.
Vorteile gegenüber dem Original-TrueCrypt-Tool:
  • identifiziert das TrueCrypt-Volume auch anhand dessen Containers
  • kann es bis zum Erfolg endlos weiter versuchen
  • kann offene Handles auf dem Volume anzeigen
  • weckt (im Gegensatz zu VeraCrypt) keine schlafenden Laufwerke auf
Ich habe den Begriff "Eject" gewählt, weil das vom Original genutzte "Dismount" unter Windows eigentlich nur bedeutet, das Dateisystem abzumelden, das Volume aber aktiv zu lassen. Allerdings ist das auch beim Auswerfen der Fall, remove oder release wären geeigneter gewesen.
EjectTcv DriveSpec [-L][-f][-h][-a][-w:nnnn]
[-f] Force: Auswerfen erzwingen
[-l] Loop: Endlosschleife bis Erfolg
[-h] Handles: Zeige offene Handles auf dem TrueCrypt-Laufwerk
[-a] aktiviert Fenster denen die offenen Handles gehören
[-w:nnnn] Warten: Vor dem Beenden nnnn Millisekunden warten
DriveSpec ist irgend etwas das das TrueCrypt-Volume definiert, typischerweise dessen Laufwerksbuchstaben, z.B. T: oder dessen VolumeName (Volume{GUID}) oder der Pfad zu dessen Container, so wie das TrueCrypt-Tool ihn anzeigt.

Es muss in dem Nutzer-Context ('normal' / 'Als Administrator') ausgeführt werden in dem das Volume gemountet wurde, anderenfalls löscht VeraCrypt im jeweils anderen Context den Laufwerksbuchstaben nicht!

Beispiele:
EjectTcv T:
EjectTcv T: -L -h
EjectTcv \Device\Harddisk1\Partition1
EjectTcv C:\geheim.tc
Mit Parameter -L gestartet versucht EjectTcv in einer Endlosschleife das TrueCrpyt-Volume abzumelden und kann auf Taste F hin das Abmleden erzwingen.

EjectTcv kann auf vom abzumeldenden TrueCrypt-Volume aus gestartet werden, es macht dann eine temporäre Kopie von sich und startet diese.

Download: ejecttcv.zip

Letzes Update: 30.12.2019

 

  ReMount V2.3.1 - Laufwerksbuchstaben ändern
 
ReMount dient zum schnellen Ändern von Laufwerksbuchstaben und Mountpunkten per Kommandozeile.
Admin-Rechte werden benötigt.
ReMount X: Y:
X: der aktuelle Laufwerksbuchstabe
Y: der neue Laufwerksbuchstabe
Wenn beide Buchstaben belegt sind und getauscht werden sollen, gibt man Parameter -s wie 'swap' an:
remount f: u: -s
Für unsinnige Aktionen, wie das Remounten des Windows-Laufwerks oder das Mounten eines lokalen Laufwerks auf den Buchstaben eines Netz-Laufwerks, gibt es den Parameter -f (wie 'force'). Ausserdem kann -f genutzt werden, um auf belegte Buchstaben zu mounten - das Laufwerk das den Ziel-Buchstaben belegt wird auf den ersten freien Buchstaben umgemountet:
remount c: x: -f
Auch NTFS-Mountpunkte sind möglich:
ReMount X: "E:\MyCardReader\Slot 1"
"E:\MyCardReader\Slot 1" ist der neue Mountpunkt und muß ein vorhandener, leerer Ordner auf einem NTFS-Laufwerk sein.

Eine Alternative mit Bedienoberfläche ist USB Drive Info: Mit Admin-Rechten gestartet rechtsklicke man ein Volume und wähle "Drive Letter". Es zeigt auch Nicht-USB-Laufwerke, wenn unter Optionen "Show Non-USB drives" aktiviert ist.

Download: remount.zip

Letzes Update: 07.02.2024

 

  FFB - Flush File Buffers
 
FFB entspricht dem Unix-Kommando sync. Von SysInternals gibt es auch ein Sync, das kann aber keine Volumes flushen, die keinen Laufwerksbuchstaben haben und es vergisst Laufwerk Z:.

Der Name kommt von Win32-API-Funktion FlushFileBuffers:

Schlafende Laufwerke werden übersprungen, ebenso VHD-, True- und VeraCrypt-Volumes die auf schlafenden Laufwerken gehostet sind.

FFB [VolumeSpec1] [VolumeSpec2] ... [VolumeSpecN] [-d] [-f]
VolumeSpec kann ein Laufwerksbuchstabe oder ein Mountpunkt sein.
-p  purge - Datei-Cache verwerfen
-d  dismount - Volume(s) dismounten falls möglich
-f  force dismount - dismounten erzwingen falls kein exklusiver Zugriff (offene Handles werden ungültig)
Beispiele:
FFB
FFB C D E
FFB C: D: E:
FFB C:\ D:\ E:\
FFB C:\CardReader\SD
FFB \\?\Volume{16b5dd59-158f-11e1-b349-00166f0dc865}
FFB \\?\Volume{16b5dd59-158f-11e1-b349-00166f0dc865}\
FFB X: -d -f

FlushFileBuffers benötigt Admin-Rechte oder einen laufenden USBDLM-Dienst mit aktiver Kommandschnittstelle, siehe USBDLM-Hilfe unter "Einstellungen".

Download: ffb.zip

Letzes Update: 03.10.2021

 

  AttachVHD V1.0.2 - VHDs per Kommandozeile mounten
 
Funktioniert unter Windows 7 and höher dank eingebauter Unterstützung für VHDs, ab Windows 10 funktionieren auch ISOs.
Ältere Systeme ab XP benötigen Microsoft Virtual Server 2005 in dessen Standard-Ordner installiert (%ProgramFiles%\Microsoft Virtual Server\Vhdmount), dort schaut AttachVHD nach der vhdmount.dll.

Admin-Rechte sind erforderlich oder (ab Windows 7) USBDLM V5.4.6+ mit aktiver Kommandoschnittstelle 0x100.
Die Möglichkeit, ohne Admin-Rechte VHDs zu mounten war der Anlass für dieses Tool. Analog dazu kann RemoveDrive ab V3.2 VHDs abmelden.
Ansonsten gibt's ja Windows diskspart, die PowerShell und vMount: http://reboot.pro/files/file/477-vmount
Usage:
AttachVHD VHDfile [-n][-w:nnnn]

VHDfile:  the VHD/VHDX/ISO file
[-n]      no wait before close
[-w:nnnn] wait nnnn milliseconds before close

Sample:

AttachVHD X:\test.vhd

Download: AttachVHD.zip

Letzes Update: 03.10.2021

 


  DriveCleanup V1.6.5
 
DriveCleanup macht per Kommandozeile genau das was man von Hand im Geräte-Manager oder mit DeviceCleanup tun könnte, nämlich alle derzeit nicht angeschlossenen USB-Massenspeicher, 'Disks', 'CDROMs', 'Floppys', 'Speicher-Volumen' und 'WPDs' aus dem Gerätebaum zu löschen.
Jedes einmal angeschlossene Laufwerk hinterläßt in der Geräteverwaltung eine Reihe von Einträgen, damit es beim nächsten Anschließen nicht als neues sondern als bekanntes Laufwerk mit den vorheringen Einstellungen eingebunden wird. Allerdings wurde unter XP von Problemen berichtet wenn Anzahl gegen 1000 geht.
Ab v0.6 begibt sich DriveCleanup auf das rutschige Parkett eines Registry-Cleaners: Es entfernt auch verwaiste Einträge unter
  • HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\CPC\Volume
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\CPC\LocalMOF
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volume
Um zu testen, was das Tool entfernen würde, kann es mit Parameter -T wie 'test' gestartet werden:
DriveCleanup -t
Oder ohne Administrator-Rechte starten, dann wechselt es nach Rückfrage in den Testmode.
Mit Adminrechten und ohne Parameter gestartet legt es gleich los.

Um gezielt nur bestimmte Typen zu bereinigen gibts noch die Parameter -u -d -c -f -v -w -r, siehe DriveCleanup.txt.

Standalone gestartet wird am Ende auf einen Tastendruck gewartet, das kann man mit Parameter -n übergehen oder indem man es minimiert oder versteckt startet.

Ab V1.0 werden auch Nicht-USB-Laufwerke entfernt, wenn sie eine RemovalPolicy > 1 haben (EXPECT_ORDERLY_REMOVAL oder EXPECT_SURPRISE_REMOVAL).

Wenn mir jemand zeigt, wie ein Thunderbolt- oder USB4-Laufwerk in der Registry aussieht, kann ich das noch einbauen.

Download:
DriveCleanup.zip

Letzes Update: Feb 2024

Ein verwandtes Tool ist DeviceCleanup.

 

  VerifyDisk V1.0.0
 
VerifyDisk [disknumber][-r | -r2 | -ld]

disknumber  eine Disk-Nummer wie in der Datenträgerverwaltung angezeigt (oder von VerifyDisk -ld)
-r          von Disk lesen statt IOCTL_DISK_VERIFY
-r2         zweimal lesen von Disk und vergleichen statt IOCTL_DISK_VERIFY
-ld         listet Disks auf


Beispiele:
VerifyDisk -ld
VerifyDisk 0
VerifyDisk 0 -r
Standardmäßig ruft VerifyDisk IOCTL_DISK_VERIFY über das ganze Laufwerk auf. Obwohl es IOCTL_DISK_VERIFY schon seit Windows NT 3.1 von 1993 gibt, ist nicht viel darüber bekannt.
https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ni-winioctl-ioctl_disk_verify
Vermutlich sendet es eines der SCSI VERIFY-Kommandos an das Laufwerk. Dieses sollte dann die jeweiligen Daten prüfen, bei einem korrigiertbaren Fehler umlagern.
Was tatsächlich passiert hängt vom Laufwerk ab: Bei manchen SSD geht IOCTL_DISK_VERIFY langsamer als Lesen - da passiert wohl etwas. Bei anderen geht es um ein Vielfaches schneller als lesen - hier wird das wohl ignoriert.

An manchen USB-Adaptern wird das Kommando zurückgewiesen - dann gibt's ERROR_INVALID_FUNCTION.

Für Lese-Tests werden Admin-Rechte benötigt.

Bei "zweimal lesen von Disk und vergleichen" versucht VerifyDisk die Volumes auf dem Laufwerk zu sperren, damit konkurrierende Schreibzugriffe nicht zu Fehlern führen.

Download:
VerifyDisk_Win32.zip
VerifyDisk_x64.zip

Letzes Update: Dezember 2023

 

  ListDosDevices
 
Laufwerksbuchstaben verweisen über 'symbolic links' auf Kernel-Objekte.
Mit ListDosDevices kann man sich anzeigen lassen, welche Kernel-Namen sich hinter den Laufwerksbuchstaben verbergen.
Beispiel:
A:  REMOVABLE  \Device\Floppy0
B:  ----
C:  FIXED      \Device\HarddiskVolume1
D:  FIXED      \Device\HarddiskVolume2
E:  CDROM      \Device\CdRom0
F:  CDROM      \Device\CdRom1
G:  ----
H:  ----
I:  CDROM      \Device\IsoCdRom0
J:  ----
K:  ----
L:  ----
M:  ----
N:  ----
O:  ----
P:  REMOTE     \Device\LanmanRedirector\;P:0000000000013548\server01\public
Q:  REMOTE     \Device\NetWareRedirector\WFS1\SERVER02\PUBLIC
R:  ----
S:  FIXED      \??\C:\Dokumente und Einstellungen\User\Anwendungsdaten
T:  ----
U:  REMOVABLE  \Device\Harddisk5\DP(1)0-0+19
V:  FIXED      \Device\VeraCryptVolumeV
W:  ----
X:  CDROM      \Device\WMDisk0
Y:  FIXED      \Device\TrueCryptVolumeY
Z:  ----
Hier sind
A: Floppy
C: + D: Festplattenpartitionen
E: + F: CD oder DVD-Laufwerke
I: Virtuelles CDROM von UltraISO
P: Windows Netz-Laufwerk
Q: Novell Netware Netz-Laufwerk
S: Subst-Laufwerk
U: USB-Stick (Win2000, XP, 2003; ab Vista mit Kernel-Namen wie eine Partition)
V: VeraCrypt-Laufwerk
X: Virtuelles CDROM von WinMount
Y: TrueCrypt-Laufwerk

Weitere Beispiele bitte melden.

Mit Parameter -a gestartet zeigt es zusätzlich alle Win32-Namen die auf Kernelobjete verweisen.

Download: listdosdevices.zip

 

  DeleteDosDevice
 
Wenn eine Software abstürzt, die virtuelle Laufwerke unter einem Laufwerksbuchstaben bereitstellt, wird dieser in Form eines 'symbolic link' hinterlassen auf das zugehörige Kernel-Objekt hinterlassen. Somit bleibt dieser Laufwerksbuchstabe dann u.U. für alle Zeit belegt - dann hilft DeleteDosDevice.
Wenn man sicher ist, es mit so einer Buchstaben-Leiche zu tun zu haben:
deletedosdevice x:
Es kommt aber vor, dass Windows behauptet, der 'symbolic link' sei entfernt worden, dieser tatsächlich aber weiter besteht. DeleteDosDevice zeigt dann eine entsprechende Meldung.

Download V0.4: deletedosdevice.zip

Letztes Update: 19.02.2012

 

  RescanDevices
 
Nachdem eine IDE- oder SATA-Platte zum sicheren Entfernen vorbereitet wurde, kann man sie durch ein "Suchen nach neuer Hardware" reaktivieren (mit USB-Geräten funktioniert das nicht!).
Genau das macht dieses Tool.

Es ist ein unsichtbares Windows-Programm. Es macht das Gleiche wie Microsofts Tool DEVCON wenn es mit dem Parameter 'rescan' gestartet wird. Da RescanDevices kein Konsolen-Programm ist, popt aber keine Konsole auf.

Download: rescandevices.zip

 

  SRE / SRD - XP SystemRestore Ein- und Ausschalten
 
Aktiviert oder Deaktiviert die Windows XP Systemwiederherstellung für ein oder mehrere Laufwerke.

Beispiel: Deaktivieren auf Laufwerk D:

srd d:
Beispiel: Deaktivieren auf Laufwerken D: bis Z:
srd d-z
SRE aktiviert (enable) die XP Systemwiederherstellung für Laufwerke.

Wenn die Systemwiederherstellung für das Systemlaufwerk ein- oder ausgeschaltet wird, sind davon auch alle anderen lokalen Laufwerke betroffen!

Das Tool ist nur für XP: W2K hatte noch keine Systemwiederherstellung und seit Vista kümmert sie sich nur noch ums Systemlaufwerk.

Download: systemrestore.zip

 

  ListUsbDrives
 
ListUsbDrives gehört eigentlich zu USBDLM, zeigt inzwischen aber auch jede Menge Infos, die mit USBDLM nichts mehr tun haben, deshalb gibt's es jetzt auch einzeln.
ListUsbDrives zeigt standardmäßig nur Infos zu USB-Laufwerken. Mit Parameter -a (wie alle) gestartet zeigt es Infos zu allen Laufwerken.

Download: listusbdrives.zip

ListUsbDrives wurde inzwischen vom GUI-Programm UsbDriveInfo abgelöst.

 

  Sonstiges
 
Um auf der Windows-Konsole effektiv zu arbeiten, empfehle ich FAR - den File and Archive Manager. Das ist ein Norton-Commander-Clone für die Win32-Konsole.
Dazu noch meine Konsolen-Fonts, damit das Ganze schön DOS-mäßig aussieht :-)

 

  AutoRun Settings V1.4
 
AutoRunSettings verschafft komfortablen Zugriff auf die grundlegenden Einstellungen für das Windows AutoRun.
AutoRun kann abhängig vom Laufwerks-Typ und vom Laufwerksbuchstaben deaktiviert werden.

Die Einstellungen existieren system-global ("all users") und für den aktuellen Nutzer. Wenn eine Einstellung system-global vorhanden ist, ist die nutzerabhängige Einstellung "überstimmt", sprich wirkungslos.

Wenn die jeweilige Schaltfläche "delete setting" deaktiviert ist, befindet sich in der Registry kein entsprechender Wert - die angezeigten Laufwerkstypen sind dann Standard für das jeweilige Betriebssystem, so wie von Microsoft dokumentiert.

Bei Laufwerks-Typen und Laufwerks-Buchstaben heißt ein gesetzter Haken "AutoRun EIN", zum Deaktivieren also den Haken wegnehmen. AutoRun kommt für ein Laufwerk zum Zuge, wenn es für dessen Laufwerkstyp und dessen Laufwerks-Buchstaben aktiv ist.

Bei CD/DVD-Laufwerken ist für ein funktionierendes AutoRun Vorraussetztung, dass ein Medienwechsel erkannt wird. Dazu wird das Laufwerk zyklisch abgefragt, was auf manchen Rechnern zu einer ständig blinkenden HDD-LED führt und auf Laptops sicher ein wenig Strom verschwendet. Das Ganze nennt sich "Auto Insert Notification" oder auch "Media Change Notification (MCN)". Gespeichert wird die Einstellung für alle CD/DVD-Laufwerke unter HKLM\SYSTEM\CurrentControlSet\Services\Cdrom im Wert "AutoRun".

Verantwortlich für AutoRun und AutoPlay ist der Dienst "Shell Hardwareerkennung" (ShellHWDetection). Wenn man AutoRun ohnehin deaktiviert hat und auch kein AutoPlay für Nicht-Laufwerke braucht, ist der Dienst unter XP wohl überflüssig und kann deaktivieren werden. Unter Vista und Windows 7/8/10 ist der WIA-Dienst als davon abhängig gekennzeichnet, obwohl unter XP nicht so gekennzeichnet, wird das wohl auch hier zutreffen.

Unter XP wirkten sich diese Einstellungen nur auf den Moment des Anschließens eines Laufwerks aus. Aktionen, definiert in der autorun.inf, beim manuellen Öffenen eines Laufwerks im Windows Explorer waren weiterhin möglich. Das änderte sich erst mit dem (schon seit August 2008 verfügbaren, aber nicht automatisch verteilten) Microsoft Patch KB950582, siehe hier:
http://support.microsoft.com/kb/953252
Der wird seit Ende Februar 2009 als KB967715 auch automatisch verteilt.
Wenn der Patch installiert ist, sollte der Registry-Wert "HonorAutorunSetting" auf "1" stehen - das entspricht dem gesetzen Haken in AutoRunSetttings.

Alternativ kann man die autorun.inf komlett lahmlegen, also auch verhindern, daß beim Öffnen eines Laufwerks mit autorun.inf im Windows Explorer daraus etwas ausgeführt oder auch nur angeboten wird. Dazu wird ein alter Kompatibilitäts-Mechanismus mißbraucht, der dazu dient, INI-Einstellungen in die Registry umzuleiten.
Siehe hier: US-CERT: Microsoft Windows Does Not Disable AutoRun Properly.

Zum Ändern von system-globalen Einstellungen werden Administratorrechte benötigt, sonst gibts "Access denied". Unter Vista und Windows 7/8/10 muß AutoRunSettings dann mit vollen Rechten gestartet werden, also AutoRunSettings im Explorer rechts-klicken -> Als Administrator starten, oder eine Verknüpfung anlegen bei der das so eingestellt ist.

Screenshot (AutoRun vollständig deaktiviert):

autorunsettings

Screenshot XP-Standardeinstellungen

Download: autorunsettings.zip

Letztes Update: 27.8.2010

 

  USB-WriteCache V0.2
 
Mit USB-WriteCache kann man für USB-Laufwerke einen Schreibcache erzwingen oder abschalten. Es liest und schreibt die Registry-Werte WriteCacheEnableOverride und UserRemovalPolicy unter HKLM\SYSTEM\CurrentControlSet\Enum\<DeviceInstanceID>\Device Parameters\Classpnp mittels IOCTL_STORAGE_GET_HOTPLUG_INFO und IOCTL_STORAGE_SET_HOTPLUG_INFO.
Zum Ändern von Einstellungen benötigt es Admin-Rechte, sonst gibt's ein "Zugriff verweigert".

Die genutzt Datenstruktur STORAGE_HOTPLUG_INFO hat vier Werte die gelesen werden können:

typedef struct _STORAGE_HOTPLUG_INFO {
  DWORD   Size;
  BOOLEAN MediaRemovable;
  BOOLEAN MediaHotplug;
  BOOLEAN DeviceHotplug;
  BOOLEAN WriteCacheEnableOverride;
} STORAGE_HOTPLUG_INFO, *PSTORAGE_HOTPLUG_INFO;
Nur DeviceHotplug und WriteCacheEnableOverride können geschrieben werden, siehe hier:
https://docs.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-storage_hotplug_info

Während WriteCacheEnableOverride 1:1 in der Registry landet ist es bei DeviceHotplug etwas komplizierter:
DeviceHotplug = FALSE -> UserRemovalPolicy = 2 (CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL  - "Bessere Leistung")
DeviceHotplug = TRUE  -> UserRemovalPolicy = 3 (CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL - "Schnelles Entfernen")
WriteCacheEnableOverride EIN führt immer zu einem Schreibcache, DeviceHotplug AUS nicht unbedingt...
Das Ganze funktioniert nur mit der Geräteklasse "DISK", bei Floppys hat der Wert keine Wirkung.
Wirksam werden Änderungen nachdem das Laufwerk neu gestartet, neu angeschlossen oder das System neu gestartet wurde.
Bei FAT-formatierten Wechseldatenträgern führt "Bessere Leistung" allein nicht zu einem Schreibcache, hiert brauchts immernoch WriteCacheEnableOverride=1.

Screenshot:

usb-writecache

Download: usb-writecache.zip

Letztes Update: 15.08.2021

 

  MaximumTransferLength für USBSTOR-Laufwerke ab Windows 7 SP1
 
Ab Windows 7 SP1 kann mittels eines Registry-Eintrags die Blockgröße für USBSTOR-Datentransfers pro Gerät eingestellt werden. Default sind 64KB, maximal einstellbarer Wert ist 2MB.
Eingeführt wurde diese Möglichkeit 2011 mit einem Hotfix, heute genügt ein aktuelles Windows 7 SP1 - den Hotfix braucht man nicht mehr. Unter Windows 8, 10 und 11 funktioniert das Ganze auch:
Man gehe im Registry-Editor nach HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbstor. Hier gibt es von Haus aus schon ein paar Schlüssel mit achtstelligen Hex-Zahlen als Name. Das sind jeweils Vendor- und Product-ID des betreffenden USB-Gerätes. Es werden mittels xx auch Wildcards unterstützt, 05AC12xx und 05AC13xx verpassen zum Beispiel mittels Bit 0x20 im Wert DeviceHackFlags allen Apple iPods eine Sonderbehandlung.
Will man ein Gerät hinzufügen, kopiert man aus UsbDriveInfo, UsbTreeView oder dem Geräte-Manager dessen Device-ID und dampft sie ein, aus USB\VID_13FE&PID_5100 macht man z.B. 13FE5100 und legt mit diesem Namen einen neuen Schlüssel an. Darunter dann den DWORD-Wert MaximumTransferLength.
Nach dem erneuten Anschließen oder Neustart des Gerätes wird die Einstellung wirksam.
Ich habe das Ganze in ein kleines Tool gegossen mit dem man die Einstellung vornehmen, das Gerät neu starten und einen Lese-Test durchführen kann:

UsbstorMaximumTransferLength

Laut der Dokumentation zu o.g. Hotfix liegen die zulässigen Werte zwischen "65535 (64 KB) und 2097120 (2 MB)". Für einen Datentransfer-Puffer im Kernel sind aber Vielfache von 4096 plausibel und hier hat ein so ein krummer Wert (2 × 65535 = 131070) direkt zu einem Bluescreen geführt. Mein Tool setzt daher (in Hex) "glatte" Werte von 65536 (64 KiB) bis 2097152 (2 MiB).

Es hängt vom jeweiligen USB-Gerät ab, ob sich damit die Datenrate erhöht oder gar verringert:
Meine USB-SSD "Treckstor I.Gear" wurde etwa 20% schneller, beim alten Patriot Memory 16GB sank dagegen die Datenrate von 65 MB/s auf 30 bei jedem anderen Wert als 65536. Und der "Treckstor I.Gear" hängt sogar wenn er an einem ur-alt VIA USB3-Hub angeschlossen ist. Versuch macht kluch...

Neuere USB-Laufwerke nutzen das UASPStor-Protokoll das ab Windows 8 unterstützt wird. UASPStor hat einen geringeren Protokoll-Overhead und nutzt standardmäßig unter Windows einen 512KB großen Puffer. Eine Optimierung ist hier nicht nötig, wer spielen will: MaximumTransferLength muss hier unter HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx\Device Parameters.

Download: UsbStorMaxTransferLen.zip

Letztes Update: 03.10.2021

 


Impressum

Kontaktaufnahme bitte per E-Mail - die Telefonnummer steht hier, weil manche das in das Telemedien-Gesetz hineininterpretieren...

Home