Compartilhar via


Práticas recomendadas de bloqueio e desbloqueio

O bloqueio para a parte de STI de um driver WIA precisa de atenção especial. Embora um aplicativo possa acessar diretamente as interfaces STI publicadas, esse acesso direto ao dispositivo pode ser usado incorretamente. As técnicas de bloqueio implementadas incorretamente podem deixar um dispositivo aberto a um ataque de Negação de Serviço (DoS).

Para aplicativos STI

A lista a seguir contém precauções e diretrizes que você deve seguir ao usar aplicativos STI:

  • Não mantenha bloqueios por longos períodos de tempo.

  • Se você não precisar de acesso direto ao dispositivo, talvez seja possível obter as mesmas informações usando métodos de interface WIA. Isso é preferível porque o serviço WIA controla o bloqueio para você.

  • Os drivers TWAIN que usam STI usam o método IStiUSD::LockDevice para controlar o acesso ao dispositivo. Quando um driver TWAIN usa STI, o driver TWAIN é responsável por controlar os tempos de bloqueio.

  • Você pode criá-lo para que ele implemente apenas os métodos de interface IStiUSD . A desvantagem dessa abordagem é que um aplicativo pode chamar IStiUSD::LockDevice diretamente, bloqueando o dispositivo para uso exclusivo pelo aplicativo. O Windows Hardware Quality Lab não certifica os drivers que usam essa técnica; esses drivers só podem ser instalados como drivers sem sinal.

Para drivers WIA

A lista a seguir contém precauções e diretrizes que você deve seguir ao trabalhar com drivers WIA:

  • Monitore a atividade do dispositivo durante longos períodos de bloqueio. Se não houver atividade, o driver deverá desbloquear o dispositivo e permitir que outros clientes se conectem. O driver não deve desbloquear o dispositivo, por exemplo, se ele estiver verificando uma imagem muito grande ou se estiver demorando muito para adquirir uma imagem. Isso interrompe a sessão atual. Dependendo do dispositivo e do ônibus em que ele opera, uma imagem muito grande pode estar em qualquer lugar, de 10 megabytes a mais de um gigabyte, e um longo período de tempo pode ser de 500 milissegundos a mais de um minuto. Você deve comparar seu dispositivo e o barramento no qual ele opera para saber quais são esses valores específicos para seu dispositivo.

  • Os aplicativos que usam WIA não acessam os métodos de bloqueio do driver, IWiaMiniDrv::d rvLockWiaDevice e IWiaMiniDrv::d rvUnLockWiaDevice. Somente o serviço WIA chama esses métodos de bloqueio, o serviço WIA propaga chamadas de bloqueio para IStiUSD usando o método IStiUSD::LockDevice .

  • Se um aplicativo bloquear exclusivamente um dispositivo WIA usando o método IStiUSD::LockDevice , o serviço WIA não poderá acessar o dispositivo até que esse aplicativo chame o método IStiUSD::UnLockDevice . Se o serviço WIA não puder bloquear o dispositivo, o dispositivo não estará disponível para nenhum aplicativo ou drivers que dependem do serviço WIA.

  • O método IWiaMiniDrv::d rvLockWiaDevice deve sempre chamar o método IStiDevice::LockDevice e o método IWiaMiniDrv::d rvUnLockWiaDevice sempre deve chamar o método IStiDevice::UnLockDevice . Isso garante que o serviço WIA execute o gerenciamento de bloqueio adequado para o dispositivo. A interface IStiDevice é passada para o driver em chamadas para o método IWiaMiniDrv::d rvInitializeWia . Essa interface deve ser armazenada em cache e usada para chamar o método IStiDevice::LockDevice . Esse método chama o método IStiUSD::LockDevice do driver.

  • Se um valor BOOL for usado para controlar o bloqueio, proteja esse valor de vários threads. Quando dois drivers tentam bloquear um único dispositivo ao mesmo tempo, apenas um driver pode ter êxito.