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

另请参阅

EvtIoInCallerContext

EvtSpbControllerIoOther

SpbControllerSetRequestAttributes