IRP_MJ_DEVICE_CONTROL

如果存在一组系统定义的 I/O 控制代码 (IOCTL,则每个驱动程序的设备对象属于特定设备类型 (请参阅指定 设备类型) ) 才能在 DispatchDeviceControl 例程中支持此请求。 有关 IOCTL 的详细信息,请参阅 I/O 控制代码简介

较高级别的驱动程序通常将这些请求传递给基础设备驱动程序。 假定驱动程序堆栈中的每个设备驱动程序都支持此请求,以及一组特定于设备类型的公共或专用 IOCTL。 有关特定设备类型的 IOCTL 的详细信息,请参阅 Microsoft Windows 驱动程序工具包 (WDK) 中的特定于设备类型的文档。

发送时间

创建请求成功完成后的任何时间。

输入参数

I/O 控制代码包含在驱动程序 IRP 的 I/O 堆栈位置的 Parameters.DeviceIoControl.IoControlCode 中。

其他输入参数取决于 I/O 控制代码的值。 有关详细信息,请参阅 I/O 控制代码的缓冲区说明

输出参数

输出参数取决于 I/O 控制代码的值。 有关详细信息,请参阅 I/O 控制代码的缓冲区说明

Operation

驱动程序接收此 I/O 控制代码是因为用户模式线程已调用 Microsoft Win32 DeviceIoControl 函数,或者更高级别的内核模式驱动程序已设置请求。 用户模式驱动程序可能已调用 DeviceIoControl,传入驱动程序定义的 (也称为 专用) I/O 控制代码,以从紧密耦合的内核模式设备驱动程序请求特定于设备或驱动程序的支持。

收到设备 I/O 控制请求后,较高级别的驱动程序通常会将 IRP 传递给下一个较低级别的驱动程序。 但是,这种做法有一些例外情况。 例如,存储了从基础端口驱动程序获取的配置信息的类驱动程序可能会完成某些IOCTL_XXX 请求,而不会将 IRP 向下传递到相应的端口驱动程序。

收到设备 I/O 控制请求后,设备驱动程序会检查 I/O 控制代码以确定如何满足该请求。 对于大多数公共 I/O 控制代码,设备驱动程序在 Irp-AssociatedIrp.SystemBuffer> 处向/从缓冲区传输少量数据。

有关 IRP_MJ_DEVICE_CONTROL或IRP_MJ_INTERNAL_DEVICE_CONTROL 请求的 I/O 控制代码 常规信息,请参阅 使用 I/O 控制代码。 另请参阅 设备Type-Specific I/O 请求

要求

标头

Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另请参阅

DispatchDeviceControl