Windows Vista でのデータ転送のキャンセル

重要

この記事には、旧 Windows オペレーティング システムに適用される情報が含まれています。

Windows Vista には、アプリケーションがストリーム ベースのデータ転送を実行するために使用する新しいインターフェイス IWiaTransfer (Windows SDK ドキュメントで説明されています) があります。 このインターフェイスには、新しい転送メソッドに加えて、アプリケーションが複数項目の転送を含むデータ転送を取り消すために使用できる Cancel メソッドが含まれています。 このメソッドを使用すると、データ転送を非同期的に取り消すことができます。 この手順を使用してデータ転送をキャンセルすることをお勧めします。 ただし、Windows Vista アプリケーションでは、コールバック ルーチンから S_FAL Standard Edition を返して転送を取り消すこともできます。

したがって、Windows Vista の WIA アプリケーションで転送を取り消すには、次の 2 つの方法があります。

  • コールバック ルーチンから S_FAL Standard Edition を返します。

  • IWiaTransfer::Cancel を呼び出します。

Windows Vista ドライバーには、アプリケーションが転送を取り消したことについて、2 つの異なる方法で通知を受け取ることができます。

  • ドライバーは、WIA_EVENT_CANCEL_IO イベントを含む IWiaMiniDrv::d rvNotifyPnPEvent の呼び出しを受け取ります。 カーネル モードのすべての読み取りまたは書き込み操作で OVERLAPPED I/O を使用することをお勧めします。 この手順でのみ、即時キャンセルを保証することができます。

  • S_FALSE は、IWiaMiniDrvTransferCallback::GetNextStreamIWiaMiniDrvTransferCallback::SendMessage の 2 つのコールバック関数から返されます。

アプリケーションが IWiaTransfer::Cancel を呼び出すときは、WIA_EVENT_CANCEL_IO を使って IWiaMiniDrv::d rvNotifyPnPEvent メソッドをドライバーに呼び出す必要があります。 さらに、IWiaMiniDrvTransferCallback::GetNextStream および IWiaMiniDrvTransferCallback::SendMessage コールバック関数は、転送が取り消された後、必ず S_FALSE を返す必要があります。

IWiaTransferCallback::GetNextStream複数項目転送時に WIA_STATUS_SKIP_ITEM を返した場合、アプリケーションは現在の項目をスキップしています (つまり、転送中ではありません)。 S_FALSE の戻り値は、転送全体を取り消す必要があることを意味します。

IWiaTransfer および IWiaTransferCallback インターフェイスについては、Microsoft Windows SDK のドキュメントで説明されています。

IWiaMiniDrvTransferCallback