Freigeben über


Übertragungsmodi

Die Standbild-Interfaces definieren zwei Übertragungsmodi, Statusmodus und Datenmodus. Wenn ein Client der IStillImage COM-Schnittstelle IStillImage::CreateDevice aufruft, um Zugriff auf ein stilles Bildgerät zu erhalten, gibt er einen (oder beide) der Übertragungsmodi an. Mehrere Clients können ein Gerät im Statusmodus öffnen, aber nur jeweils ein Client kann ein Gerät im Datenmodus öffnen.

Der Stillbildereignismonitor öffnet Geräte im Statusmodus. In der Regel, aber nicht immer, öffnen Bildaufnahme-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 IStiDevice::GetLastNotificationData aufgerufen wird. Nachdem der Client das Gerät geschlossen hat, bewirken anschließend empfangene Ereignisse, dass der Ereignismonitor erneut versucht, eine registrierte Anwendung zu starten.

Die Bedeutungen der beiden Übertragungsmodi sind vollständig vom Benutzermodus-Minidriver des Geräts abhängig. Mit den IStillImage- und IStiDevice-Schnittstellen können alle Methoden in beiden Modus aufgerufen werden.

Ein Minidriver kann den Modus bestimmen, in dem er durch Aufrufen von IStiDevice::GetLastNotificationData geöffnet wurde. Minidriver sollten verhindern, dass ein Client Datenübertragungen durchführt, wenn der Client beim Abrufen des Zugriffs auf das Gerät nur den Statusmodus angefordert hat.

Es ist wichtig zu beachten, dass Geräte in der Regel relativ lange im Statusmodus geöffnet werden (z. B. beobachtet der Ereignismonitor Geräteereignisse), während sie im Datenmodus für eine relativ kurze Zeit geöffnet werden (z. B. um beispielsweise ein Bild auszulesen). Obwohl die Architektur des stillen Bilds jeweils nur einen Client zum Öffnen eines Geräts im Datenmodus zulässt, ist es möglicherweise erforderlich, dass ein Treiber weitere Einschränkungen für den Gerätezugriff einschränkt.

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

Für Geräte, die mit dedizierten Ports wie SCSI- oder USB-Busgeräten verbunden sind, ist es in der Regel zulässig, CreateFile aus IStiUSD::Initialize aufzurufen, wenn der Statusmodus angegeben ist, da das Gerät und der Port immer einem Client zugeordnet sind.

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