Déconnexion rapide des Périphériques de stockage de masse USB

L'icone "Retirer le périphérique en toute sécurité" présente dans la Zone de Notification sur la droite de la Barre des Tâches permet par un simple clic gauche de sélectionner un volume et de s'assurer ainsi qu'aucun programme n'utilise le volume avant son retrait.

Sur cette capture deux périphériques ont le même nom "UBUSB". Lequel faut-il cliquer ?

L'icone n'est pas toujours présente sur l'ordinateur sur lequel on travaille. Un contournement consiste à Exécuter (WIN+R) la commande control hotplug.dll qui fonctionne bien avec XP. Gag, elle a un problème avec W7. Quand elle est présente elle n'est pas toujours facile d'accès. Selon l'ordinateur sur lequel on travaille la barre des tâche peut être masquée, cas courant sur les netbooks à cause du petit écran. Elle peut se retrouver dans la partie masquée des icones du systray. Sur XP elle est inefficace pour éjecter un disque dur USB dont la fenêtre est restée ouverte :
Problème lors de l'éjection de Périphérique de stockage de masse USB.
Impossible d'arrêter le périphérique 'Volume générique' actuellement. Réessayez de l'arrêter ultérieurement.

C'est arrangé sur WIN7. Plus besoin de fermer la fenêtre avant de cliquer sur l'icone. Si WIN7 affiche un message c'est qu'il y a vraiment un fichier ouvert sur le volume

Avec les clés USB on peut utiliser "Éjecter" du Menu Contextuel de l'explorateur de fichiers (WIN+E), mais on remarque que si la fenêtre se ferme bien, l'icône reste en place et le témoin situé sur la clé reste allumé ou se met à clignoter. Et, on ne sait pas pourquoi, "Éjecter" n'est pas disponible pour les disques dur USB.

Nous allons essayer de voir s'il est possible de faire autrement, en cliquant sur un exécutable présent sur la clé, et par conséquent toujours disponible, et sans problème d'identification du périphérique. On vérifiera que le témoin de la clé USB s'éteint. Pour les disques durs externes, le problème est abordé vers la fin de l'article.

Avantages d'un utilitaire d'éjection placé sur le volume amovible

Lancer une commande depuis le périphérique est une excellente façon, habituellement, de se débarrasser du problème de la lettre du volume. C'est une technique que j'ai beaucoup utilisée dans "Changer la lettre d'un lecteur amovible".

Rappel : les clés USB sont des instruments peu sûrs de stockage. Faites des copies.

 

 

Ceux qui n'aiment pas les lignes de commandes et qui n'ont pas envie de se taper l'historique de mes différents essais devraient aller directement à EjectUSB.

DEVEJECT

L'utilitaire DEVEJECT permet de déconnecter en lignes de commandes les périphériques USB.
Un batch sur une clé USB permet de la déconnecter d'un double-clic sans faire appel à l'icône "Supprimer votre périphérique en toute sécurité" de la Zone de Notification.
Sécurité : Si un fichier de la clé est en cours d'utilisation la commande échoue. C'est du moins ce que j'ai observé, mais il semble que ce ne soit pas toujours vrai.

Après avoir lu Raccourci pour déconnexion propre de clef usb télécharger DEVEJECT

Usage:
deveject -EjectDrive:<Drive>|-EjectName:<Name>|-EjectId:<DeviceId> [-v] [-Debug]

Attention, les paramètres sont sensibles à la casse :
-Ejectdrive n'est pas reconnu, bien écrire : -EjectDrive



LETTRE DU VOLUME

deveject -EjectDrive:u:
Ejecting 'Volume gÚnÚrique' [STORAGE\REMOVABLEMEDIA\7&21A9E55B&0&RM]...ok.
1 device(s) ejected.



NOM du type de périphérique

deveject -EjectName:"Périphérique de stockage de masse USB"
Ejecting 'PÚriphÚrique de stockage de masse USB' [USB\VID_FFAE&PID_C7BA\123456789ABCDEF]...ok.
1 device(s) ejected.

 


