處理架構不支援的 IRP
[僅適用於 KMDF]
此架構不支援具有下列主要 IRP 代碼的 I/O 要求:
- 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
如果架構收到包含下列其中一個 I/O 函式代碼的 IRP,架構就不會處理 IRP。 如果您的驅動程式是篩選驅動程式,架構會將 IRP 傳遞至驅動程式堆疊中的下一個較低驅動程式。 如果您的驅動程式不是篩選驅動程式,架構會呼叫 IoCompleteRequest ,以STATUS_INVALID_DEVICE_REQUEST狀態值完成IRP。
如果您的驅動程式必須處理包含上述任何 I/O 函式代碼的 IRP,驅動程式必須呼叫 WdfDeviceInitAssignWdmIrpPreprocessCallback 來註冊 I/O 函式程式代碼的 EvtDeviceWdmIrpPreprocess 事件回呼函式。
當驅動程式收到包含驅動程式已註冊 EvtDeviceWdmIrpPreprocess 回呼函式的 I/O 函式程式代碼的 IRP 時,架構會將 IRP 傳遞至回呼函式。 然後,回呼函式必須遵循 WDM 規則來處理 IRP,以處理 IRP。 驅動程式必須呼叫 IoCompleteRequest 來完成 IRP,或者必須呼叫 IoCallDriver ,才能將 IRP 傳遞至下一個較低的驅動程式。
如需處理架構不支援之 IRP 的 EvtDeviceWdmIrpPreprocess 回呼函式範例,請參閱 序列 範例驅動程式。