Quando controllare la posizione dello stack di I/O del driver
Un codice di funzione di I/O principale viene impostato nel percorso dello stack di I/O del driver per ogni IRP in ingresso.
La routine di invio di un driver deve controllare la posizione dello stack di I/O del driver per determinare cosa fare se una delle condizioni seguenti è in attesa:
La routine dispatch gestisce più di un codice di funzione di I/O principale.
La routine dispatch deve gestire un set di codici di funzione secondari per determinati codici di funzione principali. I provider di integrazione con codici di funzione secondari includono IRP_MJ_PNP e IRP_MJ_POWER, nonché determinati IRP che il driver della porta SCSI e i driver del file system devono gestire.
La routine dispatch di un driver di dispositivo o di un driver di livello superiore strettamente accoppiato gestisce IRP_MJ_DEVICE_CONTROL o richieste di IRP_MJ_INTERNAL_DEVICE_CONTROL , che hanno un set associato di codici di controllo di I/O.
Per ottenere un puntatore alla posizione dello stack di I/O di un driver, la routine dispatch chiama IoGetCurrentIrpStackLocation.
Le routine di invio dei driver di livello superiore chiamano sempre IoGetCurrentIrpStackLocation e chiamano anche IoGetNextIrpStackLocation per ottenere un puntatore alla posizione dello stack di I/O del driver inferiore successivo per i runtime di integrazione configurati per il driver inferiore successivo, quando passano i runtime di integrazione nello stack di driver.
La routine DispatchDeviceControl o DispatchInternalDeviceControl di un driver di dispositivo o eventualmente dei driver di classe strettamente associati deve determinare quale codice di controllo di I/O è impostato nel percorso dello stack I/O del driver in Parameters.DeviceIoControl.IoControlCode per ogni richiesta. Il codice di controllo di I/O è contenuto nella posizione dello stack di I/O del driver.
Nella maggior parte dei casi, la routine DispatchDeviceControl o DispatchInternalDeviceControl di un driver di livello superiore passa semplicemente una richiesta di IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL al driver inferiore successivo, dopo aver configurato la posizione dello stack in IRP. Tuttavia, i driver di classe SCSI devono verificare la presenza di determinati codici di controllo di I/O della porta SCSI in modo che possano configurare correttamente la posizione dello stack di I/O del driver della porta SCSI prima di passare queste richieste.