The FSCTL_DISMOUNT_VOLUME DeviceIoControl operation dismounts a volume.
dwIoControlCode = FSCTL_DISMOUNT_VOLUME; // operation code lpInBuffer = NULL; // pointer to input buffer; not used; must be NULL nInBufferSize = 0; // size of input buffer; not used; must be zero lpOutBuffer ; // pointer to output buffer; not used; must be NULL nOutBufferSize ; // size of output buffer; not used; must be zero lpBytesReturned ; // pointer to DWORD used by DeviceIoControl function
If the operation succeeds, DeviceIoControl returns a nonzero value.
If the operation fails, DeviceIoControl returns zero. To get extended error information, call GetLastError.
The hDevice handle passed to DeviceIoControl must be a handle to a volume, opened for direct access. An application can obtain such a handle by calling CreateFile with lpFileName set to a string that looks like this:
\\.\X:
where X is a hard-drive partition letter, floppy disk drive, or CD-ROM drive. The application must also specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags in the dwShareMode parameter of CreateFile.
If the specified volume is locked, the operation fails.
A dismounted volume has the following properties:
The operating system tries to mount an unmounted volume as soon as any attempt is made to access it. For example, a call to GetLogicalDrives triggers the operating system to mount any unmounted volumes.
Dismounting a volume is useful whenever a volume needs to disappear for a while. For example, an application that changes a volume’s file system from FAT to NTFS might follow these steps:
A dismounting operation removes the volume from the FAT file system’s “awareness.” When the operating system mounts the volume, it appears as an NTFS volume.