閱讀英文

共用方式為


IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

暫時啟用或停用卸除式媒體裝置上自定義 PnP 事件的傳遞GUID_IO_MEDIA_ARRIVAL和GUID_IO_MEDIA_REMOVAL。 這反過來又會啟用或停用裝置的媒體變更偵測(自動播放),如果呼叫端已開啟具有FILE_READ_ATTRIBUTES存取權的裝置,以及裝置是否已在登錄中啟用自動播放。 呼叫端不得開啟裝置進行讀取或寫入存取,否則 IOCTL 作業將會失敗。 此 IOCTL 不會影響登錄中的 [自動播放] 設定。

這類抽取式媒體裝置的驅動程序必須執行下列動作:

  1. 在裝置物件擴充功能中,保留每個實體裝置的停用要求計數。
  2. 使用此 IOCTL 呼叫時,如果已設定停用媒體變更偵測的旗標,則遞增計數:如果旗標是清楚的,請遞減計數。
  3. 只有在停用要求計數為零時,才會變更媒體狀態時,設定裝置的媒體變更事件。
當包含此 IOCTL 的IRP_MJ_DEVICE_CONTROL IRP 傳遞至 SCSI 類別驅動程式時,目前 IO_STACK_LOCATIONFileObject 成員必須指向有效的檔案物件。 當停用或啟用自動播放的使用者模式應用程式意外終止的情況下,SCSI 類別驅動程式需要檔案物件。 在這種情況下,SCSI 類別驅動程式會使用檔案物件來重新偵測媒體變更。 因為檔案對像是適當清除的必要專案,因此如果 FileObject IO_STACK_LOCATION 成員未指向有效的檔案物件,SCSI 類別驅動程式會導致 IRP 失敗,並出現STATUS_INVALID_PARAMETER錯誤訊息。 如果使用者模式應用程式開啟裝置,則 I/O 管理員會初始化此成員,但內核模式驅動程式寫入器不應該假設 FileObject 會在使用者模式應用程式產生 IRP 時正確初始化。 例如,如果使用者模式應用程式在傳送 IOCTL 之前錯誤地開啟裝置進行讀取或寫入存取,則會透過檔案系統路由傳送裝置控制 IRP,防止 SCSI 類別驅動程式和裝置驅動程式直接存取裝置的檔案物件。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

Irp->AssociatedIrp.SystemBuffer 的緩衝區包含布爾值,TRUE 表示驅動程式應該停用媒體變更偵測。

輸入緩衝區長度

布爾值的長度。

輸出緩衝區

沒有。

輸出緩衝區長度

沒有。

狀態區塊

[資訊 ] 字段 設定為零。 [狀態] 字段會設定為 [STATUS_SUCCESS],或可能設定為 [STATUS_BUFFER_TOO_SMALL]、[STATUS_INVALID_PARAMETER] 或 [STATUS_INVALID_DEVICE_STATE]。

要求

要求 價值
標頭 ntddstor.h (include Ntddstor.h)

另請參閱

IO_STACK_LOCATION