転送モード

静止画像インターフェイスは、ステータス モードデータ モードの 2 つの転送モードを定義します。 IStillImage COM インターフェイスのクライアントが IStillImage::CreateDevice を呼び出して静止画像デバイスへのアクセスを取得すると、転送モードの 1 つ (または両方) が指定されます。 複数のクライアントがステータス モードでデバイスを開くことができますが、データ モードでデバイスを開くことができるクライアントは一度に 1 つだけです。

静止画像イベント モニターでは、デバイスをステータス モードで開きます。 常にではありませんが、通常、イメージ取得 API はデータ モードでデバイスを開きます。

クライアントがデバイスをデータ モードで開くと、イベント モニターは後続の静止画像デバイス イベントを内部キューに格納します。 クライアントが IStiDevice::Subscribeを呼び出す場合は、IStiDevice::GetLastNotificationDataを呼び出すことによってキューからイベントを読み取ることができます。 クライアントがデバイスを閉じた後、その後受信したイベントにより、イベント モニターは登録されたアプリケーションの起動を再試行します。

2 つの転送モードの意味は、デバイスのユーザー モード ミニドライバーに完全に依存します。 IStillImage インターフェイスと IStiDevice インターフェイスを使用すると、すべてのメソッドをいずれかのモードで呼び出せます。

ミニドライバーは、IStiDevice::GetLastNotificationDataの呼び出しによって開くモードを決定できます。 デバイスへのアクセスを取得するときにクライアントがステータス モードのみを要求した場合、ミニドライバーはクライアントによるデータ転送の実行を禁止する必要があります。

デバイスは通常、比較的長い時間 (デバイス イベントのイベント モニター 監視など) ステータス モードで開かれますが、比較的短時間 (画像で読み取る場合など) はデータ モードで開かれることに注意してください。 静止画像アーキテクチャでは、一度に 1 つのクライアントのみがデータ モードでデバイスを開くことを許可しますが、ドライバーによるデバイス アクセスへのさらなる制限が不可欠な場合があります。

たとえば、シリアル ポートに接続されているデバイスのドライバーを作成する場合は、デバイスがステータス モードで開かれた場合に、ドライバーの IStiUSD::LockDevice メソッド内から CreateFile を呼び出すことができます。 これにより、デバイスからステータス情報が取得されている間、他のアプリケーションがポート (他のデバイスをサポートしている可能性があります) を使用することは禁止されます。

SCSI や USB バス デバイスなどの専用ポートに接続されているデバイスの場合、デバイスとポートは常に 1 つのクライアント専用であるため、通常、ステータス モードが指定されている場合は IStiUSD::Initialize から CreateFile を呼び出すことができます。

デバイスをデータ モードで開くと、通常、CreateFile はバスの種類に関係なく、IStiUSD:Initialize内から呼び出されます。