BATCH

On veut déconnecter la clé en cliquant sur un batch contenu sur celle-ci. Il n'y a rien à installer sur l'ordinateur hôte.
Copier ces fichiers sur la clé:

deveject.exe
EjectClef.cmd

EjectClef.cmd copie deveject.exe dans le dossier temporaire %TEMP%.
Il crée un second fichier de commande nommé Deveject.cmd dans le Temporaire.
Ensuite il change le répertoire, libérant ainsi la clé, pour travailler dans %TEMP%.
Le fichier de commandes %TEMP%\Deveject.cmd est lancé et déconnecte tous les périphériques de stockage de masse USB, puis nettoie le Temporaire

 

EjectClef.cmd

copy deveject.exe %TEMP%

echo DEVEJECT -EjectName:"P‚riph‚rique de stockage de masse USB">%TEMP%\DEVEJECT.CMD
echo DEL %TEMP%\deveject.exe>>%TEMP%\DEVEJECT.CMD
echo DEL %TEMP%\deveject.cmd>>%TEMP%\DEVEJECT.CMD

CD /D %TEMP%
DEVEJECT.CMD

- Le paramètre /D de la commande CD force le changement de volume en même temps que le changement de répertoire.
- Utiliser EDIT.COM pour éditer EjectClef.cmd à cause des accents.

 

UTILISATION

La fenêtre de la clé étant ouverte sur le bureau de l'ordinateur hôte, on clique sur EjectClef.cmd
Si aucun fichier n'est en cours d'utilisation, la fenêtre se ferme et la clé est déconnectée comme ceci :

deveject -EjectName:"Périphérique de stockage de masse USB"
Ejecting 'PÚriphÚrique de stockage de masse USB' [USB\VID_FFAE&PID_C7BA\123456789ABCDEF]...ok.
1 device(s) ejected.



Remarques :
Tant que la clé n'est pas physiquement déconnectée, le Gestionnaire de Périphériques présente un point d'exclamation jaune devant "Périphérique de stockage de masse USB".
Lorsqu'on retire la clé, ce Périphérique disparaît dans le Gestionnaire.

