Punti da considerare per le routine StartIo
Quando si implementa una routine StartIo , tenere presente quanto segue:
Una routine StartIo deve sincronizzare l'accesso a un dispositivo fisico e a tutte le informazioni sullo stato condiviso o le risorse gestite dal driver nell'estensione del dispositivo con le altre routine del driver che accedono allo stesso dispositivo, posizione di memoria o risorse.
Se la routine StartIo condivide il dispositivo o lo stato con l'ISR, deve usare KeSynchronizeExecution per chiamare una routine SynchCritSection fornita dal driver per programmare il dispositivo o per accedere allo stato condiviso. Per altre informazioni, vedere Uso delle sezioni critiche.
Se la routine StartIo condivide lo stato o le risorse con routine diverse dall'ISR, deve proteggere lo stato condiviso o le risorse con un blocco di rotazione esecutivo inizializzato dal driver per il quale il driver fornisce l'archiviazione. Per altre informazioni, vedere Blocchi di selezione.
Se un driver di dispositivo non WDM monolitico configura un oggetto controller, la routine StartIo può usare l'oggetto controller per sincronizzare le operazioni tramite un dispositivo fisico condiviso con dispositivi collegati (simili).
Per altre informazioni , vedere Oggetti controller .
A meno che un driver di livello superiore strettamente accoppiato prespliti richieste di trasferimento DMA di grandi dimensioni per il driver di dispositivo sottostante, la routine StartIo del driver di dispositivo sottostante deve suddividere le richieste di trasferimento di grandi dimensioni in intervalli di trasferimento parziale e il driver deve eseguire una sequenza di operazioni del dispositivo a trasferimento parziale. Ogni trasferimento parziale deve essere ridimensionato in base alle funzionalità dell'hardware: le funzionalità del dispositivo del driver o, per un dispositivo DMA subordinato, le funzionalità del controller DMA di sistema, a seconda dei vincoli più rigidi.
Per altre informazioni sull'uso di DMA o di sistema o DMA, vedere Adapter Objects and DMA (Oggetti adapter e DMA ).
La routine StartIo di un driver che utilizza DMA deve sincronizzare i trasferimenti tramite un oggetto adapter.
Una routine StartIo viene eseguita in IRQL = DISPATCH_LEVEL, che limita il set di routine di supporto che può chiamare.
Ad esempio, una routine StartIo non può accedere né allocare memoria paging e non può attendere che un oggetto dispatcher venga impostato sullo stato segnalato. D'altra parte, una routine StartIo può acquisire e rilasciare un blocco spin esecutivo allocato dal driver con KeAcquireSpinLockAtDpcLevel e KeReleaseSpinLockFromDpcLevel, che viene eseguito più velocemente rispetto a KeAcquireSpinLock e KeReleaseSpinLock.
Per altre informazioni, vedere Gestione delle priorità hardware e dei blocchi di selezione .
Se il driver contiene irP in uno stato annullabile, la routine StartIo deve verificare se l'IRP di input è già stato annullato prima di avviare qualsiasi elaborazione per tale richiesta nel dispositivo. Per altre informazioni, vedere Annullamento dei runtime di integrazione.