IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

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

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

  1. 在裝置物件擴充功能中,保留每個實體裝置的停用要求計數。
  2. 使用此 IOCTL 呼叫時,如果已設定停用媒體變更偵測的旗標,則遞增計數;如果旗標是清除的,請遞減計數。
  3. 只有在停用要求計數為零時,才會變更媒體狀態時,設定裝置的媒體變更事件。
當包含此 IOCTL 的 IRP_MJ_DEVICE_CONTROL IRP 傳遞給 SCSI 類別驅動程式時,目前IO_STACK_LOCATIONFileObject 成員必須指向有效的檔案物件。 在停用或啟用 AutoPlay 的使用者模式應用程式意外終止的情況下,SCSI 類別驅動程式需要檔案物件。 在這種情況下,SCSI 類別驅動程式會使用檔案物件來重新啟用媒體變更偵測。 因為檔案對像是適當清除的必要專案,所以如果 IO_STACK_LOCATION的 FileObject 成員未指向有效的檔案物件,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 (包含 Ntddstor.h)

另請參閱

IO_STACK_LOCATION