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。 否则,方法可能会返回以下值之一:
返回代码 | 说明 |
---|---|
|
调用方提供的输入参数无效。 |
|
尝试分配内存失败。 |
此方法可能返回 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