Modifiche del driver di trasferimento dati IStream
Per ridurre al minimo le modifiche ai driver sviluppati prima di Windows Vista, i driver non devono implementare nuove interfacce per supportare il trasferimento dei dati IStream . È stata invece esposta una nuova interfaccia tramite l'interfaccia IWiaMiniDrvCallBack. I driver possono chiamare IWiaMiniDrvCallBack::QueryInterface per la nuova funzione di callback IWiaTransfer , che darà loro accesso ai flussi di dati e alle notifiche di stato. L'interfaccia IWiaTransfer è descritta nella documentazione di Microsoft Windows SDK.
Il codice di trasferimento dei dati all'interno del driver è ora più semplice perché tutti i trasferimenti vengono gestiti allo stesso modo, senza logica del ramo di trasferimento di file o memoria.
I driver che non supportano il modello di trasferimento IStream in genere eseguono i passaggi seguenti:
Controllare i flag per determinare se la richiesta è per un caricamento o un download.
Acquisire l'interfaccia IWiaMiniDrvCallBack .
Ricevere un flusso di destinazione dalla funzione di callback.
Eseguire un ciclo di trasferimento dati:
- Ricevere dati dal dispositivo.
- Scrivere dati nel flusso.
Tuttavia, per i driver che implementano il nuovo modello di trasferimento IStream , il servizio WIA non chiamerà IWiaMiniDrv::d rvWriteItemProperties perché l'acquisizione delle cartelle è supportata.
Nell'acquisizione di cartelle, una singola richiesta di trasferimento si trova nell'elemento padre, ma le proprietà effettive dell'elemento sono in ogni elemento figlio che viene trasferito. Il metodo IWiaMiniDrv::d rvWriteItemProperties non viene chiamato per ogni elemento figlio, pertanto questo metodo non può essere usato per programmare le impostazioni del dispositivo. Per i driver che supportano i trasferimenti di dati IStream , il servizio WIA chiama invece IWiaMiniDrv::d rvAcquireItemData .
Nota Questa modifica influisce solo sui driver che supportano i nuovi trasferimenti di dati. I driver legacy, che non supportano i trasferimenti di dati IStream , non sono interessati; il servizio WIA continuerà a chiamare il metodo IWiaMiniDrv::d rvWriteItemProperties .
Nelle acquisizioni di cartelle in cui il driver effettua più chiamate a IWiaTransferCallback::GetNextStream (descritto nella documentazione di Microsoft Windows SDK), il driver può avere un solo flusso attivo alla volta.
Il driver deve chiamare solo i metodi IStream::Write, IStream::Seek e IStream::SetSize (descritti nella documentazione di Windows SDK) durante un'operazione di download. Questa restrizione semplifica la scrittura del filtro. Il driver non dovrebbe aspettarsi che il flusso di destinazione implementerà altri metodi.
Quando la proprietà WIA_DPS_PAGE_SIZE è impostata su WIA_PAGE_AUTO ,ovvero il rilevamento automatico delle dimensioni della pagina è abilitato, il driver deve fornire informazioni accurate sulla dimensione solo dopo il completamento del trasferimento dei dati dell'immagine. Per i trasferimenti basati su flusso, il driver deve aggiornare le dimensioni dell'immagine nell'intestazione dell'immagine alla fine del trasferimento. All'inizio di una nuova sessione, il valore della proprietà WIA_DPS_PAGE_SIZE deve essere sempre impostato su un valore diverso da WIA_PAGE_AUTO.