当前位置: 首页 > news >正文

开网站做网站安仁做网站

开网站做网站,安仁做网站,中海建路桥建设有限公司网站,北京网站建设公司册支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统#xff0c;而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备#xff0c;并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线…支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚举的功能驱动程序或者很少是Filter驱动程序。 总线驱动程序通常是总线适配器的功能驱动程序但它不是连接到总线的子设备的功能驱动程序。 总线驱动程序还具有与功能驱动程序相同的 PnP 和电源管理职责。 枚举总线上的设备 总线枚举 是确定哪些子设备连接到父设备的行为。 父设备通常是总线适配器但它也可以是支持多种功能例如声音卡的设备每个功能需要一组单独的驱动程序。 Kernel-Mode 驱动程序框架 (KMDF) 支持两种类型的总线枚举 静态枚举易于实现如果子设备的数量和类型不是特定于系统的并且硬件接通后不会更改则静态枚举是理想的当子设备的数量或类型从一台计算机更改为另一台计算机时应使用动态枚举 总线驱动程序可以使用或两种类型的总线枚举。 静态枚举 静态枚举 是驱动程序在系统初始化期间检测和报告设备是否存在的功能并且报告系统配置的后续更改的能力有限。 如果设备或功能子单元的数量和类型是预先确定的和永久的并且不依赖于运行驱动程序的系统的配置则总线驱动程序可以使用静态枚举。 例如声音卡的驱动程序可以充当总线驱动程序 PDO为卡的每个功能例如 MIDI、音频和游戏杆创建单独的物理设备对象。 静态子列表 框架通过提供静态子列表使驱动程序能够支持静态枚举。 每个静态子列表表示连接到父设备的子设备列表。 父设备的总线驱动程序必须标识父设备的子设备将它们添加到父设备的静态子设备列表中并为每个子设备创建 PDO。 创建静态子列表 每次驱动程序创建一个框架设备对象该框架对象表示 (设备的 FDO) 功能设备对象时框架都会为设备创建一个空的静态子列表。 1. 当框架调用总线驱动程序的 EvtDriverDeviceAdd 回调函数时回调函数必须调用 WdfDeviceCreate 为父设备创建 FDO。  2. 然后驱动程序必须枚举父设备的子级为子级创建 PDO并将子级添加到子级列表。 3. 可选驱动程序可以调用 WdfDeviceSetBusInformationForChildren 为框架提供有关总线的信息。 建议这样做因为这样可以更轻松地让子设备和应用识别总线。 若要为检测到的子设备创建 PDO总线驱动程序必须 调用 WdfPdoInitAllocate 以获取 WDFDEVICE_INIT 结构初始化WDFDEVICE_INIT结构调用 WdfDeviceCreate 以创建表示 PDO 的框架设备对象 调用 WdfDeviceCreate 后驱动程序必须调用 WdfFdoAddStaticChild 以将子设备添加到子列表。 修改静态子列表 由于驱动程序应仅对预先确定的永久性设备配置使用静态子列表因此驱动程序在创建静态子列表后几乎不需要修改它。 如果驱动程序确定子设备变得不可访问驱动程序可以调用 WdfPdoMarkMissing。 如果子设备仍可访问但变得无响应且不可用则驱动程序应将 WDF_DEVICE_STATE 结构的 Failed 成员设置为 WdfTrue然后调用 WdfDeviceSetDeviceState。 遍历静态子列表 如果需要检索静态子列表的内容驱动程序可以通过执行以下操作遍历该列表 调用 WdfFdoLockStaticChildListForIteration根据需要多次调用 WdfFdoRetrieveNextStaticChild 调用 WdfFdoUnlockStaticChildListFromIteration 动态枚举 动态枚举 是驱动程序能够检测和报告在系统运行时连接到系统的设备的数量和类型的更改。 如果连接到父设备的设备数量或类型取决于系统的配置则总线驱动程序必须使用动态枚举。 其中一些设备可能始终连接到系统有些设备可能在系统运行时接通电源并拔下电源。 例如插入系统 PCI 总线的设备的数量和类型取决于系统但它们是永久性的除非用户关闭电源、打开外壳并使用螺丝刀添加或删除设备。 另一方面用户可以通过在系统运行时插入或拔下电缆来添加或删除 USB 设备。 动态子列表 框架通过提供框架子列表对象使驱动程序能够支持动态枚举。 每个子列表对象表示连接到父设备的子设备的列表。 父设备的总线驱动程序必须标识父设备的子设备将它们添加到父设备的子列表中并为每个子设备创建物理设备对象 (PDO) 。 每次驱动程序创建表示设备的 FDO 的框架设备对象时框架都会为设备创建一个空的默认子列表。 驱动程序可以通过调用 WdfFdoGetDefaultChildList 来获取设备默认子列表的句柄。 通常如果要编写枚举设备子级的总线驱动程序驱动程序可以将子级添加到默认子列表。 如果需要创建其他子列表驱动程序可以调用 WdfChildListCreate。 在驱动程序可以使用子列表之前它必须通过初始化 WDF_CHILD_LIST_CONFIG 结构并将结构传递给 WdfFdoInitSetDefaultChildListConfig对于默认子列表或 WdfChildListCreate对于其他子列表来配置子列表对象。 动态子级说明 每次总线驱动程序标识子设备时都必须将子设备的说明添加到子列表中。 子说明由必需的标识说明和可选的地址说明组成。 标识说明 是一种结构它包含唯一标识驱动程序枚举的每个设备的信息。 驱动程序定义此结构但其第一个成员必须是 WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER 结构。 通常标识说明包含设备的 设备标识字符串可能是序列号以及有关设备在总线上的位置的信息例如槽号。 驱动程序可以提供以下一组回调函数这些函数允许框架操作标识说明中的信息 EvtChildListIdentificationDescriptionCompare用于比较两个标识描述结构的内容EvtChildListIdentificationDescriptionCopy将一个标识说明结构的内容复制到另一个标识说明结构EvtChildListIdentificationDescriptionDuplicate它通过复制现有标识说明结构并在必要时分配其他缓冲区来创建新的标识说明EvtChildListIdentificationDescriptionCleanup它解除分配由 EvtChildListIdentificationDescriptionDuplicate 回调函数分配的缓冲区 通常如果驱动程序的标识说明结构包含指向动态分配的缓冲区的指针则需要提供这些回调函数。  地址说明 地址说明是一种结构它包含驱动程序所需的信息以便它可以访问其总线上的设备如果信息可以在设备接通电源时发生更改。 驱动程序定义此结构但其第一个成员必须是 WDF_CHILD_ADDRESS_DESCRIPTION_HEADER 结构。 地址说明是可选的。 如果设备地址信息在设备接通电源和拔出电源之间无法更改则设备的所有地址信息都可以存储在标识说明中。 例如USB 控制器在设备接通电源时将地址分配给设备并且这些地址不会更改。 另一方面一些总线使用可能会更改的寻址信息。 例如IEEE 1394 总线使用“代数”即已发生的总线重置次数。 向 IEEE 1394 设备发送的每个异步 I/O 请求都必须包含生成计数。 由于此地址信息可能会更改因此驱动程序必须将其存储在地址说明中。 驱动程序可以提供以下回调函数集来操作地址说明中的信息 EvtChildListAddressDescriptionCopy将一个地址说明结构的内容复制到另一个地址说明结构EvtChildListAddressDescriptionDuplicate它通过复制现有地址说明结构并在必要时分配其他缓冲区来创建新的地址说明EvtChildListAddressDescriptionCleanup可解除分配由 EvtChildListAddressDescriptionDuplicate 回调函数分配的缓冲区 通常如果驱动程序的地址描述结构包含指向动态分配的缓冲区的指针则需要提供这些回调函数。  将设备添加到动态子列表 当框架调用总线驱动程序的 EvtDriverDeviceAdd 回调函数时回调函数必须调用 WdfDeviceCreate 为父设备通常是总线适配器创建 FDO。 然后驱动程序必须枚举父设备的子级并将子级添加到子列表中。 可选驱动程序可以调用 WdfDeviceSetBusInformationForChildren 为框架提供有关总线的信息。 建议这样做因为它使子设备和应用更容易识别总线。 若要将子级添加到子列表驱动程序必须为找到的每个子设备调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 。 此调用通知框架驱动程序已发现连接到父设备的子设备。 当驱动程序调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 时它会提供标识说明和地址说明可选。 在驱动程序调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 来报告新设备后框架会通知 PnP 管理器新设备存在。 然后PnP 管理器为新设备生成设备堆栈和驱动程序堆栈。 在此过程中框架调用总线驱动程序的 EvtChildListCreateDevice 回调函数。 此回调函数必须调用 WdfDeviceCreate 才能为新设备创建 PDO。 通常多个子设备连接到父设备因此总线驱动程序需要多次调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 。 执行此操作的最有效方法是 调用 WdfChildListBeginScan为每个子设备调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 调用 WdfChildListEndScan 如果使用对 WdfChildListBeginScan 和 WdfChildListEndScan 的调用包围驱动程序的动态枚举框架会将所有更改存储到子列表并在驱动程序调用 WdfChildListEndScan 时通知 PnP 管理器所做的更改。 稍后框架会为子列表中的每台设备调用总线驱动程序的 EvtChildListCreateDevice 回调函数。 此回调函数调用 WdfDeviceCreate 为每个新设备创建 PDO。 当驱动程序调用 WdfChildListBeginScan 时框架会将以前报告的所有设备标记为不再存在。 因此驱动程序必须为驱动程序可以检测的所有子级而不仅仅是新发现的子级调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 。 若要将单个子级添加到子列表驱动程序可以调用 WdfChildListUpdateAllChildDescriptionsAsPresent 而无需先调用 WdfChildListBeginScan。 更新动态子列表 有两种常见方法来更新动态子列表中的信息 当父设备收到指示子项到达或删除的中断时如果设备已接通电源则驱动程序的 EvtInterruptDpc 回调函数将调用 WdfChildListAddOrUpdateChildDescriptionAsPresent ;如果设备已拔出电源则 调用 WdfChildListUpdDescriptionAsMissing 驱动程序可以提供 EvtChildListScanForChildren 回调函数每次父设备进入其工作 (D0) 状态时框架都会调用该函数。 此回调函数应通过调用 WdfChildListBeginScan、 WdfChildListAddOrUpdateChildDescriptionAsPresent (或 WdfChildListUpdateAllChildDescriptionsAsPresent) 和 WdfChildListEndScan 来枚举所有子设备 可以在驱动程序中使用其中一种或两种技术。 遍历动态子列表 如果希望驱动程序检查子列表的内容它可以使用以下方法之一遍历列表 1. 若要获取每个子设备说明的内容一次一个驱动程序可以 调用 WdfChildListBeginIteration。 根据需要多次调用 WdfChildListRetrieveNextDevice。 调用 WdfChildListEndIteration。 调用 WdfChildListBeginIteration 时驱动程序指定 WDF_RETRIEVE_CHILD_FLAGS类型的标志该标志指示框架是应检索所有设备说明还是仅检索子集。 当 WdfChildListRetrieveNextDevice 找到匹配项时它将检索子设备的标识和地址说明以及其设备对象的句柄。 2. 如果需要获取当前包含在子设备说明中的地址说明驱动程序可以调用 WdfChildListRetrieveAddressDescription并指定标识说明。 框架遍历子列表直到找到具有匹配标识说明的子设备然后检索地址说明。 3. 如果需要获取与特定子设备关联的框架设备对象的句柄驱动程序可以调用 WdfChildListRetrievePdo。 框架遍历子列表直到找到具有匹配标识说明的子设备然后返回设备对象句柄。 请务必使用 WdfChildListBeginIteration 和 WdfChildListEndIteration 包装调用以防止调用方在另一个线程上突然删除 PDO。 访问 PDO 的标识和地址说明 驱动程序可以调用以下方法来访问 PDO 的标识说明或地址说明 WdfPdoRetrieveIdentificationDescription用于检索与 PDO 关联的标识说明WdfPdoRetrieveAddressDescription用于检索与 PDO 关联的地址说明WdfPdoUpdateAddressDescription用于更新与 PDO 关联的地址说明 处理重新枚举请求 支持动态枚举的基于框架的总线驱动程序可以接收通过 REENUMERATE_SELF_INTERFACE_STANDARD 接口恢复特定子设备的请求。
http://www.yayakq.cn/news/965/

