#include #include #include #include #include #include #include #include #include #include #include int __cdecl main( int argc, char **argv ) { BYTE DriveNameBuffer[32]; HANDLE VolumeHandle; ULONG BytesTransferred; if( argc < 2 ) { printf( "usage: %s DriveLetter:\n", argv[0] ); exit(4); } memset( DriveNameBuffer, 0, sizeof( DriveNameBuffer ) ); strcat( DriveNameBuffer, "\\\\.\\" ); strcat( DriveNameBuffer, argv[1] ); // Open the volume with the DOS name. // VolumeHandle = CreateFile( DriveNameBuffer, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if( VolumeHandle == INVALID_HANDLE_VALUE ) { printf( "Unable to open %s [Error %d]\n", argv[1], GetLastError() ); exit(4); } // GetFile information. // if( !DeviceIoControl( VolumeHandle, IOCTL_CDROM_REMOVE_DEVICE, NULL, 0, NULL, 0, &BytesTransferred, NULL ) ) { printf( "Unable to remove device [Error %d].\n", GetLastError() ); CloseHandle( VolumeHandle ); exit(4); } else { printf( "Removed %s\n", argv[1] ); CloseHandle( VolumeHandle ); return 0; } }