Übertragungsmodi

Die Standbildschnittstellen definieren zwei Übertragungsmodi − status Modus und Datenmodus. Wenn ein Client der IStillImage-COM-SchnittstelleIStillImage::CreateDevice aufruft , um Zugriff auf ein Standbildgerät zu erhalten, gibt er einen (oder beide) der Übertragungsmodi an. Mehrere Clients können ein Gerät im status Modus öffnen, aber nur jeweils ein Client darf ein Gerät im Datenmodus öffnen.

Der Standbildereignismonitor öffnet Geräte im status Modus. In der Regel, aber nicht immer, öffnen Bilderfassungs-APIs Geräte im Datenmodus.

Sobald ein Client ein Gerät im Datenmodus geöffnet hat, speichert der Ereignismonitor nachfolgende Standbildgeräteereignisse in einer internen Warteschlange. Wenn der Client IStiDevice::Subscribe aufruft, kann er Ereignisse aus der Warteschlange lesen, indem er IStiDevice::GetLastNotificationData aufruft. Nachdem der Client das Gerät geschlossen hat, führen anschließend empfangene Ereignisse dazu, dass der Ereignismonitor erneut versucht, eine registrierte Anwendung zu starten.

Die Bedeutung der beiden Übertragungsmodi hängt vollständig vom Benutzermodus-Minidriver des Geräts ab. Über die IStillImage - und IStiDevice-Schnittstellen können alle Methoden in beiden Modus aufgerufen werden.

Ein Minidriver kann den Modus ermitteln, in dem er geöffnet wurde, indem er IStiDevice::GetLastNotificationData aufruft. Minidriver sollten einem Client die Durchführung von Datenübertragungen verbieten, wenn der Client beim Abrufen des Zugriffs auf das Gerät nur status Modus angefordert hat.

Es ist wichtig zu beachten, dass Geräte in der Regel relativ lange im status Modus geöffnet werden (z. B. überwacht der Ereignismonitor Geräteereignisse), während sie im Datenmodus relativ kurz geöffnet werden (z. B. zum Lesen in einem Bild). Obwohl die Architektur des Standbilds es nur einem Client erlaubt, ein Gerät im Datenmodus zu öffnen, kann es erforderlich sein, dass ein Treiber weitere Einschränkungen für den Gerätezugriff aufgibt.

Wenn Sie für instance einen Treiber für ein Gerät schreiben, das mit einem seriellen Port verbunden ist, können Sie CreateFile innerhalb der IStiUSD::LockDevice-Methode des Treibers aufrufen, wenn das Gerät im status Modus geöffnet wurde. Dadurch wird verhindert, dass andere Anwendungen den Port verwenden (der möglicherweise andere Geräte unterstützt), während status Informationen vom Gerät abgerufen werden.

Bei Geräten, die mit dedizierten Ports verbunden sind, z. B. SCSI- oder USB-Busgeräte, ist es in der Regel zulässig, CreateFile innerhalb von IStiUSD::Initialize aufzurufen, wenn status Modus angegeben ist, da das Gerät und der Port immer für einen Client reserviert sind.

Wenn ein Gerät im Datenmodus geöffnet wird, wird CreateFile in der Regel von IStiUSD:Initialize aufgerufen, unabhängig vom Bustyp.