Help - Search - Members - Calendar
Full Version: Eject Usb And Firewire Drives
The CD Forum > Bart's PE Builder > Plugins
Kalonji
This tiny prog can unmount attached FireWire or USB drives.

Now I can remove my USB stick without the risk of loosing data (AFAIK PE lacks of this functionality or I just don't know how to do it).
There are more options such as device id or device name. Refer to the commandline output for the syntax of DevEject.

@Bart: I've adapted your checkdisk.cmd to fit my needs. wink.gif

deveject.cmd
CODE
@echo off
rem deveject.cmd
rem Created by Bart Lagerweij, modified by Kalonji
setlocal
echo DEVEJECT.CMD: Starting...
echo.
%~d0
cd "%~dp0"
set _drive=
echo Please enter the drive to unmount (for example "x:" or "all" for all
echo attached USB mass storage devices)...
set /p _drive=Enter drive:
if "%_drive%" == "" goto _end
if "%_drive%" == "all" goto _all
:_run
echo Running: deveject.exe -EjectDrive:%_drive%
deveject.exe -EjectDrive:%_drive%
echo.
goto _end
:_all
echo Running: deveject.exe -EjectName:"USB Mass Storage Device"
deveject.exe -EjectName:"USB Mass Storage Device"
echo.
goto _end
:_end
echo.
pause
endlocal


deveject.inf
CODE
; deveject.inf
; PE Builder v3 plug-in INF file for DevEject
; Created by Bart Lagerweij

[Version]
Signature= "$Windows NT$"

[PEBuilder]
Name="DevEject"
Enable=1
Help="deveject.htm"

[WinntDirectories]
a=Programs\deveject,2

[SourceDisksFiles]
deveject.cmd=a,,1
deveject.exe=a,,1

[Append]
nu2menu.xml, deveject_nu2menu.xml


deveject_nu2menu.xml
CODE
<!-- Nu2Menu entry for DevEject -->
<NU2MENU>
    <MENU ID="Storage">      
 <MITEM TYPE="ITEM" DISABLED="@Not(@FileExists(@GetProgramDrive()\Programs\deveject\deveject.cmd))" CMD="RUN" FUNC="@GetProgramDrive()\Programs\deveject\deveject.cmd">DevEject</MITEM>
    </MENU>
</NU2MENU>


deveject.htm
CODE
<html>
<head></head>
<body>
<i>PE Builder v3 plugin</i>
<hr>
<h1>DevEject</h1>
<h3>Plugin by Kalonji</h3>
<a target="_blank" href="http://www.heise.de/ct/03/25/links/206.shtml">DevEject</a>
by Matthias Withopf (c't magazine).<br>
<br>
DevEject is created to unmount external storage devices such as FireWire or USB drives<br>
by entering the corresponding driveletter. DevEject is free for use!
<br>
<br>
Before you can use the plugin you must copy some files to the plugin directory.<br>
<a target="_blank" href="ftp://ftp.heise.de/pub/ct/listings/0316-208.zip">Download</a> DevEject.
Copy the following files into
the <tt>plugin\deveject</tt> directory:<br>
<tt>deveject.cmd, deveject.exe, deveject.inf, deveject.htm, deveject_nu2menu.xml</tt><br>
<br>
<hr>
<i>PE Builder
Copyright (c) 2002-2003 Bart Lagerweij. All rights reserved.</i><br>
</body>
</html>


Cheers, Kalonji.
Kalonji
I've revised my deveject.cmd and added an exit routine for easy use.

Kind reagrds, Kalonji

deveject.cmd
CODE
@echo off

rem deveject.cmd
rem Created by Kalonji
rem Version 1.1

title DevEject

setlocal

%~d0
cd "%~dp0"

:_inp
cls
set _drive=
echo DEVEJECT.CMD: Starting...
echo.
echo Please enter the drive to unmount (eg: "x" or "all" for all
echo attached USB Mass Storage Devices).
echo.
echo Press [ENTER] to abort.
echo.
echo.
set /p _drive=Enter drive:
echo.
if "%_drive%" == "" goto _ext
if "%_drive%" == "all" goto _all

:_run
echo Running: deveject.exe -EjectDrive:%_drive%:
echo.
deveject.exe -EjectDrive:%_drive%:
goto _ext

:_all
echo Running: deveject.exe -EjectName:"USB Mass Storage Device"
echo.
deveject.exe -EjectName:"USB Mass Storage Device"
goto _ext

:_ext
set _exit=
echo.
echo Do you want to exit?
echo.
echo.
set /p _exit=Enter [Y]es or [N]o:
if /I "%_exit%" == "" goto _ext
if /I "%_exit%" == "n" goto _inp
if /I "%_exit%" == "y" goto _end

:_end
endlocal
Stever
Great work. Thanks! wink.gif

Steve Smith
SLiC
Forgive my ignorance, but should deveject.cpp be included in the deveject.inf to be copied to the PE build?
Z.C.
QUOTE (SLiC @ Jan 1 2004, 10:35 AM)
Forgive my ignorance, but should deveject.cpp be included in the deveject.inf to be copied to the PE build?

No, deveject.cpp is the source code and is included with the app in case someone wants to 1) use it in their own app, 2) just curious about how it works, or 3) modify it to do more or fix a bug and rebuild it themselves

