次の方法で共有


静止画像デバイスのイベント

静止画像デバイス イベントは、上位レベルのソフトウェアが通知を要求した場合に通知する必要があるデバイス レベルのイベントです。 ユーザー モード ミニドライバーは、ほとんどのデバイス イベントを定義し、イベントが発生したときに通知を配信する役割を担います。 一般にイベントは、何らかのアクションを実行するために上位レベルのソフトウェアが必要であることを示します。

一般的な静止画像デバイス イベントは、押されたプッシュ ボタンの検出です。 たとえばスキャナーでは、ユーザーがテキストと写真のスキャンを開始するのに使うボタンが別になっている場合があります。 ボタンを押すと、画像を表示または保存するために上位レベルのソフトウェアが必要になります。 静止画像イベント モニターは、(IStiDevice COM インターフェイスを使用して) イベントが発生したことを検出し、(IStillImage COM インターフェイスを使用して) 以前に登録された静止画像アプリケーションを呼び出すことができます。

静止画像デバイス イベントは GUID で表されます。 sti.hでは、Microsoft は次の静止画像デバイス イベントを定義します。

イベントの GUID パーパス
GUID_DeviceArrivedLaunch 静止画像デバイスがシステムに接続されました。
GUID_ScanImage イメージをコンピューターにスキャンする必要があります。
GUID_ScanFaxImage イメージをコンピューターにスキャンし、FAX で送信する必要があります。
GUID_ScanPrintImage イメージをコンピューターにスキャンし、印刷する必要があります。
GUID_STIUserDefined1 ユーザー定義可能なボタンが押されました。
GUID_STIUserDefined2 ユーザー定義可能なボタンが押されました。
GUID_STIUserDefined3 ユーザー定義可能なボタンが押されました。

ユーザー モード ミニドライバーの開発者は、可能な限り、これらの定義済みのイベント GUID を使用する必要があります。 これらの GUID が適切でない場合は、デバイス固有のイベントの GUID を定義する必要があります。

静止画像デバイス イベントを定義するには、次の手順を実行する必要があります。

  • 各イベントの GUID を指定します。

  • ユーザー モード ドライバーの INF ファイルに各 GUID を含めます。

ドライバーの INF ファイル内では、各 GUID の仕様にアスタリスク ("すべてのアプリケーション") または特定のアプリケーションのリストのいずれかを含めるとともに、イベント発生時に開始するアプリケーションを示す必要があります。 静止画像イベント モニターでは、このリストを使用して、イベントに対するアプリケーションの既定の割り当てを提供します。 ユーザーは、スキャナーと カメラ コントロール パネルを使用して、これらの割り当てを変更できます。

イベント通知

ドライバーは(非同期 I/O またはポーリングを使用して) デバイスを監視して、各 GUID に関連付けられているイベントがいつ発生するかを判断する必要があります。 デバイスの機能に応じて、ドライバーは非同期的に、またはデバイスをポーリングする要求に応答することによって、デバイス イベントの発生をクライアントに通知できます。 (どちらの方法でも) デバイス イベントの通知を配信できるすべてのドライバーは、デバイスの STI_DEV_CAPS 構造でSTI_GENCAP_NOTIFICATIONS フラグを設定する必要があります。 非同期通知ではなくポーリングをサポートするドライバーも、同じ構造で STI_GENCAP_POLLING_N Enterprise Edition DED フラグを設定する必要があります。 (これらの機能は、静止画像デバイスの INF ファイル機能のキーワードで示す必要があります。)

ドライバーがイベントの非同期通知をサポートしている場合、イベント モニターは IStiUSD::SetNotificationHandle を呼び出して通知を要求し、イベント ハンドルを提供します。 デバイス イベントが発生した場合、ドライバーは、イベント ハンドルを引数として使用して、SetEvent を呼び出してイベント モニターに通知する必要があります (Microsoft Windows SDK のドキュメントを参照)。 その後、クライアントは IStiUSD::GetNotificationData を呼び出してイベントの GUID を取得できます。

ポーリングが必要な場合、イベント モニターは IStiUSD::GetStatus を呼び出してドライバーをポーリングします。このドライバーは、デバイスをポーリングし、結果を返す STI_DEVICE_STATUS 構造にする必要があります。