Modalità di trasferimento
Le interfacce dell'immagine ancora definiscono due modalità di trasferimento : modalità di stato e modalità dati. Quando un client dell'interfaccia COM IStillImage chiama IStillImage::CreateDevice per ottenere l'accesso a un dispositivo immagine ancora, specifica una (o entrambe) delle modalità di trasferimento. Più client possono aprire un dispositivo in modalità di stato, ma solo un client alla volta può aprire un dispositivo in modalità dati.
Il monitoraggio eventi di immagine continua apre i dispositivi in modalità di stato. In genere, ma non sempre, le API di acquisizione delle immagini aprono i dispositivi in modalità dati.
Dopo aver aperto un dispositivo in modalità dati, il monitoraggio eventi archivia gli eventi successivi del dispositivo immagine in una coda interna. Se il client chiama IStiDevice::Subscribe, può leggere gli eventi dalla coda chiamando IStiDevice::GetLastNotificationData. Dopo che il client chiude il dispositivo, successivamente gli eventi ricevuti causano nuovamente il tentativo di avvio di un'applicazione registrata dal monitoraggio eventi.
I significati delle due modalità di trasferimento dipendono interamente dal minidriver in modalità utente del dispositivo. Le interfacce IStillImage e IStiDevice consentono di chiamare tutti i metodi in entrambe le modalità.
Un minidriver può determinare la modalità in cui è stata aperta chiamando IStiDevice::GetLastNotificationData. I minidriver devono impedire a un client di eseguire trasferimenti di dati se il client ha richiesto solo la modalità di stato quando si ottiene l'accesso al dispositivo.
È importante notare che i dispositivi vengono in genere aperti in modalità di stato per un tempo relativamente lungo (ad esempio, il monitoraggio eventi controlla gli eventi del dispositivo), mentre vengono aperti in modalità dati per un tempo relativamente breve (ad esempio, per leggere in un'immagine). Anche se l'architettura dell'immagine ancora consente a un solo client alla volta di aprire un dispositivo in modalità dati, potrebbe essere necessario che un driver inserisca ulteriori restrizioni sull'accesso ai dispositivi.
Ad esempio, se si scrive un driver per un dispositivo connesso a una porta seriale, è possibile chiamare CreateFile dall'interno del metodo IStiUSD::LockDevice del driver se il dispositivo è stato aperto in modalità di stato. Ciò impedirà ad altre applicazioni di usare la porta (che potrebbe supportare altri dispositivi) mentre le informazioni sullo stato vengono ottenute dal dispositivo.
Per i dispositivi connessi alle porte dedicate, ad esempio dispositivi bus SCSI o USB, in genere è consentito chiamare CreateFile dall'interno di IStiUSD::Initialize se viene specificata la modalità di stato, perché il dispositivo e la porta saranno sempre dedicati a un client.
Quando un dispositivo viene aperto in modalità dati, CreateFile viene in genere chiamato dall'interno di IStiUSD:Initialize, indipendentemente dal tipo di bus.