Deveject.cpp is NOT required to run the app.

ZC
Kalonji
@slic:

Nope it's just the c++ source code of deveject. No need to be included into pebldr.

Regards, Kalonji
Kalonji
Here's the new version of my deveject.cmd.

Changes:

- Startup menu added
- Eject FireWire devices in frontend
- Commandline input
- List removable and all devices

Regards, Kalonji

CODE
@echo off

REM deveject.cmd
REM Created by Kalonji
REM Version 1.2

echo DEVEJECT.CMD: Starting...

setlocal

%~d0
cd "%~dp0"

:_tsk
title DevEject
set _task=
cls
echo What do you want to do?
echo.
echo 1: Unmount device(s)
echo 2: Commandline input
echo 3: List removeable devices
echo 4: List all (also unremoveable) devices
echo.
echo Press [ENTER] to exit
echo.
set /p _task=Enter task:
echo.
if "%_task%" == "" goto _ext
cls
if "%_task%" == "1" goto _inp
if "%_task%" == "2" goto _cmd
if "%_task%" == "3" goto _lst
if "%_task%" == "4" goto _lstall

:_inp
title DevEject - Unmount devices
cls
set _drive=
echo Please enter the drive to unmount (eg: "x" for drive letter,
echo "usb" for all attached USB Mass Storage Devices or
echo "fw" for all attached FireWire devices).
echo.
echo Press [ENTER] to abort.
echo.
set /p _drive=Enter drive:
echo.
if "%_drive%" == "" goto _ext
if "%_drive%" == "usb" goto _usb
if "%_drive%" == "fw" goto _fw

:_run
echo Running: deveject.exe -EjectDrive:%_drive%:
echo.
deveject.exe -EjectDrive:%_drive%:
goto _ext

:_usb
echo Running: deveject.exe -EjectName:"USB Mass Storage Device"
echo.
deveject.exe -EjectName:"USB Mass Storage Device"
goto _ext

:_fw
echo Running: deveject.exe -EjectId:SBP2*
echo.
deveject.exe -EjectId:SBP2*
goto _ext

:_cmd
title DevEject - Commandline
echo Running: cmd /k deveject.exe
echo.
echo Usage: "deveject.exe -EjectDrive:<Drive>|-EjectName:<Name>|-EjectId:<DeviceId> [-v] [-Debug]"
echo.
echo You don't need to type the whole name or ID, you can also use "*" as wildcard.
echo.
echo Example 1: deveject -EjectDrive:x:
echo Example 2: deveject -EjectName:"USB ...*"
echo Example 3: deveject -EjectId:USB\...*
echo.
echo The following device(s) can be removed by the device name or device ID.
echo The 1st block ('...') of the program output describes the device name,
echo the 2nd block ('...\...\...') describes the device ID.
echo.
cmd /k deveject.exe
endlocal
exit

:_lst
echo Running: deveject.exe
echo.
deveject.exe
echo.
pause
goto _tsk

:_lstall
echo Running: deveject.exe -v
echo.
deveject.exe -v
echo.
pause
goto _tsk

:_ext
set _exit=
echo.
echo Do you want to exit?
echo.
echo.
set /p _exit=Enter [Y]es or [N]o:
if /I "%_exit%" == "" goto _ext
if /I "%_exit%" == "n" goto _tsk
if /I "%_exit%" == "y" goto _end

:_end
endlocal
exit
SportinSS
This plug in works great with XPE!! I love it.

Thank you so much!! =)

Tony
Kalonji
QUOTE (SportinSS @ Jan 18 2004, 04:27 AM)
This plug in works great with XPE!! I love it.

Thank you so much!! =)

Tony

Wow, thanks! Didn't check it with XPE, so I'm glad you consider my plug useful!
ivan
I'm totally new to this forum, so please don't be too harsh if this has already been pointed out elsewhere.

