Condividi tramite


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.