On peut trouver gênant que tous les Périphériques de stockage de masse USB soient éjectés (seulement s'ils ne sont pas utilisés). Le batch suivant montre comment utiliser la variable %~D0 contenant la lettre du volume USB à éjecter :

 

EjectClef+.cmd

:Copie de deveject.exe sur le disque interne
copy deveject.exe %TEMP%

:Creation d'un batch sur le disque dur
:la variable %~D0 contient la lettre du volume (par exemple U:)
echo DEVEJECT -EjectDrive:%~D0 >%TEMP%\tmp.bat
echo DEL %TEMP%\deveject.exe>>%TEMP%\tmp.bat
echo DEL %TEMP%\deveject.cmd>>%TEMP%\tmp.bat

CD /D %TEMP%

TMP.BAT

 


SYNC de Sysinternals

Par Mark Russinovich
Paru le 01 novembre 2006
Sync permet de savoir si les données sont écrites sur le volume et non pas en attente d'écriture.
Sync permet également de traiter les lecteurs amovibles avant déconnexion.
Sync nécessite des privilèges d'administrateur pour s'exécuter.

Utilisation : sync [-r] [-e] [liste de lettres de lecteur]
-r    
Vide les lecteurs amovibles.
-e   
Éjecte les lecteurs amovibles.
       Si des lecteurs spécifiques sont indiqués Sync vide uniquement ces lecteurs.

Exemples :
Voir cette conversation.
Éjecter la clef U: avec la commande SYNC :

SYNC -R -E u
Sync 2.2: Disk Flusher for Windows 9x/Me/NT/2K/XP
Copyright (C) 1997-2004 Mark Russinovich
Sysinternals - www.sysinternals.com
Flushing: U

Suite à cette commande, la fenêtre U: de la clé USB se ferme. Si un document était ouvert, la fenêtre ne se ferme pas, la clé n'est pas éjectée. Si on ne précise pas la lettre, SYNC essaie toutes les lettres, ce qui a pour effet ... d'ouvrir les tiroirs des lecteurs de CD :

SYNC -R -E
Sync 2.2: Disk Flusher for Windows 9x/Me/NT/2K/XP
Copyright (C) 1997-2004 Mark Russinovich
Sysinternals - www.sysinternals.com
Flushing: A C D E F G H J K O P T

 

SyncKey.cmd

Le batch SyncKey.cmd est à copier sur la clé USB, ainsi que l'exécutable SYNC.EXE.
Voici le contenu de SyncKey.cmd :

:Copie de sync.exe dans le Temporaire du disque dur
copy sync.exe %TEMP%

:la variable %~D0 contient la lettre du volume (par exemple G:)

:Creation d'un batch sur le disque dur
echo SYNC.EXE -R -E %~D0 >%TEMP%\tmp.bat
echo DEL %TEMP%\sync.exe>>%TEMP%\tmp.bat
echo DEL %TEMP%\tmp.bat>>%TEMP%\tmp.bat

:on quitte le volume pour se positionner dans %TEMP%
CD /D %TEMP%

:et on execute %TEMP\tmp.bat
TMP.BAT


Il reste à retirer physiquement la clé USB pour que la lettre du volume n'apparaisse plus dans Poste de Travail et que l'icône "Retirer le périphérique en toute sécurité" soit effacée du Systray.

Sync.exe nécessitant des privilèges Administrateur pour fonctionner, il perd beaucoup de son intérêt. Heureusement ce n'est pas le cas pour DevEject.exe vu plus haut, ni pour l'utilitaire suivant :


USB Disk Ejector

Cet utilitaire tout récent résout tous les inconvénients observés ci-dessus. Il fonctionne de plus en mode graphique, ce qui ravira beaucoup d'utilisateurs. Le code est inspiré de http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx

Copier USB_Disk_Eject.exe sur la clé USB et cliquer sur le fichier. Une petite fenêtre permet de choisir le volume USB à traiter. Sans autre complication, la clé est éjectée. Sa fenêtre se ferme, elle n'est plus dans Poste de Travail, et  l'icône "Retirer le périphérique en toute sécurité" n'est plus dans le Systray. Il n'y a pas besoin d'être Administrateur.

Si on observe le dossier Temporaire (Exécuter>%TEMP%) on voit le programme se copier dans le Temporaire pour s'exécuter en libérant la clé, puis s'effacer.

Pour obtenir le même fonctionnement obtenu avec les batchs précédents, c'est-à-dire éjecter la clé en un seul double-clic depuis la clé sans avoir à préciser le lecteur à éjecter :

 

USB-Disk-Eject.cmd

:Copie de USB_Disk_Eject.exe dans le Temporaire du disque dur
copy USB_Disk_Eject.exe %TEMP%

:la variable %~D0 contient la lettre du volume (par exemple U:)

:Creation d'un batch sur le disque interne
echo USB_Disk_Eject.exe /REMOVELETTER %~D0 >%TEMP%\tmp.bat
echo DEL %TEMP%\USB_Disk_Eject.exe>>%TEMP%\tmp.bat
echo DEL %TEMP%\tmp.bat>>%TEMP%\tmp.bat

:on quitte le volume pour se positionner dans %TEMP%
CD /D %TEMP%

:et on exécute %TEMP\tmp.bat
TMP.BAT

Copier USB-Disk-Eject.cmd et  USB_Disk_Eject.exe sur la clé USB et cliquer sur le premier. la clé est éjectée, et sa fenêtre se ferme. On va voir que ce n'est pas le cas pour les disques externes, pour lesquels il faudra fermer la fenêtre avant.

 

 

Le problème des disques externes

On a vu plus haut que,  contrairement aux clés USB, "Éjecter" n'était pas disponible dans le menu contextuel des disques externes.

Mauvaise nouvelle, aucune des astuces vues jusqu'ici ne fonctionne pour un disque dur externe, même si on a optimisé celui-ci pour une suppression rapide, et supprimé la surveillance du volume. Il faut que la fenêtre du disque soit fermée avant d'utiliser USB Disk Ejector, ce qui enlève un peu de son intérêt. Une prochaine version verra sans doute ce point s'améliorer.

Voici ce qu'on constate  :

Après avoir cliqué sur USB Disk Eject.exe

Un double-clic comme indiqué donne le résultat suivant :

Ceci est dû au fait que la fenêtre du disque externe est ouverte.

Si on copie USB_Disk_Eject.exe sur le Bureau par exemple et qu'on l'exécute en ayant pris la précaution de fermer la fenêtre de l'explorateur de fichiers montrant le contenu du volume externe, l'éjection est effective. Suite à l'éjection, le message devient  :

La cause est que le programme actualise l'affichage des lecteurs connectés. Comme c'était le seul, il n'y en a plus.

 

USB_Disk_Eject.exe est utilisable en lignes de commandes

On obtient ce panel en tapant la commande USB_Disk_Eject.exe /?

Le fichier à télécharger USBDiskEjector.zip contient l'exécutable et le fichier d'aide USB Disk Ejector.html

 

USB-Disk-Eject+

Pour résoudre le problème posé par les disques, ce script AutoHotkey permet d'envoyer la combinaison ALT+F4 à la fenêtre active (celle qui montre le contenu du disque externe qui contient le script sur lequel on clique). La fenêtre se ferme. La commande suivante provoque l'éjection du disque USB avec l'utilisation du commutateur /REMOVETHIS :

Send !{F4}
Run USB_Disk_Eject.exe /REMOVETHIS

Comme tout le monde n'a pas installé AutoHotkey, voici le script compilé :

USB-Disk-Eject+.exe

Copier USB_Disk_Eject.exe et USB-Disk-Eject+.exe à la racine des disques et des clés USB. Cliquer sur USB-Disk-Eject+.exe pour éjecter rapidement le volume. Ce script fonctionne également (chez moi) pour les clés USB. Ça fait très bon ménage avec Change Volume Drive Letter, c'est très pratique.

 

USB-Disk-Eject+.vbs

Ce script VBS fait la même chose

Set Shell = WScript.CreateObject("WScript.Shell")
shell.run "USB_Disk_Eject.exe /REMOVETHIS"
Shell.Popup "Si message d'erreur, ne pas débrancher."&VBCRLF&_
"L'icône du Systray devrait disparaitre"&VBCRLF&_
"si pas d'autre volume connecté. Cliquer dessus pour confirmer.", 3
'fermer la fenêtre en envoyant ALT+Espace+f
Shell.SendKeys "(% )f"

 

 

EjectUSB

L'outil parfait est arrivé. Copier EjectUSB sur la clé. Exécuter EjectUSB. La clé est flushée et éjectée.

Téléchargement

Logiciels anglais : Outils système : Divers
http://www.gratilog.net/xoops/modules/mydownloads/viewcat.php?cid=221
http://www.gratilog.net/xoops/modules/mydownloads/singlefile.php?lid=1763
Site de l'auteur
http://www.pocketappreview.com  - commentaires -
http://www.pocketappreview.com/main/media//software_zip/EjectUSB.zip
Code Source (Autoit3) :
http://www.pocketappreview.com/main/item/ejectusb
http://www.pocketappreview.com/main/media//software_zip/EjectUSB_src.zip
Le début du script résume ses possibilités :
 # EJECTUSB.AU3
 #
 # AI3 Script - EjectUSB - version 1.6
 #
 # Designed to be a simple utility to close all programs running from a specified drive or
 # folder and then attempt ejection if a drive was specified. Extended functionality
 # includes closing Explorer windows and removing registry entries and Recent Document
 # shortcuts referencing the specified drive or folder.
 #
 # Prepared by William Hedrick

Utilisation

Décompresser EjectUSB.exe sur la clé USB. Exécuter EjectUSB. La clé est éjectée.
Simple en utilisation standard, l'utilitaire peut faire face à des situations complexes, lire attentivement EjectUSB.txt
EjectUSB peut être utilisé seul ou en lignes de commandes, affiné avec un fichier ejectusb.ini, et enfin, cerise sur le gâteau, en corrélation avec d'autres logiciels comme Unlocker, Sync, et même USB_Disk_Eject.exe vu ci-dessus. L'outil vise donc à très facile d'utilisation, tout en permettant d'autres scénarios plus complexes. On peut par exemple demander l'arrêt d'un programme, et indiquer diverses préférences. Il devrait ainsi s'adapter à tous les besoins. Exemple d'utilisation

Examen du contenu de EjectUSB.zip

Outre l'utilitaire EjectUSB.exe le zip contient les fichiers suivants

EjectUSB peut être renommé sans causer de dysfonctionnement. Par exemple zzejectusb.exe ou _ejectusb.exe seront faciles à trouver.
L'utilisation accidentelle dans un dossier du disque dur au lieu d'une clé USB n'a pas d'autre conséquence que la fermeture du dossier.
EjectUSB fonctionne tout aussi bien avec une clé USB formatée NTFS malgré les particularités de ce format (surveillance disque).
EjectUSB fonctionne avec un disque externe USB; il ferme la fenêtre, ce qui libère le disque et permet son éjection.
Si le disque a plusieurs partitions, il faut être patient, c'est un peu long pour obtenir "Vous pouvez retirer ..."

Batch pour ne pas faire les opérations de nettoyage, seulement éjecter le volume amovible (très rapide) :
Créer un fichier texte avec cette commande et le nommer "eject.cmd"
ejectusb /eject

 "Windows ne trouve pas 'EjectUSB.exe'. Vérifiez que vous avez entré le nom correct, puis réessayez."

On clique sur [OK] et le périphérique est quand même éjecté.

Contournement :
Par défaut EjectUSB tente un nettoyage dans le dossier Recent des raccourcis vers les fichiers récemment utilisés du périphérique que l'on éjecte. Il nettoie également les clés du registre concernées, les connaisseurs examineront le script pour les détails. Il tente également d'arrêter les programmes qui pourraient empêcher l'éjection. Si les options par défaut de Setting.bat ne conviennent pas, utiliser le commutateur /eject qui permet de bypasser cet aspect du programme (ejectusb.txt pour plus d'infos). Essayer d'affiner les options avec Settings.bat. On pourra également rechercher avec l'observateur d'événements ou Process Monitor la cause du malaise. C'est peut-être un anti-virus, un problème de droits d'accès, ou le dossier Recent qui engendre le souci.


 

