SpbControllerSetIoOtherCallback 函数 (spbcx.h)
SpbControllerSetIoOtherCallback 方法注册 SPB 控制器驱动程序的 EvtSpbControllerIoOther 回调函数。
语法
void SpbControllerSetIoOtherCallback(
[in] WDFDEVICE FxDevice,
[in] PFN_SPB_CONTROLLER_OTHER EvtSpbControllerIoOther,
[in, optional] PFN_WDF_IO_IN_CALLER_CONTEXT EvtIoInCallerContext
);
参数
[in] FxDevice
表示 SPB 控制器的设备对象的 WDFDEVICE 句柄。
[in] EvtSpbControllerIoOther
指向 EvtSpbControllerIoOther 回调函数的指针。 SPB 控制器驱动程序实现此函数。 SPB 框架扩展 (SpbCx) 调用此函数,将 I/O 控制请求传递给控制器驱动程序。 有关传递给此函数的 I/O 请求类型的详细信息,请参阅以下“备注”部分。
[in, optional] EvtIoInCallerContext
指向 EvtIoInCallerContext 回调函数的指针,该回调函数在 I/O 控制请求首次到达控制器的 I/O 队列时调用,并且请求包含 SPB 框架扩展 (SpbCx) 无法识别的 IOCTL 代码。 此回调在请求发起方的进程上下文中运行,可以预处理稍后将由 EvtSpbControllerIoOther 回调处理的请求。 此参数是可选的,如果不需要此类预处理,则可以将其指定为 NULL。 有关更多信息,请参见下面的“备注”部分。
返回值
无
备注
此方法为 SPB 控制器驱动程序提供了一种声明对自定义 I/O 控制代码的支持的方法, (特定于总线或特定于驱动程序的 IOCTL) 。 如果 SPB 控制器驱动程序未调用此方法,SpbCx 将拒绝所有此类 I/O 控制请求,并且 SPB 控制器驱动程序永远不会看到它们。
SpbCx 管理 SPB 控制器的 I/O 队列。 默认情况下,如果 SpbCx 收到具有不支持的 IOCTL 的 IOCTL 的 I/O 控制请求,SpbCx 将STATUS_INVALID_DEVICE_REQUEST完成该请求并显示错误状态代码。
但是,通过调用 SpbControllerSetIoOtherCallback,SPB 控制器驱动程序声明其支持 SPB 框架扩展 (SpbCx) 不支持的 I/O 控制请求。 在这种情况下,当 SpbCx 收到具有不支持的 IOCTL 代码的 I/O 控制请求时,SpbCx 调用 EvtSpbControllerIoOther 函数,以将请求传递给 SPB 控制器驱动程序进行处理。 SPB 控制器驱动程序负责完成请求。
有关 SpbCx 支持的 IOCTL 列表,请参阅 SpbCx I/O 控制代码。
可选的 EvtIoInCallerContext 回调函数在请求发起方的进程上下文中运行,并且可以在将请求传递到 EvtSpbControllerIoOther 回调函数之前预处理依赖于上下文的请求参数(如缓冲区指针)。 调用 EvtIoInCallerContext 函数时,SPB 控制器驱动程序在对 SpbControllerSetRequestAttributes 的先前调用中请求的任何按请求上下文都将已分配并分配给请求。
SPB 控制器驱动程序必须在 提交 设备对象之前调用此方法,也就是说,在它从 EvtDriverDeviceAdd 回调返回或将 PDO 添加到控制器的子列表之前。 子列表表示附加到总线的设备。 有关详细信息,请参阅 枚举总线上的设备。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用。 |
目标平台 | 通用 |
标头 | spbcx.h |
Library | Spbcxstubs.lib |
IRQL | PASSIVE_LEVEL |