Sie sind auf Seite 1von 9

EjectUSB - version 1.

6
by William Hedrick
Designed to be a simple utility to close all programs running from a specified d
rive or
folder and then attempt ejection if a drive was specified. Extended functionalit
y includes
flushing the file cache, closing Explorer windows and removing registry entries
and Recent
Document shortcuts referencing the specified drive or folder.
[00]============================================================================
==========
.: Contents
[01] Quick Start
[02] Settings
[03] Command Line Switches
[04] External Utility Support
[05] Frequently Asked Questions
[06] Change Log
[07] Acknowledgements
[08] Default INI File
[09] Disclaimer / License
[01]============================================================================
==========
.: Quick Start
EjectUSB reads its settings from EjectUSB.ini (in the same folder as EjectUSB.ex
e).
If EjectUSB.ini does not exist, EjectUSB will run with default settings. EjectUS
B accepts
a drive letter or folder path as a command line argument (but doesn't require it
).
Default settings are equivalent to all options being set to true and no inclusio
ns or
exclusions. EjectUSB will detect the drive letter it was run from if no drive le
tter or
folder path is given via a command line argument.
EjectUSB will flush the file cache for the target location, close all programs r
unning
from the target location, close any Explorer windows open to the target location
, remove
Windows MUI and MRU entries and Recent Document shortcuts related to the target
location,
and attempt to eject the specified drive (if the target location was a drive let
ter).
[02]============================================================================
==========
.: Settings
In EjectUSB.ini, the settings are presented thusly:
[Settings]
TimeToWait=
DoNotFlush=
DoNotClose=
NoPrograms=
NoGraceful=
NoExplorer=
DoNotClean=
NoRegistry=
NoFirewall=
NoShortcut=
DoNotSubst=
NoRedirect=
DoNotEject=
NoEjectAPI=
NoFakedMsg=
[Exclusions]
[Inclusions]
TimeToWait is the amount of time in seconds to wait for programs to close (and o
ther
similar functions that wait for completion such as searching for visible windows
).
Default value is 5.
DoNotFlush determines if EjectUSB will attempt to flush the file cache for the d
rive
specified (even in the presence of external ejection utilities).
A setting of 1 (or anything besides 0 or false) disables file cache flushing.
Default value is 0.
DoNotClose supersedes NoPrograms and NoExplorer meaning if it's set to 1 (or any
thing
besides 0 or false), no programs or explorer windows will be closed. If 0 (or fa
lse), then
NoPrograms, NoGraceful, and NoExplorer settings are used.
Default value is 0.
NoPrograms determines if EjectUSB will close programs running from the specified
location.
A setting of 1 (or anything besides 0 or false) disables this functionality.
NoPrograms supersedes NoGraceful meaning if it's set to 1 (or anything besides 0
or
false), the NoGraceful setting won't be used (as it won't be necessary).
Default value is 0.
NoGraceful determines if EjectUSB will first attempt to "gracefully" (rather tha
n
forcibly) close programs running from the specified location.
A setting of 1 (or anything besides 0 or false) disables this graceful closing.
Default value is 0.
NoExplorer determines if EjectUSB will close explorer windows currently viewing
the
specified location.
A setting of 1 (or anything besides 0 or false) disables closing explorer window
s.
Default value is 0.
DoNotClean supersedes NoRegistry, NoFirewall and NoShortcut meaning if it's set
to 1 (or
anything besides 0 or false), no cleanup functions will be performed. If 0 (or f
alse),
then NoRegistry, NoFirewall and NoShortcut settings are used.
Default value is 0.
NoRegistry determines if EjectUSB will remove references to the specified locati
on from
Windows MUI and MRU registry entries.
A setting of 1 (or anything besides 0 or false) disables MUI and MRU registry cl
eanup.
Default value is 0.
NoFirewall determines if EjectUSB will remove firewall policy entries related to
the
specified location from the registry.
A setting of 1 (or anything besides 0 or false) disables firewall policy cleanup
.
Default value is 0.
NoShortcut determines if EjectUSB will remove recent document shortcuts related
to the
specified location from the recent documents folder.
A setting of 1 (or anything besides 0 or false) disables recent document cleanup
.
Default value is 0.
DoNotSubst supersedes NoRedirect meaning if it's set to 1 (or anything besides 0
or
false), the target location will not be tested to see if it's a Subst drive. If
0 (or
false), then EjectUSB will check if the drive is a Subst drive and ''unsubst'' t
he drive
before ejection.
Default value is 0.
NoRedirect determines if EjectUSB will change the target location to the source
of the
Subst drive.
A setting of 1 (or anything besides 0 or false) disables target location redirec
tion.
Default value is 0.
DoNotEject supersedes NoEjectAPI meaning if it's set to 1 (or anything besides 0
or
false), automatic drive ejection will not occur (even in the presence of Ejectio
n Helper
Utilities). If 0 (or false), then EjectUSB will attempt to eject the drive speci
fied.
Default value is 0.
NoEjectAPI determines if EjectUSB will use its internal API-based ejection funct
ion (if no
Ejection Helper Utilities are present).
A setting of 1 (or anything besides 0 or false) disables internal API-based ejec
tion and
instead relies on manipulating the Safely Remove Hardware dialogs.
Default value is 0.
NoFakedMsg determines if EjectUSB will use its internal message balloon when eje
ction
succeeds, rather than triggering a delayed success message from Windows.
A setting of 0 (or false) makes EjectUSB create a message balloon on successful
ejection.
Default value is 0.
Exclusions list part of a filename that won't be automatically closed. Registry
wrappers
and portable launchers should be excluded. Entries should be numbered sequential
ly and
there should be realistically no limit to the number of entries.
Capitalization does not matter (NOT case sensitive).
There are no default entries; some example entries are:
0=Pocket
1=Portable
2=PStart.exe
Inclusions list part of a filename that will be automatically closed even if the
y're not
running from the removable drive. Entries should be numbered sequentially and th
ere should
be realistically no limit to the number of entries.
Capitalization does not matter (NOT case sensitive).
There are no default entries; some example entries are:
0=.tmp\stdrt.exe
1=temp\aicon.exe
[03]============================================================================
==========
.: Command Line Switches
EjectUSB supports 6 command line arguments (which must be separated by spaces):
drive letter or folder path (Z:\, Z:\folder, "Z:\folder\sub folder")
/eject
/force
/ini
/nobat
/settings
If the path contains spaces it must be surrounded by quotation marks. A drive le
tter can
be specified as a single character (Z), or letter and colon (Z:), or a letter, c
olon and
backslash (Z:\). Capitalization does not matter (NOT case sensitive).
/eject ignores configuration file settings and attempts to eject the specified d
rive; this
bypasses all other functions (program closing, registry cleanup, etc.).
/force bypasses the validation check on the specified location. Its purpose is t
o utilize
EjectUSB's cleanup functions for a drive that isn't currently connected.
/ini followed by a filename explicitly specifies a settings file. Example: /ini
config.ini
/nobat ignores the presence of a hybrid batch file. Its purpose is to prevent in
finite
loops if EjectUSB is run from within the hybrid batch file.
/settings displays a settings interface window to make editing a settings file e
asier.
[04]============================================================================
==========
.: External Utility Support
EjectUSB can interface with various utilities to aid in drive ejection. These ca
n be
referred to as Ejection Helper Utilities. The list below is in order of preceden
ce.
If located in the same folder as EjectUSB (and named the same as in the followin
g list)
the following utilities will be used to eject a drive instead of using EjectUSB'
s internal
ejection function:
- RemoveDrive.exe http://www.uwe-sieber.de/drivetools_e.html#RemoveDrive
- USB_Disk_Eject.exe http://quick.mixnmojo.com/software#usbdiskeject
- DevEject.exe http://www.withopf.com/tools/deveject/
- USBDeview.exe http://www.nirsoft.net/utils/usb_devices_view.html
- AutoStart.exe / AutoEject.exe http://xpt.nl/products-autostart
- EjectMedia.exe http://www.uwe-sieber.de/drivetools_e.html#EjectMedia
EjectMedia is also supported but is intended to be used with card readers, CDRom
drives or
other devices with ejectable media. It takes precedence over the above utilities
.
EjectUSB can use the following utilities to enumerate open file handles and clos
e programs
with open file handles associated with the specified location. These can be refe
rred to as
Handle Helper Utilities. The list below is in order of precedence.
If located in the same folder as EjectUSB (and named the same as in the followin
g list)
the following utilities will be used to close open file handles:
- Unlocker.exe http://ccollomb.free.fr/unlocker/
UnlockerDriver5.sys is also required. Both can be UniExtract'd from the instal
ler.
- Handle.exe http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/H
andle.mspx
Version 3.20 or lower of Handle is required for compatibility with Win9x.
EjectUSB can use the following utilities to aid in file cache flushing. These ca
n be
referred to as File Cache Helper Utilities. The list below is in order of preced
ence.
If located in the same folder as EjectUSB (and named the same as in the followin
g list)
the following utilities will be used to flush the file cache instead of using Ej
ectUSB's
internal file cache flushing function:
- Sync.exe http://www.microsoft.com/technet/sysinternals/FileAndDisk/Sync.mspx
[05]============================================================================
==========
.: Frequently Asked Questions
- Why is my drive failing to eject?
There are many things that can prevent a removable drive from getting permission
from
Windows to safely eject. The usual cause, however, is that a file that is locate
d on the
removable drive is either running (if it's a program) or is in use by a program.
- Is it safe to unplug my drive even if Windows says it's still in use?
The short answer is: usually. Windows isn't telling you it isn't safe to be mean
or
annoying, but to prevent data loss or damage to your drive. The entire purpose o
f EjectUSB
is to get Windows to turn off your drive so it's 100% safe to remove without fea
r of
losing a file or causing damage and to accomplish this as quickly as possible.
- EjectUSB is failing to eject my drive, what can I do?
If you have administrator privileges on the computer where EjectUSB is failing t
o eject a
drive, one of the Handle Helper Utilities (listed in the previous section) may b
e able to
solve the problem.
Try increasing the TimeToWait value in the configuration INI file. While 5 (seco
nds) is
default and has been adequate in all testing environments, a larger value might
give
Windows enough time to allow for a proper ejection.
As an alternative, download one of the Ejection Helper Utilities (listed in the
previous
section) and place the executable in the same folder as EjectUSB.
- Can I speed up EjectUSB so it ejects a drive more quickly?
You could disable graceful closing and the cleanup routines to save a few second
s.
Setting NoFakedMsg to 1 (or anything besides 0 or false) can delay the ejection
success
message by a significant amount of time.
Decreasing the TimeToWait value may speed things up, but could cause ejection to
fail.
- My drive hasn't ejected and there's an EjectUSB icon in my system tray, what's
wrong?
EjectUSB is repeatedly trying to eject the drive but is failing; click the Eject
USB tray
icon and choose Exit, make sure the drive is not in use, and then try again.
[06]============================================================================
==========
.: Change Log
Version 1.6
- Bug fix: EjectUSB no longer triggers file access errors on WinXP when run from
read-only
media when trying to load its hourglass tray icon.
- Bug fix: Sysinternals registry keys are no longer erroneously deleted.
Version 1.5
- Bug fix: EjectUSB's ejection success message will more reliably appear on Vist
a.
- Bug fix: EjectUSB's ejection success message will only disappear when the ejec
ted drive
is unplugged instead of disappearing when any USB device is unplugged.
- Bug fix: EjectUSB will no longer display an error if WMI functions fail.
- Improvement: EjectUSB's ejection success message now displays the ejected driv
e's name.
- Addition: Added /ini command line argument to allow a settings file to be spec
ified.
- Addition: Added /settings command line argument to display a settings interfac
e window.
- Addition: Included Settings.bat with the download to make adjusting settings e
asier.
- Change: Modified the manifest information.
Version 1.4
- Bug fix: Graceful program closing no longer only targets programs with a visib
le window.
- Bug fix: Flushing file buffers can no longer cause ejection to fail.
- Improvement: Dead tray icon cleanup is more resilient and slightly faster.
- Improvement: EjectUSB can now generate its own ejection success message. This
will make
ejection seem much faster on most computers.
- Addition: Added NoFakedMsg setting to the configuration file format.
Version 1.3
- Bug fix: Program closing on Win9x works again (was broken in 1.2).
- Bug fix: Fixed issues on Win9x when running EjectUSB from a drive's root folde
r.
- Improvement: Implemented hybrid batch scripting. This provides theorhetical su
pport for
TrueCrypt and combination flash card / flash drives as well as conditional ope
rations.
- Improvement: EjectUSB can now interface with EjectMedia.exe to eject flash car
ds / CDs.
- Improvement: Implemented support for Subst.
- Addition: Added DoNotSubst and NoRedirect settings to the configuration file f
ormat.
- Addition: Added /nobat command line argument to disable use of the hybrid batc
h file (if
present). Meant to be used within the hybrid batch file if starting another in
stance of
EjectUSB to prevent infinite loops.
Version 1.2
- Bug fix: Improved handling of relative paths (\ and ..).
- Improvement: Implemented API-based ejection.
- Improvement: Implemented file cache flushing. Requires admin privileges.
- Improvement: EjectUSB can now interface with Sync (from Sysinternals) to flush
the file
cache (instead of using its own internal file cache flushing function). Requir
es admin
privileges.
- Improvement: Improved command line argument parsing; drive letter or folder pa
th no
longer are required at all and no longer must be the first command line argume
nt.
- Improvement: Efficiency improvements related to DLL calls.
- Addition: Added DoNotFlush and NoEjectAPI settings to the configuration file f
ormat.
- Change: RemoveDrive.exe is called with the -L switch to loop until successful
ejection.
This can be aborted by closing the RemoveDrive.exe console window.
- Change: DevEject.exe is now launched hidden.
- Change: Added current version number to EjectUSB.exe version info.
Version 1.1
- Bug fix: Improved ejection capability via EjectUSB's own internal ejection rou
tine.
- Bug fix: Improved command line argument and input parsing for handle.exe; ther
e were
some formatting differences between the output on Win9x and WinXP.
- Bug fix: TimeToWait is now a maximum per ''phase'' rather than per program; in
rare
cases EjectUSB could wait for multiple minutes on closing programs with the de
fault
TimeToWait value of 5 (seconds).
- Bug fix: Cleaning up dead tray icons was triggered by faulty criteria; in simp
le terms,
dead tray icon cleanup was occuring when it didn't need to (wasting up to 1 se
cond).
- Improvement: Minor efficiency improvements related to the previous two changes
.
- Improvement: EjectUSB can now interface with Unlocker to close open file handl
es; simply
UniExtract the Unlocker installer and put Unlocker.exe and UnlockerDriver5.sys
in the
same folder as EjectUSB. Unlocker requires admin privileges and doesn't work o
n Win9x.
- Improvement: Added a FAQ section to the documentation.
- Change: Slight change to the EjectUSB logo.
- Change: Separated the source code into its own ZIP file. Source code for Eject
USB will
always be released with each version of EjectUSB.
Version 1.0
- Initial release.
[07]============================================================================
==========
.: Acknowledgements
ashghost - For providing registry exports to help me build the cleanup routines.
MiDoJo - For providing registry exports and patiently helping me test Vista comp
atibility.
Steen - For helping track down a critical Win9x compatibility problem.
guinness - For providing TrueCrypt support testing and bug testing.
larry - For locating a registry cleanup flaw (related to Sync and Handle).
[08]============================================================================
==========
.: Default INI File
[Settings]
TimeToWait=5
DoNotFlush=0
DoNotClose=0
NoPrograms=0
NoGraceful=0
NoExplorer=0
DoNotClean=0
NoRegistry=0
NoFirewall=0
NoShortcut=0
DoNotSubst=0
NoRedirect=0
DoNotEject=0
NoEjectAPI=0
NoFakedMsg=0
[Exclusions]
0=Pocket
1=Portable
2=PStart.exe
[Inclusions]
0=.tmp\stdrt.exe
[09]============================================================================
==========
.: Disclaimer / License
Your use of EjectUSB is at your own risk and no guarantee is given as to the ope
ration or
performance of said program. You may reverse engineer and/or use the source code
for
EjectUSB so long as credit is given to the original author (William Hedrick) for
any
derivative works. The EjectUSB logo may not be used for any purposes except as a
n icon
to represent EjectUSB.

Das könnte Ihnen auch gefallen