FSCTL_DISMOUNT_VOLUME IOCTL (winioctl.h)

不論磁碟區目前是否正在使用中,卸除磁碟區。 如需詳細資訊,請參閱<備註>一節。

若要執行這項作業,請使用下列參數呼叫 DeviceIoControl 函 式。

C++
BOOL DeviceIoControl(
  (HANDLE) hDevice,            // handle to a volume
  (DWORD) FSCTL_DISMOUNT_VOLUME,   // dwIoControlCodeNULL,                        // lpInBuffer0,                           // nInBufferSizeNULL,                        // lpOutBuffer0,                           // nOutBufferSize(LPDWORD) lpBytesReturned,   // number of bytes returned
  (LPOVERLAPPED) lpOverlapped  // OVERLAPPED structure
);

備註

不論任何其他進程是否使用磁碟區, FSCTL_DISMOUNT_VOLUME 控制程式代碼都會嘗試卸除磁碟區,如果這些進程沒有保留磁碟區鎖定,這些進程可能會產生無法預期的結果。 如需鎖定磁碟區的相關信息,請參閱 FSCTL_LOCK_VOLUME

傳遞至 DeviceIoControlhDevice 句柄必須是磁碟區的句柄,且會開啟以供直接存取。 若要擷取磁碟區句柄,請呼叫 CreateFile,並將 lpFileName 參數設定為下列格式的字串:

\.\X

其中 X 是硬碟磁碟分區字母、磁碟驅動器或 CD-ROM 磁碟驅動器。 應用程式也必須在 CreateFiledwShareMode 參數中指定FILE_SHARE_READFILE_SHARE_WRITE旗標。

如果指定的磁碟區是系統磁碟區,或包含頁面檔案,作業就會失敗。

如果指定的磁碟區被另一個進程鎖定,作業就會失敗。 若要防止另一個進程鎖定磁碟區,請在開啟磁碟區時立即加以鎖定。

卸除的磁碟區具有下列屬性:

  • 沒有開啟的檔案。
  • 操作系統會偵測磁碟區。
當嘗試存取磁碟區時,操作系統會嘗試立即掛接未掛接的磁碟區。 例如,呼叫 GetLogicalDrives 會觸發作業系統掛接未掛接的磁碟區。

當磁碟區需要消失一段時間時,卸除磁碟區很有用。 例如,將磁碟區檔案系統從 FAT 檔案系統變更為 NTFS 檔案系統的應用程式可能會使用下列程式。

變更磁碟區文件系統

  1. 開啟磁碟區。
  2. 鎖定磁碟區。
  3. 格式化磁碟區。
  4. 卸除磁碟區。
  5. 解除鎖定磁碟區。
  6. 關閉磁碟區句柄。
卸除作業會從 FAT 檔案系統感知中移除磁碟區。 當操作系統掛接磁碟區時,它會顯示為NTFS檔案系統磁碟區。

在 Windows 8 和 Windows Server 2012 中,下列技術支援此程序代碼。

技術 支援
伺服器消息塊 (SMB) 3.0 通訊協定 No
SMB 3.0 透明故障轉移 (TFO) No
具有向外延展檔案共用的SMB 3.0 (SO) No
叢集共用磁碟區文件系統 (CsvFS) 請參閱批注
 

在 CsvFs 上,發出卸除的節點會看到一般卸除順序。 在所有其他節點上,FS 會將所有開啟的檔案失效。

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
標頭 winioctl.h (包含 Windows.h)

另請參閱

CreateFile

DeviceIoControl

ExitThread

FSCTL_LOCK_VOLUME

GetLogicalDrives

磁碟區管理控制碼