Procedure consigliate per il blocco e lo sblocco
Il blocco per la parte STI di un driver WIA richiede particolare attenzione. Anche se un'applicazione può accedere direttamente alle interfacce STI pubblicate, tale accesso diretto al dispositivo può essere usato in modo improprio. Le tecniche di blocco implementate in modo non corretto possono lasciare aperto un dispositivo a un attacco Denial of Service (DoS).
Per le applicazioni STI
L'elenco seguente contiene precauzioni e linee guida da seguire quando si usano le applicazioni STI:
Non bloccare i blocchi per periodi di tempo prolungati.
Se non è necessario l'accesso diretto al dispositivo, potrebbe essere possibile ottenere le stesse informazioni usando metodi di interfaccia WIA. Questo è preferibile perché il servizio WIA controlla quindi il blocco per te.
I driver TWAIN che usano STI usano il metodo IStiUSD::LockDevice per controllare l'accesso al dispositivo. Quando un driver TWAIN usa STI, il driver TWAIN è responsabile del controllo dei tempi di blocco.
È possibile crearlo in modo che implementi solo i metodi di interfaccia IStiUSD . Lo svantaggio di questo approccio è che un'applicazione può chiamare direttamente IStiUSD::LockDevice , bloccando il dispositivo per l'uso esclusivo dall'applicazione. Windows Hardware Quality Lab non certifica i driver che usano questa tecnica; tali driver possono essere installati solo come driver non firmati.
Per i driver WIA
L'elenco seguente contiene precauzioni e linee guida da seguire quando si utilizzano i driver WIA:
Monitorare l'attività del dispositivo durante lunghi periodi di blocco. Se non è presente alcuna attività, il driver deve sbloccare il dispositivo e consentire ad altri client di connettersi. Il driver non deve sbloccare il dispositivo, ad esempio, se esegue la scansione di un'immagine molto grande o se richiede un tempo insolitamente lungo per acquisire un'immagine. In questo modo viene interrotta la sessione corrente. A seconda del dispositivo e del bus su cui opera, un'immagine molto grande può essere ovunque da 10 megabyte a più di un gigabyte e un lungo periodo di tempo può essere compreso tra 500 millisecondi e più di un minuto. È consigliabile eseguire il benchmark del dispositivo e del bus su cui opera in modo da sapere quali valori specifici sono per il dispositivo.
Le applicazioni che usano WIA non accedono ai metodi di blocco del driver, IWiaMiniDrv::d rvLockWiaDevice e IWiaMiniDrv::d rvUnLockWiaDevice. Solo il servizio WIA chiama questi metodi di blocco, il servizio WIA propaga le chiamate di blocco a IStiUSD usando il metodo IStiUSD::LockDevice .
Se un'applicazione blocca esclusivamente un dispositivo WIA usando il metodo IStiUSD::LockDevice , il servizio WIA non può accedere al dispositivo finché tale applicazione non chiama il metodo IStiUSD::UnLockDevice . Se il servizio WIA non può bloccare il dispositivo, il dispositivo non sarà disponibile per le applicazioni o i driver che si basano sul servizio WIA.
Il metodo IWiaMiniDrv::d rvLockWiaDevice deve sempre chiamare il metodo IStiDevice::LockDevice e il metodo IWiaMiniDrv::d rvUnLockWiaDevice deve sempre chiamare il metodo IStiDevice::UnLockDevice . Ciò garantisce che il servizio WIA esegua una gestione corretta dei blocchi per il dispositivo. L'interfaccia IStiDevice viene passata al driver nelle chiamate al metodo IWiaMiniDrv::d rvInitializeWia . Questa interfaccia deve essere memorizzata nella cache e usata per chiamare il metodo IStiDevice::LockDevice . Questo metodo chiama il metodo IStiUSD::LockDevice del driver.
Se viene usato un valore BOOL per controllare il blocco, proteggere questo valore da più thread. Quando due driver tentano di bloccare un singolo dispositivo contemporaneamente, un solo driver può avere esito positivo.