次の方法で共有


WIA ミニドライバーの初期化

IWiaMiniDrv インターフェイスを実装する最初の手順は、ミニドライバーを初期化し、ドライバー項目の階層ツリーを作成することになります。 この際、WIA サービスは、クライアント アプリケーションがデバイスを使用するたびに IWiaMiniDrv::d rvInitializeWia メソッドを呼び出します。 2 つ以上のアプリケーションがデバイスを同時に使用している場合、WIA サービスはアプリケーションごとにこのメソッドを呼び出します。 このメソッドでは、通常ミニドライバーが次の処理を行います。

  1. WIA サービスから渡されるパラメーターを初期化します。

  2. pStiDevice が指す STI デバイス インターフェイスを保存します。これにより、IStiDevice::LockDevice メソッドと IStiDevice::UnLockDevice メソッドを使用して WIA デバイスをロックまたはロック解除できます。

  3. 他のメソッドで使用できるように、メンバー変数に bstrDeviceIDbstrRootFullItemName をキャッシュします。

  4. デバイスへのハンドルを開きます。 (この手順は、USB、SCSI、1394 などの非共有ポートに推奨されます。)

  5. WIA ドライバー項目ツリーの作成」の説明に従い、項目ツリーをビルドします。

IWiaMiniDrv::d rvInitializeWia メソッドを用い、ドライバーが使用する動的配列と構造体を作成および初期化することもできます。 たとえば、後で IWiaMiniDrv::d rvGetCapabilities メソッドで使用するためにドライバーがサポートするコマンドとイベントの配列を作成できます。

注:IWiaMiniDrv::d rvGetCapabilities メソッドは、IWiaMiniDrv::d rvInitializeWia が呼び出される前に呼び出される場合があります。 これは、デバイスを使用するためにアプリケーションが存在する前に、WIA サービスがイベント情報を照会する必要がある場合に発生する可能性があります。 IWiaMiniDrv::d rvInitializeWia メソッドは、アプリケーションがデバイスの使用を通知した場合にのみ呼び出されます。

アプリケーション接続のトラッキング

前述の通り、アプリケーションが WIA デバイスと通信する場合、WIA サービスは適切なドライバーの IWiaMiniDrv::d rvInitializeWia メソッドを呼び出します。 アプリケーションがデバイスで終了し、それに対するすべての WIA 参照を解放すると、WIA サービスは適切なドライバーの IWiaMiniDrv::d rvUnInitializeWia メソッドを呼び出します。 WIA では、複数の同時アプリケーション接続に対応しています。 つまり、2 つ以上のアプリケーションが同じデバイスに関連付けられている WIA インターフェイスを要求できます。 ただし、ドライバーが同時要求を処理しなければならないわけではありません。WIA サービスは、一度に 1 つの要求のみがドライバーに送信されるようにします。 ただし、WIA サービスは IWiaMiniDrv::d rvInitializeWia メソッドを複数回呼び出してから、IWiaMiniDrv::d rvUnInitializeWia メソッドを呼び出すことができます。

この情報が役立つ理由 多くの場合、WIA ドライバー項目ツリー、イメージ フィルター ライブラリなど、アプリケーションで使用する際にドライバーが必要になる可能性があるリソースがあります。 こうしたリソースは大量のメモリを占有する可能性があるため、不要な場合はアンロードすることをお勧めします。

注:IWiaMiniDrv::d rvInitializeWia メソッドと IWiaMiniDrv::d rvUnInitializeWia メソッドは、アプリケーション接続のドライバーにのみ通知するために使用されます。 WIA サービスは、最初に IWiaMiniDrv::d rvInitializeWia を呼び出さずに他のドライバー メソッドを呼び出すことができます。これは、WIA サービスが完了したときに必ずしも IWiaMiniDrv::d rvUnInitializeWia を呼び出すわけではないことを意味します。 呼び出されるメソッドは、IWiaMiniDrv::d rvGetCapabilitiesIWiaMiniDrv::d rvGetWiaFormatInfo など、WIA 項目を必要としない情報メソッドです。

このセクションでは、以下のトピックについて説明します:

ミニドライバー関数の順序の呼び出し

WIA ミニドライバーのロードとアンロード

WIA アプリケーションの接続と切断

WIA ミニドライバーの状態のレポート