IStiUSD エスケープ メソッドの使用

IStiUSD::Escape メソッドは、ハードウェアに情報を直接渡すために呼び出されます。 この方法は、Windows XP 以降のオペレーティング システムでのみサポートされます。

TWAIN と互換性のあるアプリケーションと WIA ドライバーの間のすべてのコミュニケーションは、まずデータ ソース マネージャー (twain_32.dll) に転送され、次に TWAIN 互換性レイヤー (wiadss.dll) が呼び出されます。 その後、TWAIN 互換性レイヤーは WIA ドライバーの IStiUSD::Escape メソッドを呼び出し、次の 2 つのエスケープ コードのいずれかをメソッドに渡します。

ESC_TWAIN_CAPABILITY エスケープ コード

ESC_TWAIN_PRIVATE_SUPPORTED_CAPS エスケープ コード

TWAIN アプリケーションが WIA ドライバーのプライベート機能リストを要求すると、TWAIN 互換性レイヤーはドライバーの IStiUSD::Escape メソッドを呼び出し、呼び出しで ESC_TWAIN_PRIVATE_SUPPORTED_CAPS を渡します。 ドライバーがパススルー機能をサポートしていない場合は、TWAIN 互換性レイヤーの静的 (既定) 機能の一覧が返されます。 それ以外の場合、ドライバーはサポートされているプライベート機能の一覧を TWAIN 互換性レイヤーに返します。

TWAIN アプリケーションが TWAIN 互換性レイヤーの既定のリストにない機能操作を送信すると、TWAIN 互換性レイヤーはドライバーの IStiUSD::Escape メソッドを呼び出し、今度は呼び出しで ESC_TWAIN_CAPABILITY を渡します。

ただし、前述の説明はやや単純化されています。 TWAIN アプリケーションがドライバーのプライベート機能リストを要求すると、TWAIN 互換性レイヤーは実際にはドライバーの IStiUSD::Escape メソッドを 2 回呼び出します。 最初の呼び出しでは、TWAIN 互換性レイヤーは、機能リストを格納するために必要なメモリの量を WIA ドライバーに要求します。 その後、TWAIN 互換性レイヤーは、WIA ドライバーが使用するためにその量のメモリを割り当てます。 2 番目の呼び出しでは、TWAIN 互換性レイヤーは、WIA ドライバーが以前にメンションされたメモリにコピーする機能の一覧を WIA ドライバーに要求します。 TWAIN 互換性レイヤーは、TWAIN-WIA トランザクションで使用されるすべてのメモリの割り当てと解放を担当します。 この配置により、WIA ドライバーが TWAIN 互換性レイヤーで使用されているメモリを解放できなくなります。

TWAIN 互換性レイヤーは、ESC_TWAIN_CAPABILITY が渡され、機能を取得することを目的とする場合に、ドライバーの IStiUSD::Escape メソッドを 2 回呼び出します。 最初の呼び出しは、機能を格納するために必要なメモリ量を WIA ドライバーに要求し、2 番目の呼び出しが機能を返します。 メモリを割り当てる必要がないため、Standard Edition T 機能操作では IStiUSD::Escape の呼び出しが 1 回だけ必要であることに注意してください。

IStiUSD::Escape メソッドへのすべての呼び出しは、次の順序で検証する必要があります。

  1. EscapeFunction 関数コードを検証します。 無効な場合は、すぐに失敗します。 これにより、ドライバーで不適切なコードが処理されるのを防ぐことができます。

  2. 受信バッファー、lpInData を検証します。 無効な場合は、すぐに失敗します。 受信バッファーが無効な場合、WIA ドライバーがクラッシュする可能性があります。

  3. 送信バッファー、pOutData を検証します。 無効な場合は、すぐに失敗します。 ドライバーが必要なデータを書き込んで要求を完了できない場合、そのデータを処理する必要はありません。

  4. 送信バッファーのサイズを検証します。 ドライバーが送信バッファーに正しい量のデータを書き込むことができない場合、呼び出し元は、そのデータを適切に処理できません。

次のセクションのコード サンプルでは、プライベート機能を備えた TWAIN アプリケーションをサポートするパススルー機能の使用方法を示します。 このコード サンプルでは、ヘッダー ファイル wiatwcmp.h、 ESC_TWAIN_PRIVATE_SUPPORTED_CAPS and ESC_TWAIN_CAPABILITY で定義されている 2 つのエスケープ コードを使用します。

ESC_TWAIN_PRIVATE_SUPPORTED_CAPS エスケープ コード

ESC_TWAIN_CAPABILITY エスケープ コード