デバイスのオンライン状態のレポート
WIA サービスは、IStiUSD::GetStatus メソッドを呼び出すことによって、WIA デバイスのオンライン状態をチェックします。 WIA ミニドライバーは、ハードウェアの現在のオンライン状態をチェックし、結果を報告する必要があります。
WIA サービスは、次の 2 つの主要な操作に対して IStiUSD::GetStatus メソッドを呼び出します。
デバイスのオンライン状態を確認します。
プッシュ ボタン イベントなどのデバイス イベントのポーリング。
操作要求を決定するには、STI_DEVICE_STATUS構造体の StatusMask メンバーをチェックします。 StatusMask メンバーには、次のいずれかの要求を指定できます。
STI_DEVSTATUS_ONLINE_STATE
デバイスがオンラインかどうかを確認します。
STI_DEVSTATUS_EVENTS_STATE
デバイス イベントを確認します。
STI_DEVSTATUS_ONLINE_STATE
この操作要求は、STI_DEVICE_STATUS構造体の dwOnlineState メンバーを設定することによって実行する必要があります。
STI_DEVSTATUS_EVENTS_STATE
この操作要求は、STI_DEVICE_STATUS構造体の dwEventHandlingState メンバーを設定することによって実行する必要があります。 使用する必要がある値は、STI_EVENTHANDLING_PENDING です。 (デバイスに保留中のイベントがあり、WIA サービスへの報告を待機しています)。
STI_EVENTHANDLING_PENDING が設定されると、WIA サービスは WIA ドライバーでイベントが発生したことを通知します。 WIA サービスは IStiUSD::GetNotificationData メソッドを呼び出して、イベントに関する詳細情報を取得します。
IStiUSD::GetNotificationData メソッドは、ポーリングされたイベントと割り込みイベントに対して呼び出されます。 このメソッドでは、適切なイベント情報を入力して、WIA サービスに戻る必要があります。
注:dwEventHandlingState メンバーの STI_EVENTHANDLING_PENDING フラグを必ずクリアして、デバイス イベントが発生したときに適切に設定されるようにします。
次のコード例は、IStiUSD::GetStatus メソッドの実装を示しています。
STDMETHODIMP CWIADevice::GetStatus(PSTI_DEVICE_STATUS pDevStatus)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if(!pDevStatus)
{
return E_INVALIDARG;
}
HRESULT hr = S_OK;
//
// If we are asked, verify the device is online.
//
if (pDevStatus->StatusMask & STI_DEVSTATUS_ONLINE_STATE) {
//
// assume the device is OFF-LINE before continuing. This will
// validate that the online check was successful.
//
pDevStatus->dwOnlineState = STI_ONLINESTATE_OFFLINE;
if(MyDeviceIsOnlineStatus()) {
//
// device is ON-LINE and operational
//
pDevStatus->dwOnlineState |= STI_ONLINESTATE_OPERATIONAL;
} else {
//
// device is OFF-LINE and NOT operational
//
}
}
return S_OK;
}