Routine StartIo nei driver di Higher-Level
Qualsiasi driver di livello superiore può avere una routine StartIo . Tuttavia, tale driver è improbabile che sia interoperabile con i driver di livello inferiore esistenti e probabilmente presenta caratteristiche di prestazioni scarse.
Una routine StartIo in un driver di livello superiore ha gli effetti seguenti:
Gli IRP in ingresso possono essere accodati chiamando IoStartPacket dalla routine Dispatch Xxx deldriver e IoStartNextPacket dalla routine IoCompletion , causando l'elaborazione di irPs alla volta tramite la routine StartIo .
La velocità effettiva di I/O del driver potrebbe diventare notevolmente più lenta durante periodi di richiesta di I/O pesanti, perché la routine StartIo può diventare un collo di bottiglia.
La routine StartIo del driver chiama IoCallDriver con ogni IRP in IRQL = DISPATCH_LEVEL, causando così tutte le routine di invio dei driver di livello inferiore anche per l'esecuzione in IRQL = DISPATCH_LEVEL. Ciò limita il set di routine di supporto che i driver inferiori possono chiamare nelle routine di invio. Poiché la maggior parte dei writer di driver presuppone che le routine di invio dei driver vengano eseguite in IRQL < DISPATCH_LEVEL, il driver di livello superiore non sarà probabilmente interoperabile con molti driver di livello inferiore esistenti.
La routine StartIo riduce la velocità effettiva complessiva del sistema perché e le routine di invio di tutti i driver di livello inferiore nella catena vengono eseguiti in IRQL = DISPATCH_LEVEL.
Per altre informazioni sugli IRQLs in corrispondenza dei quali vengono eseguite routine di driver standard, vedere Gestione delle priorità hardware.
Nessuno dei driver di livello superiore fornito dal sistema ha una routine StartIo , perché può rallentare l'elaborazione IRP per il driver stesso, per tutti i driver sopra e sotto di esso e per il sistema complessivamente.
La maggior parte dei driver di livello superiore invia semplicemente irP a driver di livello inferiore dalle routine di invio e esegue qualsiasi elaborazione necessaria per la pulizia nelle routine IoCompletion .
Tuttavia, i driver di livello superiore possono configurare code interne per i provider di sicurezza che richiedono tipi di operazioni particolari o configurare code interne per contenere i provider di servizi di rete associati a un set di dispositivi sottostanti eterogenei, ad esempio il driver di porta SCSI. Per altre informazioni, vedere Accodamento e dequeuing di IRP.