This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ejecting a USB drive using Cygwin (sync)?


On Tue, 23 Jan 2018 14:13:24, Brian Inglis wrote:
I found the following utility works well without elevation - Windows code from
http://www.leapsecond.com/tools/eject.{c,exe}:

// eject -- Allow safe removal of USB thumb drive.
// - Command line tool to flush/dismount/eject USB drive.
// - Simpler than mouse clicking through taskbar "Safely Remove Hardware" icon.
// - Usable in batch file scripts.
// 02-Nov-2012 Tom Van Baak (tvb) www.LeapSecond.com/tools
...
// Per MSDN, follow procedure for safe removal of USB drive.
int drive_eject (char *drive)
{
    HANDLE hDev;
    // Convert vintage DOS drive letter to weird Windows object pathname.
    char path[10];
    sprintf(path, "\\\\.\\%s", drive);
    // Open (with write, but no lock) to flush pending writes.
    DEV_OPEN(path, GENERIC_READ | GENERIC_WRITE);
    FlushFileBuffers(hDev);
    CloseHandle(hDev);
    // Open (with read, and lock) to dismount and eject.
    DEV_OPEN(path, GENERIC_READ);
    DEV_IOCTL(FSCTL_LOCK_VOLUME);
    DEV_IOCTL(FSCTL_DISMOUNT_VOLUME);
    DEV_IOCTL(IOCTL_STORAGE_EJECT_MEDIA);
    DEV_IOCTL(FSCTL_UNLOCK_VOLUME);
    CloseHandle(hDev);
    return 0;
}

No, this is not the code from that site. The code is similar, but I see you have
at least removed some empty lines. If you are going to do so, you need to
clearly present said changes to the community - something like "adapted from
http://..."; or "modified from http://...";, etc.

Software copyright - even open source license is serious, and you should give it
due respect.


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]