EVT_SPB_TARGET_CONNECT回调函数 (spbcx.h)

SPB 控制器驱动程序的 EvtSpbTargetConnect 事件回调函数会打开与总线上目标设备的连接。

语法

EVT_SPB_TARGET_CONNECT EvtSpbTargetConnect;

NTSTATUS EvtSpbTargetConnect(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target
)
{...}

参数

[in] Controller

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

[in] Target

要打开的目标的 SPBTARGET 句柄。 目标是连接到总线的外围设备或端口。

返回值

如果驱动程序成功打开与目标的连接,EvtSpbTargetConnect 将返回STATUS_SUCCESS。 否则,函数将返回相应的 NTSTATUS 错误代码。

注解

SPB 控制器驱动程序实现此函数是可选的。

SPB 框架扩展 (SpbCx) 管理 SPB 控制器的 I/O 队列。 如果 SPB 控制器驱动程序注册 EvtSpbTargetConnect 回调函数,则当客户端 (控制器的外围驱动程序) 发送 IRP_MJ_CREATE 请求以打开与总线上目标设备的连接时,SpbCx 将调用此函数。 如果 EvtSpbTargetConnect 函数返回错误代码,SpbCx 将失败 IRP_MJ_CREATE 请求。 成功打开与目标的连接的客户端对目标具有独占访问权限,直到连接关闭。

调用 SpbTargetGetConnectionParameters 方法以获取目标设备的连接参数。 SPB 控制器驱动程序通常从驱动程序的 EvtSpbTargetConnect 函数调用此方法。 SpbTargetGetConnectionParameters 将连接参数写入调用方提供的 SPB_CONNECTION_PARAMETERS 结构。 此结构的 ConnectionParameters 成员是指向包含目标设备的连接设置的缓冲区的指针。 驱动程序使用这些设置将 SPB 控制器配置为与设备通信。 有关详细信息,请参阅 如何获取设备的连接设置

EvtSpbTargetConnect 回调函数是从请求连接到目标的客户端线程的上下文中同步调用的。

SpbCx 调用 EvtSpbTargetDisconnect 回调函数以关闭以前由 EvtSpbTargetConnect 回调打开的目标连接。

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

示例

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

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

EVT_SPB_TARGET_CONNECT  MyEvtSpbTargetConnect;

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

_Use_decl_annotations_
NTSTATUS
  MyEvtSpbTargetConnect(
    WDFDEVICE Controller,
    SPBTARGET Target
    )
{ ... }

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

要求

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

另请参阅

EvtSpbTargetDisconnect

IRP_MJ_CREATE

SPBTARGET

SPB_CONNECTION_PARAMETERS

SpbDeviceInitialize