一般 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 関数を初期化します。