共用方式為


IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

IOCTL_CDROM_EXCLUSIVE_ACCESS要求會指示CD-ROM類別驅動程式:

  • 報告 CD-ROM 裝置的存取狀態。
  • 鎖定 CD-ROM 裝置以進行獨佔存取。
  • 解除鎖定CD-ROM裝置以進行獨佔存取。
有效的 FileObject 句柄必須存在,此 IOCTL 才能成功。 FileObject 句柄可防止系統意外終止或意外取得獨佔存取鎖定,而不需要後續釋放獨佔存取鎖定。 需要有效的 FileObject 句柄,因為當應用程式關閉時,CD-ROM 類別驅動程式會收到 CLEANUP 和 CLOSE I/O 要求封包 (IRP) ,可用來自動釋放該句柄取得的獨佔存取鎖定。 這個簡單方法可防止大部分意外的獨佔存取版本。 任何用來避免這項功能的方法,都可能會降低獨佔存取鎖定方法的安全性和有效性。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

根據呼叫端要求的作業,呼叫端必須在 Irp-AssociatedIrp.SystemBuffer> 提供下列其中一個結構做為輸入:

輸入緩衝區長度

IO_STACK_LOCATION 結構中的Parameters.DeviceIoControl.InputBufferLength成員表示使用者配置輸入緩衝區的大小,以位元組為單位。

輸出緩衝區

如果呼叫端要求 CD-ROM 裝置的獨佔存取狀態 (RequestType = ExclusiveAccessQueryState) ,CD-ROM 類別驅動程式會在 Irp-AssociatedIrp.SystemBuffer>的緩衝區中傳回CDROM_EXCLUSIVE_LOCK_STATE類型結構,其 LockState 成員指出裝置的存取狀態。

輸出緩衝區長度

I/O 堆棧位置中的 Parameters.DeviceIoControl.OutputBufferLength 成員 (IO_STACK_LOCATION) 指出輸出緩衝區的大小,以位元組為單位。

狀態區塊

[資訊] 位元位會設定為傳回的位元組數目。 如果要求成功,[ 狀態 ] 字段會設定為 STATUS_SUCCESS。

如果要求失敗, [狀態] 字段可能會設定為下列其中一個錯誤訊息:

STATUS_ACCESS_DENIED (Windows 錯誤碼:ERROR_ACCESS_DENIED)

裝置已鎖定以進行獨佔存取。

STATUS_BUFFER_TOO_SMALL (Windows 錯誤碼:ERROR_INSUFFICIENT_BUFFER)

輸出緩衝區對 ExclusiveAccessQueryState 要求而言太小。

STATUS_INFO_LENGTH_MISMATCH (Windows 錯誤碼:ERROR_BAD_LENGTH)

輸入緩衝區太小。

STATUS_INVALID_DEVICE_REQUEST (Windows 錯誤碼:ERROR_INVALID_FUNCTION)

當發生下列兩個錯誤之一時,CD-ROM 類別驅動程式會傳回此狀態代碼:

  • 呼叫端在 IRQL 層級提出要求,而不是PASSIVE_LEVEL。
  • 呼叫端使用 RequestType = ExclusiveAccessUnlockDevice 傳送要求,以解除鎖定不在獨佔模式的裝置。

STATUS_INVALID_DEVICE_STATE (Windows 錯誤碼:ERROR_BAD_COMMAND)

呼叫端嘗試在此裝置上掛接檔系統驅動程式時鎖定裝置,但未指定類別驅動程式應該暫停檢查掛接的文件系統驅動程式。 若要暫停掛接文件系統驅動程式的檢查,呼叫端必須將 CDROM_EXCLUSIVE_ACCESSFlags 成員設定為 1。

STATUS_INVALID_HANDLE (Windows 錯誤碼:ERROR_INVALID_HANDLE)

當發生下列兩個錯誤之一時,CD-ROM 類別驅動程式會傳回此狀態代碼:

  • 無法追蹤要求所需的檔案物件。 CD-ROM 類別驅動程式未收到從這個呼叫端建立檔案物件的要求。
  • 呼叫端傳送 了具有 RequestType = ExclusiveAccessUnlockDevice 的要求,以解除鎖定裝置,即使呼叫端沒有裝置的獨佔存取權。

STATUS_INVALID_PARAMETER (Windows 錯誤碼:ERROR_INVALID_PARAMETER)

當發生下列兩個錯誤之一時,CD-ROM 類別驅動程式會傳回此狀態代碼:

  • 指定的 RequestType 不是 EXCLUSIVE_ACCESS_REQUEST_TYPE的有效成員。
  • CDROM_EXCLUSIVE_LOCKCallerName 成員中的呼叫端名稱字串違反命名慣例。 CallerName 必須是包含下列字元的 NULL 終止字串:英數位元 (A - Z、a - z、0 - 9) 、空格、句點、逗號、冒號 (:) 、分號 (;) 、連字元 (-) 和底線 (_) 。 字串的長度必須小於CDROM_EXCLUSIVE_CALLER_LENGTH個字節,包括字串結尾的 NULL

規格需求

需求
標頭 ntddcdrm.h (包含 Ntddcdrm.h)

另請參閱

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION