IWDFPropertyStoreFactory::RetrieveDevicePropertyStore 方法 (wudfddi.h)

[警告: UMDF 2 是最新版本的 UMDF,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

RetrieveDevicePropertyStore 方法检索驱动程序可用于访问注册表的属性存储接口。

语法

HRESULT RetrieveDevicePropertyStore(
  [in]  PWDF_PROPERTY_STORE_ROOT          RootSpecifier,
  [in]  WDF_PROPERTY_STORE_RETRIEVE_FLAGS Flags,
  [in]  REGSAM                            DesiredAccess,
  [in]  PCWSTR                            SubkeyPath,
  [out] IWDFNamedPropertyStore2           **PropertyStore,
  [out] WDF_PROPERTY_STORE_DISPOSITION    *Disposition
);

参数

[in] RootSpecifier

驱动程序分配 的WDF_PROPERTY_STORE_ROOT 结构的地址。 驱动程序填充此结构以标识 RetrieveDevicePropertyStore 检索的属性存储。

[in] Flags

一个WDF_PROPERTY_STORE_RETRIEVE_FLAGS类型的标志,指定 UMDF 是否应创建指定的注册表项(如果不存在),以及是否应在 Windows 重启时删除新条目。

[in] DesiredAccess

REGSAM 类型的位掩码,指定希望驱动程序访问注册表的类型。 REGSAM 类型在 Winreg.h 中定义,并在 REGSAM 的Windows SDK中介绍。 位掩码不得指定GENERIC_WRITE、KEY_CREATE_SUB_KEY或WRITE_DAC访问。 (尽管驱动程序无法指定KEY_CREATE_SUB_KEY,但其对 RetrieveDevicePropertyStore 的调用可以创建子项。)

[in] SubkeyPath

指向调用方提供的字符串的指针,该字符串表示 RootSpecifier 参数指定的注册表项下的子项的名称。 此参数是可选的,可以为 NULL。 有关详细信息,请参阅备注。

[out] PropertyStore

接收指向 IWDFNamedPropertyStore2 接口的指针的位置的地址。 驱动程序使用此接口访问注册表中的值。

[out] Disposition

接收 WDF_PROPERTY_STORE_DISPOSITION类型值的位置的地址。

返回值

如果操作成功,RetrieveDevicePropertyStore 将返回S_OK。 否则,方法可能会返回以下值之一:

返回代码 说明
E_INVALIDARG
调用方提供的输入参数无效。
E_OUTOFMEMORY
尝试分配内存失败。
 

此方法可能返回 Winerror.h 包含的其他值之一

注解

驱动程序可以调用 RetrieveDevicePropertyStore 来获取对驱动程序的软件密钥、当前设备的硬件密钥、当前设备支持的设备接口的密钥或 DEVICEMAP 密钥的访问权限。

如果提供 SubkeyPath 参数,则必须使用唯一名称,例如驱动程序的服务名称。 驱动程序可能使用子项来存储特定于设备的信息。

有关使用 RetrieveDevicePropertyStore 访问注册表的详细信息,请参阅 在基于 UMDF 的驱动程序中使用注册表

示例

下面的代码示例检索分配给设备硬件密钥下 PortName 条目的值。

IWDFPropertyStoreFactory *pPropertyStoreFactory = NULL;
WDF_PROPERTY_STORE_ROOT RootSpecifier;
IWDFNamedPropertyStore2 * pHardwarePropertyStore2 = NULL;
PROPVARIANT comPortPV;
WCHAR portName[] = L"PortName";
HRESULT hr;
...
//
// Get the property store factory interface.
//
hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pPropertyStoreFactory));
if (FAILED(hr))
{
    goto Exit;
}
//
//Initialize the WDF_PROPERTY_STORE_ROOT structure. We want to open the 
// \Device Parameters subkey under the device's hardware key.
//
RtlZeroMemory(&RootSpecifier,
              sizeof(WDF_PROPERTY_STORE_ROOT));
RootSpecifier.LengthCb = sizeof(WDF_PROPERTY_STORE_ROOT);
RootSpecifier.RootClass = WdfPropertyStoreRootClassHardwareKey;
RootSpecifier.Qualifier.HardwareKey.ServiceName = WDF_PROPERTY_STORE_HARDWARE_KEY_ROOT;

//
// Get the property store interface for the hardware key of the
// device that m_FxDevice represents.
//
hr = pPropertyStoreFactory->RetrieveDevicePropertyStore(
                                           &RootSpecifier,
                                           WdfPropertyStoreNormal,
                                           KEY_QUERY_VALUE,
                                           NULL,
                                           &pHardwarePropertyStore2,
                                           NULL
                                           );
if (FAILED(hr))
{
    goto Exit;
}

//
// Get the value of the "PortName" entry, which is stored under 
// the device's \Device Parameters subkey.
//
PropVariantInit(&comPortPV);
hr = pHardwarePropertyStore2->GetNamedValue(portName,
                                            &comPortPV);
if (FAILED(hr))
{
   goto Exit;
}
...
Exit:
    SAFE_RELEASE(pHardwarePropertyStore2);
    SAFE_RELEASE(pPropertyStoreFactory);
...

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.9
标头 wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另请参阅

IWDFDevice::RetrieveDevicePropertyStore

IWDFDeviceInitialize::RetrieveDevicePropertyStore

IWDFPropertyStoreFactory