相关文章:

  • 新会住房和城乡建设部网站seo是如何优化
  • 中国核工业第五建设公司网站英文网站建设580
  • 上海外贸网站google建站wordpress 首页慢
  • 旅游网站制作模板网站名称设置
  • 网站制作的页面比例网站怎样做漂浮
  • 网站建设2018需要什么蔬菜网站建设
  • 中国建设银行网站能解密码深圳如何搭建制作网站
  • app 网站平台建设实施方案erp定制软件开发公司推荐
  • seo网站营销公司哪家好了解c2c电商网站的特点
  • 做一个网站的详细教学重庆市门户网站制作
  • 商会网站建设招标方案分公司一般做网站吗
  • 成都铁路局贵阳建设指挥部网站网站建设中html网页
  • waP六感程序建设网站制作一款手游需要多少钱
  • 网页前端模板网站内优化怎么做
  • 那可以做网站模板网站和定制网站有什么区别
  • 台州企业网站排名优化德阳建设网站
  • 做网站比较便宜广州网站建设市场
  • 新编asp.net 2.0网站开发从入门到精通 代码网站建设中敬请期待 图片
  • 网络品牌营销推广公司自己网站做优化的有权利卖么
  • 卖摄影作品的网站威海市建设局官方网站
  • 长沙网站设计开发谷歌怎么做网站推广
  • 提高网站搜索排名手机网站可以做动态吗
  • 网站建设需要租用什么在网上做游戏网站违法吗
  • 嘉瑞建设集团有限公司网站开发公司注册资金要求
  • 做办公室的网站河南省网站备案
  • 织梦做中英文网站步骤龙岗-网站建设深圳信科
  • 胶州市城乡建设局网站做360手机网站优
  • vip影视网站怎么做的深圳软件公司平均薪资排行榜
  • 网站ui设计兼职可视化网站制作软件
  • 网站底部模板视频直播sdk