Réactiver une clé USB éjectée

http://fspsa.free.fr/lettre-lecteur-amovible.htm#reactiver-une-clef-usb-ejectee
http://fspsa.free.fr/lettre-lecteur-amovible.htm#removedrive-et-restartsrdev

Pour des raisons d'accessibilité il peut être souhaité de pouvoir réafficher par programme un volume USB alors qu'on l'a "éjecté" par erreur. RemoveDrive a pour avantage de préparer le volume à cette éventualité.  

Comme la question a été traitée par l'auteur de USBDLM, elle est abordée dans l'article Changer la Lettre d'un Lecteur Amovible, à la suite des présentations de USBDLM et ListUsbDrives ==> Réactiver une clé USB éjectée.

 

Autres articles en relation

Changer la Lettre d'un Lecteur Amovible
Réactiver une clé USB éjectée
Contamination par les lecteurs amovibles

Liens

Tutoriel de Batch par MC
http://fspsa.free.fr/vbscripting.htm
http://www.raymond.cc/blog/archives/2008/03/01/how-to-fix-problem-ejecting-usb-mass-storage-device-error
http://www.raymond.cc/blog/archives/2008/03/01/how-to-fix-problem-ejecting-usb-mass-storage-device-error/fr

 


Merci d'avoir lu jusqu'ici !
Retour au début
Les restes du site
JF (Jean-François)

compteur Free
Créée le 5/05/2006