Partager via


Meilleures pratiques de verrouillage et de déverrouillage

Le verrouillage pour la partie STI d’un pilote WIA nécessite une attention particulière. Même si une application peut accéder directement aux interfaces STI publiées, cet accès direct à l’appareil peut être utilisé à mauvais escient. Les techniques de verrouillage implémentées de manière incorrecte peuvent laisser un appareil ouvert à une attaque par déni de service (DoS).

Pour les applications STI

La liste suivante contient des précautions et des instructions que vous devez suivre lors de l’utilisation d’applications STI :

  • Ne maintenez pas les verrous pendant de longues périodes.

  • Si vous n’avez pas besoin d’un accès direct à l’appareil, il peut être possible d’obtenir les mêmes informations à l’aide des méthodes d’interface WIA. Cela est préférable, car le service WIA contrôle ensuite le verrouillage pour vous.

  • Les pilotes TWAIN qui utilisent STI utilisent la méthode IStiUSD::LockDevice pour contrôler l’accès à l’appareil. Lorsqu’un pilote TWAIN utilise sti, il est responsable du contrôle des temps de verrouillage.

  • Vous pouvez le créer afin qu’il implémente uniquement les méthodes d’interface IStiUSD . L’inconvénient de cette approche est qu’une application peut appeler IStiUSD::LockDevice directement, verrouillant ainsi l’appareil pour une utilisation exclusive par l’application. Le laboratoire de qualité matérielle Windows ne certifie pas les pilotes qui utilisent cette technique ; ces pilotes peuvent être installés uniquement en tant que pilotes non signés.

Pour les pilotes WIA

La liste suivante contient des précautions et des instructions que vous devez suivre lorsque vous utilisez des pilotes WIA :

  • Surveillez l’activité de l’appareil pendant de longues périodes de verrouillage. En l’absence d’activité, le pilote doit déverrouiller l’appareil et autoriser les autres clients à se connecter. Le pilote ne doit pas déverrouiller l’appareil, par exemple, s’il analyse une image très volumineuse ou s’il prend un temps inhabituellement long pour acquérir une image. Cela interrompt la session active. Selon l’appareil et le bus sur lequel il fonctionne, une image très grande peut être comprise entre 10 mégaoctets et plus d’un gigaoctet, et une longue période de temps peut être comprise entre 500 millisecondes et plus d’une minute. Vous devez évaluer votre appareil et le bus sur lequel il fonctionne afin de savoir quelles sont ces valeurs spécifiques pour votre appareil.

  • Les applications qui utilisent WIA n’accèdent pas aux méthodes de verrouillage du pilote, IWiaMiniDrv::d rvLockWiaDevice et IWiaMiniDrv::d rvUnLockWiaDevice. Seul le service WIA appelle ces méthodes de verrouillage. Le service WIA propage les appels de verrouillage à IStiUSD à l’aide de la méthode IStiUSD::LockDevice .

  • Si une application verrouille exclusivement un appareil WIA à l’aide de la méthode IStiUSD::LockDevice , le service WIA ne peut pas accéder à l’appareil tant que cette application n’a pas appelé la méthode IStiUSD::UnLockDevice . Si le service WIA ne peut pas verrouiller l’appareil, l’appareil ne sera pas disponible pour les applications ou les pilotes qui s’appuient sur le service WIA.

  • La méthode IWiaMiniDrv::d rvLockWiaDevice doit toujours appeler la méthode IStiDevice::LockDevice , et la méthode IWiaMiniDrv::d rvUnLockWiaDevice doit toujours appeler la méthode IStiDevice::UnLockDevice . Cela garantit que le service WIA effectue une gestion des verrous appropriée pour l’appareil. L’interface IStiDevice est passée au pilote dans les appels à la méthode IWiaMiniDrv::d rvInitializeWia . Cette interface doit être mise en cache et utilisée pour appeler la méthode IStiDevice::LockDevice . Cette méthode appelle la méthode IStiUSD::LockDevice de votre pilote.

  • Si une valeur BOOL est utilisée pour contrôler le verrouillage, protégez cette valeur contre plusieurs threads. Lorsque deux pilotes tentent de verrouiller un seul appareil en même temps, un seul pilote peut réussir.