次の方法で共有


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

ミニドライバーを起動すると、 IStiUSD::InitializeIStiUSD::GetStatus など、以前の一部の STI エントリ ポイントが呼び出されます。 最初のアプリケーションがデバイスとの通信を試みるとすぐに、WIA サービスは IWiaMiniDrv::drvInitializeWia を呼び出します。 この関数では、ミニドライバーが項目ツリーを構築する必要があります。

WIA サービスは次に、ツリー内の各項目に対して IWiaMiniDrv::drvInitItemProperties を呼び出します。 ミニドライバーは、アイテムに関連するすべてのプロパティを作成する必要があります。 場合によっては、空のプロパティを作成し、後でそのデータを入力することが賢明な場合があります。 たとえば、パフォーマンスを向上させるために、カメラの画像サムネイルは、WIA サービスが特に要求する場合にのみ読み取る必要があります。以下に説明します。

次に呼び出す関数は、アプリケーションとデバイスの種類によって異なります。 通常、アプリケーションの最も一般的な操作はデータの転送です。 スキャナーの場合、アプリケーションはまず、デバイスから取得するイメージを定義するプロパティ (データ型やエクステントなど) を設定します。 WIA サービスは、アプリケーションがプロパティを変更したときに IWiaMiniDrv::drvValidateItemProperties を呼び出します。 ミニドライバーは、必要に応じて、デバイスと通信するプロパティが有効であることをチェックする必要があります。 データ転送が行われる前に別のアプリケーションでプロパティを別の値に設定できるため、ミニドライバーは通常、その関数のプロパティの設定を避ける必要があります。

WIA サービスは、データを転送するために、 IWiaMiniDrv::drvLockWiaDeviceIWiaMiniDrv::drvWriteItemPropertiesIWiaMiniDrv::drvAcquireItemData、および IWiaMiniDrv::drvUnLockWiaDevice をその順序で呼び出します。 デバイスをロックおよびロック解除するための呼び出しにより、転送中に他のアプリケーションがデバイスにアクセスすることが保証されません。 スキャナーの場合、 IWiaMiniDrv::drvWriteItemProperties は、位置、エクステント、解像度などのプロパティをデバイスに送信する必要があります。 カメラ ドライバーは、通常、デバイスにプロパティを送信する必要はありません。 IWiaMiniDrv::drvAcquireItemData は、 IWiaMiniDrvCallback COM インターフェイス を使用して、デバイスからイメージ データを取得し、WIA サービスを介してアプリケーションに送り返す必要があります。

カメラの場合、アプリケーションが画像のサムネイルを表示する場合、WIA サービスは各イメージで IWiaMiniDrv::drvReadItemProperties を呼び出します。 ミニドライバーは、その時点でサムネイルを読み取り、ドライバー項目コンテキストにキャッシュする必要があります。 複数のアプリケーションがサムネイルを要求し、 IWiaMiniDrv::drvReadItemProperties を 複数回呼び出す可能性があるため、サムネイルをキャッシュすることが重要です。 アプリケーションから要求されるたびにミニドライバーがサムネイルを読み取ると、パフォーマンスが低下します。

カメラのもう 1 つの特別な考慮事項は、カメラの設定 (シャッター速度など) に影響するルート項目のプロパティです。 アプリケーションがこれらのプロパティを変更したときに、WIA サービスは、 IWiaMiniDrv::drvValidateItemProperties を呼び出します。 ミニドライバーは、必要に応じて、カメラと通信して、プロパティの設定を検証できます。 ただし、別のアプリケーションでプロパティを変更できるため、この関数はカメラの設定を変更するのに最適な場所ではありません。 ミニドライバーは、新しいイメージをキャプチャするために IWiaMiniDrv::drvDeviceCommand 関数が呼び出されたときに、ルート項目のプロパティからすべてのカメラ設定を更新する必要があります。