Windows CE 5.0:驱动程序---设备接口

Windows CE 5.0:驱动程序---设备接口

设备接口

 

发布日期: 11/1/2004 | 更新日期: 11/1/2004

设备接口类是应用程序可用来访问设备驱动程序的功能的方法。它们向收到通知的任何一方表明特定接口存在。设备驱动程序可以具有多个设备接口类,也可以没有任何设备接口类。

IClass 注册表子项引用设备接口和它们的关联 GUID。声明接口的头 (.h) 文件通常会定义该 GUID 并且将该 GUID 与接口相关联。头文件通过定义该 GUID 将接口与该 GUID 相关联。必须通过 IClass 注册表值或者通过调用 AdvertiseInterface 来公开接口类。还可以定义自己的接口类。

对于设备接口没有任何限制。访问接口的含义取决于接口。

下面的代码示例使用一个示例 GUID 说明了头文件通常如何定义设备接口 GUID。

#define DEVCLASS_IFCNAME_STRING TEXT("{12345678-1234-1234-1122334455667788}")
#define DEVCLASS_IFCNAME_GUID { 0x12345678, 0x1234, 0x1234, { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 } }

设备管理器中的公开接口的驱动程序通过在传递到 ActivateDeviceEx 中的注册表项中适当地设置 IClass 值集来公布这一事实。通过 AdvertiseInterface,设备驱动程序公告它在注册表中公开哪些设备接口。该公告可由调用 RequestDeviceNotifications 的任何应用程序或驱动程序使用。应用程序或驱动程序可以通过调用 StopDeviceNotifications 停止接收设备通知。通过这些函数,可以访问设备接口的 GUID 和名称。GUID 描述了设备接口,而该名称能够唯一地标识该设备接口的多个实例。例如,一般性流接口具有一个 GUID,而名称“COM1:”和“DSK1:”引用了该一般性流接口的两个截然不同的实例。

两个不同的设备接口类 GUID 可能具有同名实例。名称仅在由设备接口类 GUID 命名的设备接口的访问方法的上下文中才有意义。

设备驱动程序只有在完整实现设备接口时才应该导出该设备接口。与驱动程序的任何交互都要求得到它公布的设备接口的全部支持。

通过调用 AdvertiseInterface,设备驱动程序可以显式发送通知。这主要适用于可移动媒体存储设备以及其他在加载时尚未准确确定它们将公开哪些接口的驱动程序。

设备驱动程序应当显式表明它们可以接受设备句柄访问请求。如果设备驱动程序公开基于设备句柄的接口,则驱动程序应当能够在该设备驱动程序的其他函数中接受等于零的 hOpenContext 值。hOpenContext 值为零表明是在设备级别请求访问,并且可能使用了不同的 OS 级别安全性。在它们的 XXX_Open (Device Manager) 函数中读取 AccessCode ShareMode 的设备驱动程序应该适当地处理设备句柄访问请求。GUID 用来表明对基于设备的访问和基于单个设备句柄的接口的支持。

有关查找由特定设备通过名称或文件句柄公开的接口的信息,请参阅 Device File Names

下表显示了在其中定义了接口的 %_WINCEROOT% 下的预定义接口和头文件。

接口头文件

BATTERY_DRIVER_CLASS

Public/Common/OAK/Inc/Battery.h

BLOCK_DRIVER_GUID

Public/Common/SDK/Inc/Storemgr.h

CDDA_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

CDFS_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

DEVCLASS_CARDSERV_GUID

Public/Common/DDK/Inc/Cardserv.h

Public/Common/DDK/Inc/Cardsv2.h

DEVCLASS_DISPLAY_GUID

Public/Common/OAK/Inc/Winddi.h

DEVCLASS_KEYBOARD_GUID

Public/Common/SDK/Inc/Keybd.h

DEVCLASS_STREAM_GUID

Public/Common/SDK/Inc/Pnp.h

DMCLASS_PROTECTEDBUSNAMESPACE

Public/Common/DDK/Inc/Devload.h

FATFS_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

FSD_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

NLED_DRIVER_CLASS

Public/Common/SDK/Inc/NLED.h

PMCLASS_BLOCK_DEVICE

Public/Common/SDK/Inc/Pm.h

PMCLASS_DISPLAY

Public/Common/SDK/Inc/Pm.h

PMCLASS_GENERIC_DEVICE

Public/Common/SDK/Inc/Pm.h

PMCLASS_NDIS_MINIPORT

Public/Common/SDK/Inc/Pm.h

STORE_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

STOREMGR_DRIVER_GUID

Public/Common/SDK/Inc/Storemgr.h

UDFS_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

设备接口的其他预定义 GUID 包含在各种注册表文件中。要查找其他预定义 GUID,请在 %_WINCEROOT%/Public/Common/OAK/Files/Common.reg 文件或驱动程序特有的注册表文件中搜索 IClass 值。驱动程序特有的注册表文件包含在与设备驱动程序相同的目录中。有关驱动程序位于源代码中的哪些位置的信息,请参阅 Device Driver Source Code

另请参阅

Loading Device Drivers | Registry Enumerator | Device Interface Notifications

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows终端中使用"systemctl daemon-reload systemctl restart docker"命令会报错,因为Windows系统并不支持systemctl命令。systemctl是Linux系统中用于管理systemd服务的命令工具。在Windows系统中,你可以使用其他方式来重新加载服务和重启Docker。 解决方案可以是通过Docker Desktop来管理和操作Docker服务。Docker Desktop是一个可在Windows和Mac上运行的应用程序,它提供了一个图形界面和命令行工具来管理和操作Docker容器和服务。你可以从Docker官方网站下载并安装Docker Desktop,然后使用它来重新加载服务和重启Docker。 另外,如果你遇到了特定的错误提示,可以提供更具体的错误信息,以便我能够给出更准确的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [docker启动报错Warning: docker.service changed on ... Run ‘systemctl daemon-reload‘ to reload units.](https://blog.csdn.net/weixin_45387943/article/details/122958389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [centos7.6离线安装docker-ce-19.03、nvidia-docker2](https://download.csdn.net/download/qq_28971045/86273739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值