Freigeben über


Verwenden der IStiUSD Escape-Methode

Die IStiUSD::Escape-Methode wird aufgerufen, um Informationen direkt an die Hardware zu übergeben. Diese Methode wird nur unter Windows XP und höheren Betriebssystemen unterstützt.

Die gesamte Kommunikation zwischen einer TWAIN-kompatiblen Anwendung und dem WIA-Treiber erfolgt zuerst an den Datenquellen-Manager (twain_32.dll), der wiederum die TWAIN-Kompatibilitätsebene aufruft (wiadss.dll). Die TWAIN-Kompatibilitätsebene ruft dann die IStiUSD::Escape-Methode des WIA-Treibers auf und übergibt einen der folgenden beiden Escapecodes an die -Methode:

ESC_TWAIN_CAPABILITY Escapecode

ESC_TWAIN_PRIVATE_SUPPORTED_CAPS Escapecode

Wenn die TWAIN-Anwendung die private Funktionsliste des WIA-Treibers anfordert, ruft die TWAIN-Kompatibilitätsebene die IStiUSD::Escape-Methode des Treibers auf und übergibt ESC_TWAIN_PRIVATE_SUPPORTED_CAPS im Aufruf. Wenn der Treiber keine Passthrough-Funktionalität unterstützt, gibt er die Statische (Standard)-Funktionsliste der TWAIN-Kompatibilitätsebene zurück. Andernfalls gibt der Treiber eine Liste der unterstützten privaten Funktionen an die TWAIN-Kompatibilitätsebene zurück.

Wenn die TWAIN-Anwendung einen Funktionsvorgang sendet, der nicht bereits in der Standardliste der TWAIN-Kompatibilitätsebene enthalten ist, ruft die TWAIN-Kompatibilitätsebene die IStiUSD::Escape-Methode des Treibers auf, wobei dieses Mal ESC_TWAIN_CAPABILITY im Aufruf übergeben wird.

Die vorstehende Erklärung ist jedoch etwas vereinfacht. Wenn die TWAIN-Anwendung nach der Liste der privaten Funktionen des Treibers fragt, führt die TWAIN-Kompatibilitätsebene tatsächlich zwei Aufrufe der IStiUSD::Escape-Methode des Treibers aus. Im ersten Aufruf fragt die TWAIN-Kompatibilitätsebene den WIA-Treiber, wie viel Arbeitsspeicher zum Speichern der Funktionsliste benötigt wird. Die TWAIN-Kompatibilitätsebene weist dann diese Menge an Arbeitsspeicher zu, die der WIA-Treiber verwenden soll. Im zweiten Aufruf fragt die TWAIN-Kompatibilitätsebene den WIA-Treiber nach der Funktionsliste, die der WIA-Treiber in den zuvor genannten Arbeitsspeicher kopiert. Die TWAIN-Kompatibilitätsebene ist für die Zuweisung und Freigabe des gesamten in TWAIN-WIA-Transaktionen verwendeten Arbeitsspeichers verantwortlich. Diese Anordnung verhindert, dass der WIA-Treiber Arbeitsspeicher freigibt, den die TWAIN-Kompatibilitätsebene verwendet.

Die TWAIN-Kompatibilitätsebene ruft auch zweimal die IStiUSD::Escape-Methode des Treibers auf, wenn ESC_TWAIN_CAPABILITY übergeben wird und für die die Absicht besteht, eine Funktion zu erhalten. Beim ersten Aufruf wird der WIA-Treiber gefragt, wie viel Arbeitsspeicher er benötigt, um die Funktion zu speichern, und der zweite Aufruf gibt die Funktion zurück. Beachten Sie, dass SET-Funktionsvorgänge nur einen einzelnen Aufruf von IStiUSD::Escape erfordern, da kein Arbeitsspeicher zugewiesen werden muss.

Alle Aufrufe der IStiUSD::Escape-Methode sollten in der folgenden Reihenfolge überprüft werden:

  1. Überprüfen Sie den EscapeFunction-Funktionscode . Wenn sie ungültig ist, schlagen Sie sofort fehl. Dadurch wird verhindert, dass falsche Codes im Treiber verarbeitet werden.

  2. Überprüfen Sie den eingehenden Puffer lpInData. Wenn sie ungültig ist, schlagen Sie sofort fehl. Ungültige eingehende Puffer können dazu führen, dass der WIA-Treiber abstürzt.

  3. Überprüfen Sie den ausgehenden Puffer pOutData. Wenn sie ungültig ist, schlagen Sie sofort fehl. Wenn der Treiber die Anforderung nicht abschließen kann, indem er die erforderlichen Daten schreibt, muss er diese Daten nicht verarbeiten.

  4. Überprüfen Sie die Größe des ausgehenden Puffers. Wenn der Treiber nicht die richtige Datenmenge in den ausgehenden Puffer schreiben kann, kann der Aufrufer diese Daten nicht ordnungsgemäß verarbeiten.

Die Codebeispiele in den folgenden Abschnitten veranschaulichen die Verwendung von Pass-Through-Funktionen, die TWAIN-Anwendungen mit privaten Funktionen unterstützen. Die Codebeispiele verwenden zwei Escapecodes, die in der Headerdatei wiatwcmp.h definiert sind, ESC_TWAIN_PRIVATE_SUPPORTED_CAPS und ESC_TWAIN_CAPABILITY.

ESC_TWAIN_PRIVATE_SUPPORTED_CAPS Escapecode

ESC_TWAIN_CAPABILITY Escapecode