I've been using deveject for a while now, but there's a couple of things that still bug me:

1) Despite the world cup, i can't speak or understand German to save my life, let alone understand what the readme says, so I'd really apprciate it if someone gave me a hint as to the copyright and distribution of deveject. I'd like to distribute it, but if no can do then i'll only output info for users obtained from wmi and request them to eject devices.

2) Can anyone explain what the debug swith does. An example would be really forthcoming, as I've used the -v swith in all possible ways I could think of and nothing happens.

Regards,
IVAN
Ed_P
The readme.txt file says:

DevEject -- devices log out automatically, for Windows 2000/XP/2003 =================================================================
DevEject serves to log out external data storage units such as FireWire plates or USB sticks by program control with the operating system.

A closer description you find in c't to 16/03, S. 208.

DevEject.exe -- the executable program
DevEject.cpp -- source text in C++

according to http://world.altavista.com/tr

The fact that it was published indicates that he owns the copyright. Write to the author and see what he says about your desire to distribute his utility.

Use the links in the plugin's deveject.htm Help file to try to find the author.

http://www.heise.de/ct/03/25/links/206.shtml
Matthias Withopf (c't magazine)

You could also write (PM) to Kalonji at http://www.911cd.net/forums//index.php?showuser=2579 and see if he has a contact with the author.
ivan
@Ed_P

Thanks for the reply. I'll follow your suggestions and post the feedback on this thread.

I also found some other utils that do similar stuff with USB. I'll try them out before adding threads. Again, lots of stuff is in German.

IVAN
ivan
I'm still clueless about the debug switch. Anyone has any ideas here?
IVAN
ivan
I tried comipling the source with dev-c++ 4.9.9.2 and got the following error:
CODE
Compiler: Default compiler
Executing  g++.exe...
g++.exe "d:\0316_208\0316-208\deveject.cpp" -o "d:\0316_208\0316-208\deveject.exe"    -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include"  -I"C:\Dev-Cpp\include\c++\3.4.2\backward"  -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32"  -I"C:\Dev-Cpp\include\c++\3.4.2"  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib"
d:\0316_208\0316-208\deveject.cpp: In function `BOOL CompareWithWildcard(CHAR*, CHAR*)':
d:\0316_208\0316-208\deveject.cpp:323: error: `toupper' undeclared (first use this function)
d:\0316_208\0316-208\deveject.cpp:323: error: (Each undeclared identifier is reported only once for each function it appears in.)

Execution terminated


however, when substituting
CODE
if (toupper(*s1++) != toupper(*s2++))


for
CODE
if (s1++ != s2++)


compilation worked.

I also run the app and no prob.

Hope this helps others that might want to start playing with the source, which I must say, is quite complicated!

If deveject is problematic for other users, you can also read the following:

usb stuff

IVAN
Ed_P
QUOTE (ivan @ Jun 29 2006, 10:15 AM) *
If deveject is problematic for other users, you can also read the following:

usb stuff

IVAN

Wow!! Great link ivan. Especially the part that states:
QUOTE
But Windows XP optimizes and bundles write accesses to pen drives only when they are NTFS formated, so NTFS is the right choice.

Furthermore NTFS stores small files together with the file information so they are written into the same flash block which is the best that can happen.

Interesting. smile.gif
ivan
@Ed_P

To be honest, I'm not that concerned about flash memory sticks as much as wireless network devices using usb enabled with PnP (plug&Play). I get all my info (deviceId, name, etc) straight from wmi scripts and match the data from the registry.

The reason I'm after a util like deveject is that it's much neater and impressing to have a script do the removing of the device than having to ask the user to physically do it. I wannna take step by step, though, after I get a proper removal, I also wanna be able to mount it back (not needed for my purposes, but for the sake of completeness!). The catch is that when I use wmi scripts, these can only be used for Windows ME onwards, leaving win98 aside.

The documentation came in handy!
IVAN
ivan
i believe Matthias Withopf, the author of deveject can be found at

perfwatch@withopf.com

if anyone is interested. I sent him an e-mail asking for copyright info and posed the question on the debug switch too!

IVAN

does anyone know exactly how public domain is defined????
ivan
Ed_P
QUOTE (ivan @ Jun 29 2006, 11:05 PM) *
does anyone know exactly how public domain is defined????
ivan

Public domain

Roughly I think it means it has open access, anyone can use it, and no one can sell it or claim it as their own work.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2008 Invision Power Services, Inc.