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::GetNextStream と IWiaMiniDrvTransferCallback::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 のドキュメントで説明されています。