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. 無効化要求数が 0 の場合にのみ、メディアの状態が変更された場合にデバイスのメディア変更イベントを設定します。
この IOCTL を含むIRP_MJ_DEVICE_CONTROL IRP が SCSI クラス ドライバーに渡されると、現在のIO_STACK_LOCATIONFileObject メンバーが有効なファイル オブジェクトを指す必要があります。 SCSI クラス ドライバーには、AutoPlay を無効または有効にするユーザー モード アプリケーションが予期せず終了する場合に、ファイル オブジェクトが必要です。 このような場合、SCSI クラス ドライバーはファイル オブジェクトを使用してメディア変更検出を再び可能にします。 ファイル オブジェクトは適切なクリーンに必要であるため、IO_STACK_LOCATION の FileObject メンバーが有効なファイル オブジェクトを指していない場合、SCSI クラス ドライバーは STATUS_INVALID_PARAMETER のエラー メッセージで IRP を失敗させます。 ユーザー モード アプリケーションがデバイスを開いた場合、I/O マネージャーはこのメンバーを初期化しますが、カーネル モード ドライバーライターは、IRP がユーザー モード アプリケーションによって生成されるときに FileObject が適切に初期化されると想定しないでください。 たとえば、ユーザー モード アプリケーションが IOCTL を送信する前に読み取りアクセスまたは書き込みアクセスのデバイスを誤って開いた場合、デバイス コントロール IRP はファイル システムを介してルーティングされ、SCSI クラス ドライバーとデバイス ドライバーがデバイスのファイル オブジェクトに直接アクセスできなくなります。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

Irp-AssociatedIrp.SystemBuffer> のバッファーにはブール値が含まれています。TRUE は、ドライバーがメディア変更検出を無効にする必要があることを示します。

入力バッファーの長さ

ブール値の長さ。

出力バッファー

[なし] :

出力バッファーの長さ

[なし] :

ステータス ブロック

[情報] フィールドは 0 に設定されます。 [状態] フィールドはSTATUS_SUCCESSに設定されているか、場合によってはSTATUS_BUFFER_TOO_SMALL、STATUS_INVALID_PARAMETER、またはSTATUS_INVALID_DEVICE_STATEに設定されます。

要件

要件
Header ntddstor.h (Ntddstor.h を含む)

こちらもご覧ください

IO_STACK_LOCATION