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值

備註

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

\。\X:

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

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

如果磁碟區上有任何開啟的檔案,此作業將會失敗。 相反地,此作業的成功表示沒有開啟的檔案。

這項作業適用於需要磁碟區獨佔存取一段時間的應用程式,例如磁碟公用程式和備份程式。

鎖定的磁碟區會維持鎖定狀態,直到發生下列其中一項:

系統會先將所有快取的數據排清到磁碟區,再將其鎖定。 例如,延遲寫入快取中保留的任何數據都會寫入磁碟區。

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)

另請參閱

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

磁碟區管理控制碼