Gestione di un'IRP che il framework non supporta
[Si applica solo a KMDF]
Il framework non supporta le richieste di I/O con i seguenti codici IRP principali:
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
- IRP_MJ_DEVICE_CHANGE
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_INFORMATION
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_QUERY_VOLUME_INFORMATION
- IRP_MJ_SET_EA
- IRP_MJ_SET_INFORMATION
- IRP_MJ_SET_QUOTA
- IRP_MJ_SET_SECURITY
- IRP_MJ_SET_VOLUME_INFORMATION
Se il framework riceve un'IRP contenente uno di questi codici di funzione di I/O, il framework non elabora l'IRP. Se il driver è un driver di filtro, il framework passa l'IRP al driver inferiore successivo nello stack di driver. Se il driver non è un driver di filtro, il framework chiama IoCompleteRequest per completare l'IRP con un valore di stato di STATUS_INVALID_DEVICE_REQUEST.
Se il driver deve gestire IP contenenti uno di questi codici di funzione I/O, il driver deve chiamare WdfDeviceInitAssignWdmIrpPreprocessCallback per registrare una funzione di callback dell'evento EvtDeviceWdmIrpPreprocess per un codice di funzione I/O.
Quando il driver riceve un'IRP contenente un codice di funzione I/O che il driver ha registrato una funzione di callback EvtDeviceWdmIrpPreprocess , il framework passa l'IRP alla funzione di callback. La funzione di callback deve quindi elaborare l'IRP seguendo le regole WDM per la gestione degli indirizzi IP. Il driver deve chiamare IoCompleteRequest per completare l'IRP oppure deve chiamare IoCallDriver per passare l'IRP al driver inferiore successivo.
Per un esempio di funzione di callback EvtDeviceWdmIrpPreprocess che gestisce un'IRP che il framework non supporta, vedere il driver di esempio seriale .