EVT_SPB_CONTROLLER_READ回调函数 (spbcx.h)

SPB 控制器驱动程序的 EvtSpbControllerIoRead 事件回调函数将数据从指定目标设备读取到随读取请求一起提供的缓冲区中。

语法

EVT_SPB_CONTROLLER_READ EvtSpbControllerRead;

void EvtSpbControllerRead(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

参数

[in] Controller

表示 SPB 控制器的 框架设备对象的 WDFDEVICE 句柄。

[in] Target

此 I/O 请求的目标的 SPBTARGET 句柄。 目标是连接到总线的外围设备或端口。 SPB 框架扩展 (SpbCx) 以前将此句柄分配给打开了与目标的连接的 EvtSpbTargetConnect 回调中的目标。

[in] Request

I/O 请求的 SPBREQUEST 句柄。 SPB 控制器驱动程序必须通过执行请求的操作或返回错误状态来完成此请求。 有关更多信息,请参见备注

[in] Length

要从目标设备读取的字节数。

返回值

备注

SpbCx 管理 SPB 控制器的 I/O 队列。 当客户端 (SPB 控制器的外围驱动程序) 向连接到总线的目标设备发送IRP_MJ_READ请求时,SpbCx 调用 SPB 控制器驱动程序的 EvtSpbControllerIoRead 回调函数。 Request 参数值是封装此请求的句柄。

EvtSpbControllerIoRead 回调不返回状态值。 相反,SPB 控制器驱动程序在 I/O 请求的完成状态中指示读取操作的状态。

EvtSpbControllerIoRead 回调是异步的。 也就是说,回调函数应启动请求的读取操作,然后返回 ,而无需等待操作完成。 稍后,SPB 控制器驱动程序在中断 DPC 或计时器 DPC 期间完成读取请求。

如果读取操作完全完成,SPB 控制器驱动程序应将完成状态设置为STATUS_SUCCESS。 如果目标设备指示它可以提供部分但不是全部请求的数据,SPB 控制器驱动程序应检索尽可能多的可用数据,指定检索的数据字节数,并将 I/O 请求中的完成状态设置为STATUS_SUCCESS。 此类部分完成的读取操作不能在 SPI 或 I2C 总线上发生,但可能发生在另一种类型的总线上。

如果读取操作由于线路噪音、控制器硬件错误或驱动程序错误而失败,则 SPB 控制器驱动程序应将 I/O 请求中的完成状态设置为适当的错误代码。 并非所有总线都为目标设备提供报告传输错误或部分完成传输的机制,并非所有控制器都能检测到这些情况。

若要注册 EvtSpbControllerIoRead 回调函数,请调用 SpbDeviceInitialize 方法。

示例

若要定义 EvtSpbControllerIoRead 回调函数,必须首先提供一个函数声明,用于标识要定义的回调函数的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写适用于 Windows 操作系统的驱动程序的要求。

例如,若要定义名为 MyEvtSpbControllerIoReadEvtSpbControllerIoRead 回调函数,请使用 EVT_SPB_CONTROLLER_READ 函数类型,如以下代码示例所示:

EVT_SPB_CONTROLLER_READ  MyEvtSpbControllerIoRead;

然后,按如下所示实现回调函数:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoRead(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

EVT_SPB_CONTROLLER_READ函数类型在 Spbcx.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations批注可确保使用应用于头文件中EVT_SPB_CONTROLLER_READ函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。 有关 Use_decl_annotations的详细信息,请参阅 批注函数行为

要求

要求
最低受支持的客户端 从 Windows 8 开始支持。
目标平台 桌面
标头 spbcx.h
IRQL 在 IRQL <= DISPATCH_LEVEL 调用。

另请参阅