在 UMDF 1.x 驱动程序中使用注册表

警告

UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。

存档的 UMDF 1 示例可在 Windows 11 版本 22H2 - 2022 年 5 月驱动程序示例更新中找到。

有关详细信息,请参阅使用 UMDF 入门

基于 UMDF 的驱动程序可以使用属性存储对象的接口在注册表中读取和写入值。

基于 UMDF 的驱动程序可以访问四种类型的注册表项。 驱动程序可以在这些键下创建、读取和写入子项和值。 以下类型的注册表项可用于基于 UMDF 的驱动程序:

  • 硬件密钥

    PnP 管理器为每个设备创建一个硬件 密钥或设备密钥,用于存储设备的唯一标识信息。

    驱动程序可以检索和修改硬件键下的某些属性值。 存储值的位置取决于用于访问它们的方法。

    使用 PropertyStore 方法创建的属性值存储在硬件键下的 \Device Parameters 子项中。 若要访问这些属性,驱动程序会调用以下方法之一来获取属性存储接口。

    IWDFDevice::RetrieveDevicePropertyStore
    获取指向 IWDFNamedPropertyStore 接口的 指针。

    IWDFDeviceInitialize::RetrieveDevicePropertyStore
    获取指向 IWDFNamedPropertyStore 接口的 指针。

    IWDFPropertyStoreFactory::RetrieveDevicePropertyStore
    获取指向 IWDFNamedPropertyStore2 接口的 指针。 可以使用 SubkeyPath 参数指定驱动程序创建的子项下的值,例如 \Device Parameters\DriverServiceName\subkey

    驱动程序对 \Device Parameters 子项中的值具有只读访问权限,并且无法访问 \Device Parameters\WDF\Device Parameters\WUDF

    使用统一设备属性模型创建的属性值存储在硬件键下的 \Properties 子项中。

    若要访问这些属性,驱动程序调用 IWDFUnifiedPropertyStoreFactory::RetrieveUnifiedDevicePropertyStore 以获取属性存储接口。 然后,驱动程序可以使用 IWDFUnifiedPropertyStore 接口修改和检索设备属性的当前设置。

  • 软件密钥

    驱动程序的软件密钥也称为驱动程序 密钥 ,因为注册表包含每个驱动程序的软件密钥。 注册表包含所有设备类的列表,每个驱动程序的软件密钥都位于其设备类条目下。 系统在其软件密钥下存储有关每个驱动程序的信息。

    驱动程序可以调用 IWDFPropertyStoreFactory::RetrieveDevicePropertyStore ,以获取对其软件密钥下值的读取或写入访问权限。 驱动程序可以读取和写入不与特定设备关联的特定于驱动程序的信息。

  • 设备接口键

    注册表包含驱动程序已创建的所有 设备接口类的 键。 其中每个键下都有驱动程序已注册的设备接口类的每个实例的条目。

    如果驱动程序已注册设备接口类的实例,则可以通过调用 IWDFPropertyStoreFactory::RetrieveDevicePropertyStore 来读取和写入该实例的注册表条目下的值。 驱动程序可以读取和写入有关设备接口的特定于实例的信息。

  • DEVICEMAP 密钥

    注册表包含一个 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP 键,某些较旧技术(如串行和并行端口)的驱动程序使用该键。 如果驱动程序支持使用 DEVICEMAP 密钥的技术,则驱动程序可以通过调用 IWDFPropertyStoreFactory::RetrieveDevicePropertyStore 来访问密钥下的子项和值。

在驱动程序调用 RetrieveDevicePropertyStore 方法之一以打开注册表子项后,驱动程序可以使用 IWDFNamedPropertyStoreIWDFNamedPropertyStore2IWDFUnifiedPropertyStore 公开的方法在子项下创建、读取和写入值。 IWDFNamedPropertyStore2 接口还允许驱动程序删除值。

有关驱动程序的注册表项的详细信息,请参阅 注册表树和注册表项概述