UMDF での一般 I/O ターゲットの状態の制御
フレームワークでは、一般 I/O ターゲットに対して次の状態が定義されています。
開始
I/O ターゲットは開いている (UMDF ドライバーが利用できる) 状態であり、ドライバーは I/O ターゲットに I/O 要求を送信できます。フレームワークは該当するドライバーに要求を送信します。停止
I/O ターゲットは開いていますが、UMDF ドライバーは、IWDFIoRequest::Send メソッドの呼び出しで Flags パラメーターに WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE フラグを渡さないと I/O 要求を I/O ターゲットに送信できません。フレームワークは該当するドライバーへの要求の送信を停止します。
Query-Remove のために終了
I/O ターゲットは、そのデバイスが間もなく削除されるため、一時的に閉じています。終了
I/O ターゲットは閉じているため、開始または停止できません。削除済み
I/O ターゲットのデバイスは削除されています。
WDF_IO_TARGET_STATE 列挙型は、これらの状態を表す値を定義します。
ローカル I/O ターゲットの状態
フレームワークは、自動的にローカル I/O ターゲットを開いて開始します。
必要に応じて、ドライバーは IWDFIoTargetStateManagement::Stop を呼び出してローカル I/O ターゲットを一時的に停止し、IWDFIoTargetStateManagement::Start を呼び出して再開することができます。たとえば、ドライバーが一時的なエラー条件を検出し、エラー条件が修正されてからローカル I/O ターゲットを再開する場合に、ドライバーはローカル I/O ターゲットを停止できます。
ローカル I/O ターゲットのデバイスが削除されると、フレームワークは自動的に I/O ターゲットを停止して閉じ、ターゲットのキューにあるすべての I/O 要求を取り消します。フレームワークは、デバイス オブジェクトのイベント コールバック関数を呼び出すことにより、デバイスが利用できなくなったことをドライバーに通知します。これらのコールバック関数の詳細については、「UMDF の PnP と電源管理のシナリオ」を参照してください。
ドライバーでローカル I/O ターゲットの現在の状態を取得するには、IWDFIoTargetStateManagement::GetState を呼び出します。
リモート I/O ターゲットの状態
ドライバーでリモート I/O ターゲットを開くには、IWDFRemoteTarget::OpenFileByName または IWDFRemoteTarget::OpenRemoteInterface を呼び出す必要があります。ドライバーがリモート I/O ターゲットを開くと、フレームワークは自動的に I/O ターゲットを開始します。
必要に応じて、ドライバーは IWDFRemoteTarget::Stop を呼び出してリモート I/O ターゲットを一時的に停止し、IWDFRemoteTarget::Start を呼び出して再開することができます。
リモート I/O ターゲットのデバイスが削除されると、フレームワークは自動的に I/O ターゲットを停止して閉じ、ドライバーが次のイベント コールバック関数を登録していない限り、ターゲットのキューにあるすべての I/O 要求を取り消します。
IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
リモート I/O ターゲットのデバイスが削除された可能性があることをドライバーに通知します。ドライバーにデバイスの削除を許可させる場合、ドライバーは IWDFRemoteTarget::CloseForQueryRemove を呼び出す必要があります。IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
リモート I/O ターゲットのデバイスが削除されたことをドライバーに通知します。このコールバック関数は、IWDFRemoteTarget::Close を呼び出す必要があります。IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
リモート I/O ターゲットのデバイスを削除する試みが取り消されたことをドライバーに通知します。ドライバーで引き続きそのターゲットを使用する場合は、IWDFRemoteTarget::Reopen を呼び出す必要があります。Reopen は、通常は OnRemoteTargetRemoveCanceled コールバック関数内から呼び出されますが、OnRemoteTargetRemoveCanceled が戻った後で呼び出すこともできます。
ドライバーでリモート I/O ターゲットの現在の状態を取得するには、IWDFRemoteTarget::GetState を呼び出します。