Compartilhar via


Usando o método de escape IStiUSD

O método IStiUSD::Escape é chamado para passar informações diretamente para o hardware. Esse método tem suporte apenas no Windows XP e em sistemas operacionais posteriores.

Toda a comunicação entre um aplicativo compatível com TWAIN e o driver WIA vai primeiro para o gerenciador de fonte de dados (twain_32.dll), que, por sua vez, chama para a camada de compatibilidade TWAIN (wiadss.dll). Em seguida, a camada de compatibilidade do TWAIN chama o método IStiUSD::Escape do driver WIA e passa um dos dois seguintes códigos de escape para o método :

código de escape ESC_TWAIN_CAPABILITY

código de escape ESC_TWAIN_PRIVATE_SUPPORTED_CAPS

Quando o aplicativo TWAIN solicita a lista de funcionalidades privadas do driver WIA, a camada de compatibilidade do TWAIN chama o método IStiUSD::Escape do driver, passando ESC_TWAIN_PRIVATE_SUPPORTED_CAPS na chamada. Se o driver não der suporte à funcionalidade de passagem, ele retornará a lista de funcionalidades estáticas (padrão) da camada de compatibilidade TWAIN. Caso contrário, o driver retornará uma lista de recursos privados com suporte para a camada de compatibilidade do TWAIN.

Quando o aplicativo TWAIN envia uma operação de funcionalidade que ainda não está na lista padrão da camada de compatibilidade TWAIN, a camada de compatibilidade TWAIN chama o método IStiUSD::Escape do driver, desta vez passando ESC_TWAIN_CAPABILITY na chamada.

No entanto, a explicação anterior é um pouco simplificada. Quando o aplicativo TWAIN solicita a lista de recursos privados do driver, a camada de compatibilidade do TWAIN realmente faz duas chamadas para o método IStiUSD::Escape do driver. Na primeira chamada, a camada de compatibilidade TWAIN pergunta ao driver WIA quanta memória é necessária para armazenar a lista de recursos. Em seguida, a camada de compatibilidade do TWAIN aloca essa quantidade de memória para o driver WIA usar. Na segunda chamada, a camada de compatibilidade TWAIN solicita ao driver WIA a lista de funcionalidades, que o driver WIA copia para a memória mencionada anteriormente. A camada de compatibilidade TWAIN é responsável por alocar e liberar toda a memória usada em transações TWAIN-WIA. Essa disposição impede que o driver WIA libere memória que a camada de compatibilidade TWAIN está usando.

A camada de compatibilidade do TWAIN também chama o método IStiUSD::Escape do driver duas vezes quando ESC_TWAIN_CAPABILITY é passado e para o qual a intenção é obter uma funcionalidade. A primeira chamada pergunta ao driver WIA quanta memória ele precisa para armazenar a funcionalidade e a segunda chamada retorna a funcionalidade. Observe que as operações de funcionalidade SET exigem apenas uma única chamada para IStiUSD::Escape, pois nenhuma memória precisa ser alocada.

Todas as chamadas para o método IStiUSD::Escape devem ser validadas nesta ordem:

  1. Valide o código da função EscapeFunction . Se não for válido, falhe imediatamente. Isso impede que códigos incorretos sejam processados no driver.

  2. Valide o buffer de entrada, lpInData. Se não for válido, falhe imediatamente. Buffers de entrada inválidos podem causar falha no driver WIA.

  3. Valide o buffer de saída, pOutData. Se não for válido, falhe imediatamente. Se o driver não puder concluir a solicitação gravando os dados necessários, ele não precisará processar esses dados.

  4. Valide o tamanho do buffer de saída. Se o driver não puder gravar a quantidade correta de dados no buffer de saída, o chamador não poderá processar corretamente esses dados.

Os exemplos de código nas seções a seguir ilustram o uso da funcionalidade pass-though, dando suporte a aplicativos TWAIN com recursos privados. Os exemplos de código usam dois códigos de escape definidos no arquivo de cabeçalho wiatwcmp.h, ESC_TWAIN_PRIVATE_SUPPORTED_CAPS e ESC_TWAIN_CAPABILITY.

código de escape ESC_TWAIN_PRIVATE_SUPPORTED_CAPS

código de escape ESC_TWAIN_CAPABILITY