FSCTL_LOCK_VOLUME IOCTL (winioctl.h)
如果磁碟區不在使用中,則會鎖定磁碟區。 鎖定的磁碟區只能透過句柄存取鎖定磁碟區的檔案物件 (*hDevice) 。 如需詳細資訊,請參閱<備註>一節。
若要執行這項作業,請使用下列參數呼叫 DeviceIoControl 函 式。
BOOL DeviceIoControl(
(HANDLE) hVolume, // handle to a volume
(DWORD) FSCTL_LOCK_VOLUME, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
NULL // OVERLAPPED structure
);
如果要求成功,Irp-IoStatus.Status> 會設定為 STATUS_SUCCESS。
否則,狀態為適當的錯誤狀況為NTSTATUS程式碼。
如需詳細資訊,請參閱 NTSTATUS值。
備註
傳遞至 DeviceIoControl 的 hDevice 句柄必須是磁碟區的句柄,且會開啟以供直接存取。 若要擷取此句柄,請呼叫 CreateFile,並將 lpFileName 參數設定為下列格式的字串:
\。\X:
其中 X 是硬碟磁碟分區字母、磁碟驅動器或 CD-ROM 磁碟驅動器。 應用程式也必須在 CreateFile 的 dwShareMode 參數中指定FILE_SHARE_READ和FILE_SHARE_WRITE旗標。
如果指定的磁碟區是系統磁碟區,或包含頁面檔案,作業就會失敗。
如果磁碟區上有任何開啟的檔案,此作業將會失敗。 相反地,此作業的成功表示沒有開啟的檔案。
這項作業適用於需要磁碟區獨佔存取一段時間的應用程式,例如磁碟公用程式和備份程式。
鎖定的磁碟區會維持鎖定狀態,直到發生下列其中一項:
- 應用程式會使用 FSCTL_UNLOCK_VOLUME 控制程式代碼來解除鎖定磁碟區。
- 句柄會直接透過 CloseHandle 關閉,或在進程終止時間接關閉。
NTFS 檔系統會將鎖定的磁碟區視為已卸除的磁碟區。 FSCTL_DISMOUNT_VOLUME控件程式代碼的運作方式類似,但在卸載之前不會檢查開啟的檔案。 請注意,如果沒有成功的鎖定作業,任何進程隨時都可以重新掛接卸除的磁碟區。 例如,這不是執行磁碟區備份的理想狀態。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此程序代碼。
技術 | 支援 |
---|---|
伺服器消息塊 (SMB) 3.0 通訊協定 | No |
SMB 3.0 透明故障轉移 (TFO) | No |
具有向外延展檔案共用的SMB 3.0 (SO) | No |
叢集共用磁碟區文件系統 (CsvFS) | 請參閱批注 |
在 CsvFs 鎖定磁碟區上,PNP 通知只會在發出鎖定要求的節點上傳送。 只有在NTFS上的 Csv 篩選器看不到任何已開啟的檔案時,鎖定才會成功。
取得 CSV 磁碟區的鎖定之後,您必須先關閉用來鎖定該磁碟區的句柄,才能開啟磁碟區的句柄。 使用 FSCTL_UNLOCK_VOLUME 解除鎖定磁碟區並不夠。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
標頭 | winioctl.h (包含 Windows.h) |