次の方法で共有


一般 I/O ターゲットの状態の制御

フレームワークでは、一般 I/O ターゲットに対して次の状態が定義されています。

  • 開始
    I/O ターゲットは開いている (ドライバーが利用できる) 状態であり、ドライバーは I/O ターゲットに I/O 要求を送信できます。フレームワークは該当するドライバーに要求を送信します。

  • 停止
    I/O ターゲットは開いていますが、ドライバーは各要求の WDF_REQUEST_SEND_OPTIONS 構造体の WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE フラグを設定しないと I/O 要求を I/O ターゲットに送信できません。フレームワークは該当するドライバーへの要求の送信を停止します。

  • Query-Remove のために終了
    リモート I/O ターゲットは、そのデバイスが間もなく削除されるため、一時的に閉じています。

  • 終了
    I/O ターゲットは閉じているため、開始または停止できません。

  • 削除済み
    I/O ターゲットのデバイスは削除されています。

 

WDF_IO_TARGET_STATE 列挙型は、これらの状態を表す値を定義します。ドライバーは WdfIoTargetGetState を呼び出して I/O ターゲットの状態を取得できます。

ローカル I/O ターゲットの状態

フレームワークは、自動的にローカル I/O ターゲットを開いて開始します。

必要に応じて、ドライバーは WdfIoTargetStop を呼び出してローカル I/O ターゲットを一時的に停止し、WdfIoTargetStart を呼び出して再開することができます。たとえば、ドライバーが一時的なエラー条件を検出し、エラー条件が修正されてからローカル I/O ターゲットを再開する場合に、ドライバーはローカル I/O ターゲットを停止できます。

ローカル I/O ターゲットのデバイスが削除されると、フレームワークは自動的に I/O ターゲットを停止して閉じ、ターゲットのキューにあるすべての I/O 要求を取り消します。フレームワークは、デバイス オブジェクトのイベント コールバック関数を呼び出すことにより、デバイスが利用できなくなったことをドライバーに通知します。これらのコールバック関数の詳細については、「PnP と電源管理のシナリオ」を参照してください。

リモート I/O ターゲットの状態

ドライバーは、WdfIoTargetOpen を呼び出してリモート I/O ターゲットを開く必要があります。ドライバーがリモート I/O ターゲットを開くと、フレームワークは自動的に I/O ターゲットを開始します。

必要に応じて、ドライバーは WdfIoTargetStop を呼び出してリモート I/O ターゲットを一時的に停止し、WdfIoTargetStart を呼び出して再開することができます。

リモート I/O ターゲットのデバイスが削除されると、フレームワークは自動的に I/O ターゲットを停止して閉じ、ドライバーが次のイベント コールバック関数を登録していない限り、ターゲットのキューにあるすべての I/O 要求を取り消します。

  • EvtIoTargetQueryRemove
    リモート I/O ターゲットのデバイスが削除された可能性があることをドライバーに通知します。ドライバーにデバイスの削除を許可させる場合、ドライバーは WdfIoTargetCloseForQueryRemove を呼び出す必要があります。

  • EvtIoTargetRemoveComplete
    リモート I/O ターゲットのデバイスが削除されたことをドライバーに通知します。このコールバック関数は、WdfIoTargetClose を呼び出す必要があります。

  • EvtIoTargetRemoveCanceled
    リモート I/O ターゲットのデバイスを削除する試みが取り消されたことをドライバーに通知します。このコールバック関数は WdfIoTargetOpen を呼び出す必要があり、ドライバーは通常、WDF_IO_TARGET_OPEN_PARAMS_INIT_REOPEN を呼び出してその WDF_IO_TARGET_OPEN_PARAMS_INIT 関数を初期化します。