wdfregistryQueryValue 函数 (wdfregistry.h)

[适用于 KMDF 和 UMDF]

WdfRegistryQueryValue 方法检索当前分配给指定注册表值的数据。

语法

NTSTATUS WdfRegistryQueryValue(
  [in]            WDFKEY           Key,
  [in]            PCUNICODE_STRING ValueName,
  [in]            ULONG            ValueLength,
  [out, optional] PVOID            Value,
  [out, optional] PULONG           ValueLengthQueried,
  [out, optional] PULONG           ValueType
);

参数

[in] Key

表示打开的注册表项的注册表项对象的句柄。

[in] ValueName

指向包含值名称 的UNICODE_STRING 结构的指针。

[in] ValueLength

Value 指向的缓冲区的长度(以字节为单位)。

[out, optional] Value

指向驱动程序分配的缓冲区的指针,该缓冲区接收注册表值的数据。 如果此指针为 NULL则 WdfRegistryQueryValue 检索数据长度,但不检索数据长度。

[out, optional] ValueLengthQueried

指向接收注册表值数据长度的位置的指针。 此指针是可选的,可以为 NULL

[out, optional] ValueType

指向接收注册表值数据类型的位置的指针。 有关数据类型值的列表,请参阅 KEY_VALUE_BASIC_INFORMATIONType 成员。 此指针是可选的,可以为 NULL

返回值

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

返回代码 说明
STATUS_INVALID_DEVICE_REQUEST

未在 IRQL = PASSIVE_LEVEL调用 WdfRegistryQueryValue

STATUS_INVALID_PARAMETER
指定的参数无效。
STATUS_ACCESS_DENIED
驱动程序未使用KEY_QUERY_VALUE、KEY_READ或KEY_ALL_ACCESS访问权限打开注册表项。
STATUS_BUFFER_OVERFLOW
Value 参数指向的缓冲区太小,并且只将部分数据写入缓冲区。
STATUS_BUFFER_OVERFLOW
缓冲区太小,并且没有数据写入缓冲区。
STATUS_OBJECT_NAME_NOT_FOUND
注册表值不可用。
 

此方法还可能返回其他 NTSTATUS 值

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注解

有关注册表项对象的详细信息,请参阅 在 Framework-Based 驱动程序中使用注册表

示例

下面的代码示例打开设备的硬件密钥,并检索分配给 NumberOfToasters 值的数据,该值存储在设备的硬件密钥下。

WCHAR  comPort[FM_COM_PORT_STRING_LENGTH];
ULONG  length;
NTSTATUS  status;
ULONG  length, valueType, value;
DECLARE_CONST_UNICODE_STRING(valueName, L"NumberOfToasters");
WDFKEY  hKey;

status = WdfDeviceOpenRegistryKey(
                                  Device,
                                  PLUGPLAY_REGKEY_DEVICE,
                                  KEY_QUERY_VALUE,
                                  NULL, 
                                  &hKey
                                  );
if (!NT_SUCCESS (status)) {
    goto Error;
}
status = WdfRegistryQueryValue(
                               hKey,
                               &valueName,
                               sizeof(ULONG),
                               &value,
                               &length,
                               &valueType
                               );

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfregistry.h (包括 Wdf.h)
Library Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI 符合性规则 DriverCreate (kmdf) KmdfIrql (kmdf) KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf)

另请参阅

KEY_VALUE_BASIC_INFORMATION

UNICODE_STRING

WdfDeviceOpenRegistryKey

WdfRegistryQueryMemory

WdfRegistryQueryMultiString

WdfRegistryQueryString

WdfRegistryQueryULong

WdfRegistryQueryUnicodeString