共用方式為


EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL回呼函式 (wdfio.h)

[適用於 KMDF 和 UMDF]

驅動程式的 EvtIoInternalDeviceControl 事件回呼函式會處理包含內部裝置 I/O 控制程式碼 (IOCTL) 的 I/O 要求。

語法

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtWdfIoQueueIoInternalDeviceControl;

void EvtWdfIoQueueIoInternalDeviceControl(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

參數

[in] Queue

與 I/O 要求相關聯的架構佇列物件的句柄。

[in] Request

架構要求物件的句柄。

[in] OutputBufferLength

如果可用的輸出緩衝區,則要求輸出緩衝區的長度,以位元組為單位。

[in] InputBufferLength

如果輸入緩衝區可用,則要求輸入緩衝區的長度,以位元組為單位。

[in] IoControlCode

與要求相關聯的驅動程式定義或系統定義的IOCTL。

返回值

沒有

備註

驅動程式會在呼叫 WdfIoQueueCreate 方法時,註冊 EvtIoInternalDeviceControl 回呼函式。 如需呼叫 WdfIoQueueCreate的詳細資訊,請參閱 建立 I/O 佇列

如果驅動程式已註冊裝置 I/O 佇列的 EvtIoInternalDeviceControl 回呼函式,則回呼函式會從佇列接收每個內部 I/O 控制要求(IRP_MJ_INTERNAL_DEVICE_CONTROL)。 如需詳細資訊,請參閱 要求處理程式

EvtIoInternalDeviceControl 回呼函式必須以某種方式處理每個接收的 I/O 要求。 如需詳細資訊,請參閱 處理 I/O 要求

當另一個驅動程式透過呼叫 WdfIoTargetSendInternalIoctlSynchronously WdfIoTargetFormatRequestForInternalIoctl來建立要求時,驅動程式會收到內部 I/O 控制要求。

要執行的作業類型取決於 IoControlCode 參數的值。 您必須判斷一組 IoControlCode 應用程式和其他驅動程式可以傳送至驅動程式的值。 如需 IOCTL 的詳細資訊,請參閱 使用 I/O 控制碼

大部分的內部 I/O 控制作業都需要輸入緩衝區、輸出緩衝區或兩者。 如需驅動程式如何存取要求緩衝區的資訊,請參閱在 Framework-Based Drivers 中存取數據緩衝區

驅動程式可用來存取要求的輸入和輸出緩衝區的技術(如果有的話),取決於 IOCTL 的 TransferType 字段。 IOCTL TransferType 欄位的值可以是METHOD_BUFFERED、METHOD_DIRECT_IN、METHOD_DIRECT_OUT或METHOD_NEITHER。 如需 [TransferType] 字段的詳細資訊,請參閱 定義 I/O 控制代碼

除非裝置或驅動程式 WDF_OBJECT_ATTRIBUTES 結構的 ExecutionLevel 成員設定為 WdfExecutionLevelPassive,否則可以在 IRQL <= DISPATCH_LEVEL 呼叫 EvtIoInternalDeviceControl 回呼函式。 (如果您的驅動程式位於其驅動程式堆疊頂端,則會在 IRQL = PASSIVE_LEVEL 呼叫回呼函式。

如果 IRQL 是PASSIVE_LEVEL,則架構會呼叫 重要區域中的回呼函式,

如需要求處理程式 IRQL 層級的詳細資訊,請參閱使用自動同步處理

驅動程序的 EvtIoInternalDeviceControl 回呼函式不應該呼叫下列佇列物件方法:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

需求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標題 wdfio.h (包括 Wdf.h)
IRQL <= DISPATCH_LEVEL (請參閱一節)

另請參閱

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously