关闭

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

标签: windowsnotificationskeyboard公告interfacemanager
1234人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39376次
    • 积分:574
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:15篇
    • 译文:10篇
    • 评论:2条