驱动程序如何 IEEE 1394 虚拟设备
上层驱动程序和用户模式服务发送 IOCTL_IEEE1394_API_REQUEST 来管理虚拟 1394 设备。
驱动程序在 IEEE1394_VDEV_PNP_REQUEST 结构中提供设备 ID 和实例 ID。
若要在 1394 总线上公开虚拟设备,仿真驱动程序使用以下步骤:
使用 iRB 的 u.SetLocalHostProperties.nLevel 成员设置为 SET_LOCAL_HOST_PROPERTIES_MODIFY_CROM 向总线驱动程序发送REQUEST_SET_LOCAL_HOST_PROPERTIES请求,以便将单元目录添加到系统的 IEEE 1394 配置 ROM。 此请求还会将任何其他必要的配置数据添加到配置 ROM,以公开模拟设备功能。 必须使用与仿真驱动程序关联的虚拟 PDO 发送请求。
发出总线重置,通知总线上存在的 1394 个节点系统配置 ROM 已更改。
删除设备
可通过两种方法 (虚拟设备的 PDO) 删除物理设备对象:
标准即插即用 (PnP) 删除设备的方法。 驱动程序将 IRP_MN_REMOVE_DEVICE 请求发送到虚拟设备。
I/O 堆栈应包含以下值:
- MajorFunction = IRP_MJ_PNP
- MinorFunction = IRP_MN_REMOVE_DEVICE
I/O 请求数据包 (IRP) 类型 IOCTL_IEEE1394_API_REQUEST:驱动程序将 IRP_MJ_DEVICE_CONTROL 请求发送到虚拟设备。
I/O 堆栈应包含以下值:
- MajorFunction = IRP_MJ_DEVICE_CONTROL
- Parameters.DeviceIoControl.IoControlCode = IOCTL_IEEE1394_API_REQUEST
IRP 应包含以下值:
- AssocicatedIrp.SystemBuffer->SystemBuffer 指向 IEEE1394_API_REQUEST 结构
- IEEE1394_API_REQUEST 的 RequestNumber 成员 = IEEE1394_API_REMOVE_VIRTUAL_DEVICE
第一种方法 (IRP_MN_REMOVE_DEVICE) 删除设备,但如果设备是永久性的,则会在计算机下次启动时还原该设备。 第二种方法 (IEEE1394_API_REMOVE_VIRTUAL_DEVICE) 完全删除设备,以便设备在重启后不再保留。 下次计算机启动时,设备将不会还原。
请注意,高级驱动程序或用户模式服务可以通过常规 PnP 机制确定存在哪些虚拟设备。 此机制使用虚拟驱动程序的 INF 文件中提供的类 GUID。