Condividi tramite


Gestione dei trasferimenti in modo asincrono

Ad eccezione dei driver di livello più alto, tutti i driver gestiscono IRP_MJ_READ e IRP_MJ_WRITE richieste in modo asincrono. Le routine DispatchRead e DispatchWrite in un driver di livello più alto non possono attendere che i driver di livello inferiore finisca l'elaborazione di una richiesta di lettura o scrittura asincrona; devono passare tale richiesta ai driver più bassi e restituire STATUS_PENDING.

Analogamente, una routine DispatchReadWrite del driver di dispositivo di livello più basso deve passare la richiesta di trasferimento ad altre routine driver che elaborano le richieste di I/O del dispositivo e quindi restituiscono STATUS_PENDING.

Un driver di livello superiore a volte deve configurare irP di trasferimento parziale e passarli a driver inferiori. Il driver di livello superiore può completare l'IRP di lettura/scrittura originale solo quando le richieste di trasferimento parziale sono state completate dai driver inferiori.

Ad esempio, è necessaria una routine DispatchReadWrite del driver di classe SCSI per suddividere richieste di trasferimento di grandi dimensioni che superano le funzionalità di trasferimento dell'HBA sottostante in un set di richieste di trasferimento parziale. Il driver di classe deve configurare i parametri nei relativi IRP di trasferimento parziale in modo che i driver porta/miniport SCSI possano soddisfare ogni richiesta di trasferimento parziale in una singola operazione DMA.

Altri driver di dispositivo che usano DMA o PIO potrebbero anche dover suddividere le richieste di trasferimento di grandi dimensioni per se stessi.

Per altre informazioni sull'uso di DMA e PIO, vedere Tecniche di input/output.