共用方式為


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.SystemBuff er 的緩衝區中傳回 CDROM_EXCLUSIVE_LOCK_STATE類型結構,LockState 成員表示裝置的存取狀態。

輸出緩衝區長度

Parameters.DeviceIoControl.OutputBufferLength I/O 堆棧位置的成員 (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 類別驅動程式會傳回此狀態代碼:

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

STATUS_INVALID_DEVICE_STATE (Windows 錯誤碼:ERROR_BAD_COMMAND)

呼叫端嘗試在此裝置上掛接檔系統驅動程式時鎖定裝置,但未指定類別驅動程式應該暫停掛接檔系統驅動程序的檢查。 若要暫停掛接文件系統驅動程式的檢查,呼叫端必須將 旗標 成員 CDROM_EXCLUSIVE_ACCESS 設定為 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的有效成員。
  • CallerName 中的呼叫端名稱字串 成員 CDROM_EXCLUSIVE_LOCK 違反命名慣例。 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