共用方式為


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 句柄必須是磁碟區的句柄,才能直接存取。 若要擷取磁碟區句柄,請使用 lpFileName 參數,呼叫 createFile,並設定為下列格式的字元串:

\\.\X

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

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

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

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

  • 沒有開啟的檔案。
  • 操作系統會偵測磁碟區。
一旦嘗試存取該磁碟區,操作系統就會嘗試掛接未掛接的磁碟區。 例如,呼叫 GetLogicalDrives 會觸發操作系統掛接未掛接的磁碟區。

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

變更磁碟區文件系統

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

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

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

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

要求

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

另請參閱

CreateFile

DeviceIoControl

ExitThread

FSCTL_LOCK_VOLUME

GetLogicalDrives

磁碟區管理控制代碼