Bewährte Methoden zum Sperren und Entsperren
Das Sperren für den STI-Teil eines WIA-Treibers erfordert besondere Aufmerksamkeit. Auch wenn eine Anwendung direkt auf die veröffentlichten STI-Schnittstellen zugreifen kann, kann ein solcher direkter Zugriff auf das Gerät missbraucht werden. Nicht ordnungsgemäß implementierte Sperrtechniken können ein Gerät für einen Denial-of-Service-Angriff (DoS) offen lassen.
Für STI-Anwendungen
Die folgende Liste enthält Vorsichtsmaßnahmen und Richtlinien, die Sie bei der Verwendung von STI-Anwendungen beachten sollten:
Halten Sie Keine Sperren für längere Zeiträume.
Wenn Sie keinen direkten Zugriff auf das Gerät benötigen, kann es möglich sein, dieselben Informationen mithilfe von WIA-Schnittstellenmethoden abzurufen. Dies ist vorzuziehen, da der WIA-Dienst dann die Sperrung für Sie steuert.
TWAIN-Treiber, die STI verwenden, verwenden die IStiUSD::LockDevice-Methode , um den Zugriff auf das Gerät zu steuern. Wenn ein TWAIN-Treiber STI verwendet, ist der TWAIN-Treiber für die Steuerung der Sperrzeiten verantwortlich.
Sie können es so erstellen, dass nur die IStiUSD-Schnittstellenmethoden implementiert werden. Der Nachteil dieses Ansatzes ist, dass eine Anwendung IStiUSD::LockDevice direkt aufrufen kann, wodurch das Gerät für die exklusive Verwendung durch die Anwendung gesperrt wird. Das Windows Hardware Quality Lab zertifiziert keine Treiber, die diese Technik verwenden. Solche Treiber können nur als nicht signierte Treiber installiert werden.
Für WIA-Treiber
Die folgende Liste enthält Vorsichtsmaßnahmen und Richtlinien, die Sie beim Arbeiten mit WIA-Treibern beachten sollten:
Überwachen Sie die Aktivität des Geräts während langer Sperrperioden. Wenn keine Aktivität vorhanden ist, sollte der Treiber das Gerät entsperren und anderen Clients erlauben, eine Verbindung herzustellen. Der Treiber sollte das Gerät nicht entsperren, z. B. wenn es ein sehr großes Bild scannt oder wenn es ungewöhnlich lange dauert, um ein Bild zu erhalten. Dadurch wird die aktuelle Sitzung unterbrochen. Je nach Gerät und Bus, auf dem es betrieben wird, kann ein sehr großes Bild zwischen 10 Megabyte und mehr als einem Gigabyte liegen, und ein langer Zeitraum kann zwischen 500 Millisekunden und mehr als einer Minute liegen. Sie sollten Ihr Gerät und den Bus, auf dem es betrieben wird, vergleichen, damit Sie wissen, welche spezifischen Werte für Ihr Gerät gelten.
Anwendungen, die WIA verwenden, greifen nicht auf die Sperrmethoden des Treibers zu, IWiaMiniDrv::d rvLockWiaDevice und IWiaMiniDrv::d rvUnLockWiaDevice. Nur der WIA-Dienst ruft diese Sperrmethoden auf, und der WIA-Dienst verteilt Sperraufrufe an IStiUSD mithilfe der IStiUSD::LockDevice-Methode .
Wenn eine Anwendung ein WIA-Gerät ausschließlich mit der IStiUSD::LockDevice-Methode sperrt , kann der WIA-Dienst erst dann auf das Gerät zugreifen, wenn diese Anwendung die IStiUSD::UnLockDevice-Methode aufruft . Wenn der WIA-Dienst das Gerät nicht sperren kann, ist das Gerät für keine Anwendungen oder Treiber verfügbar, die vom WIA-Dienst abhängig sind.
Die IWiaMiniDrv::d rvLockWiaDevice-Methode sollte immer die IStiDevice::LockDevice-Methode aufrufen, und die IWiaMiniDrv::d rvUnLockWiaDevice-Methode sollte immer die IStiDevice::UnLockDevice-Methode aufrufen. Dadurch wird sichergestellt, dass der WIA-Dienst eine ordnungsgemäße Sperrverwaltung für das Gerät ausführt. Die IStiDevice-Schnittstelle wird in Aufrufen der IWiaMiniDrv::d rvInitializeWia-Methode an den Treiber übergeben. Diese Schnittstelle sollte zwischengespeichert und zum Aufrufen der IStiDevice::LockDevice-Methode verwendet werden. Diese Methode ruft die IStiUSD::LockDevice-Methode Ihres Treibers auf.
Wenn ein BOOL-Wert zum Steuern der Sperrung verwendet wird, schützen Sie diesen Wert vor mehreren Threads. Wenn zwei Treiber versuchen, ein einzelnes Gerät gleichzeitig zu sperren, kann nur ein Treiber erfolgreich sein.