QueryValueKey 方法检索有关注册表项的值条目的信息,包括其名称、类型、数据大小和值。
语法
NTSTATUS QueryValueKey(
[in] PUNICODE_STRING ValueName,
[in] KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
[out] PVOID KeyValueInformation,
[in] ULONG Length,
[out] PULONG ResultLength
);
参数
[in] ValueName
指向制造商提供的值项名称的指针。 名称字符串由类型为 UNICODE_STRING的结构指定。
[in] KeyValueInformationClass
指定要在缓冲区中返回的信息的类型。 将此参数设置为以下KEY_VALUE_INFORMATION_CLASS枚举值之一:
- KeyValueBasicInformation
- KeyValueFullInformation
- KeyValuePartialInformation
[out] KeyValueInformation
指向调用方分配的缓冲区的指针,该方法将请求的数据写入其中。 缓冲区包含 KEY_VALUE_BASIC_INFORMATION、KEY_VALUE_FULL_INFORMATION或 KEY_VALUE_PARTIAL_INFORMATION类型的结构,具体取决于 keyValueInformationClass 的值。 结构后跟其他数据,其大小取决于键值的数据类型。
[in] Length
KeyValueInformation 缓冲区的大小(以字节为单位),调用方必须根据给定的 KeyValueInformationClass设置该缓冲区的大小。 若要接收所有请求的数据,缓冲区的大小必须至少与所请求的数据大小相同。
[out] ResultLength
生成的数据的长度的输出指针。 此参数指向调用方分配的 ULONG 变量,该方法将写入一个计数,该变量指定实际写入到 KeyValueInformation 缓冲区中的字节数。 但是,如果指定的缓冲区长度太小,无法包含信息,则该方法会输出所需的缓冲区大小,并返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL。 有关详细信息,请参阅以下“备注”部分。
返回值
如果调用成功将请求的信息复制到 QueryValueKey 缓冲区,则 返回STATUS_SUCCESS。 如果指定的缓冲区大小太小,无法接收所有请求的信息,该方法将返回STATUS_BUFFER_OVERFLOW。 如果指定的缓冲区大小太小,无法接收任何请求的信息,该方法将返回STATUS_BUFFER_TOO_SMALL。 否则,该方法将返回适当的错误状态代码。 下表显示了一些可能的错误代码。
| 返回代码 | 描述 |
|---|---|
|
指示传递给方法的参数之一无效。 |
|
指示找不到具有指定名称的值项。 |
言论
如果 KeyValueInformation 缓冲区太小而无法保存请求的信息,该方法会将所需的大小写入 *ResultLength,并返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL的状态代码。 如果该方法仅成功将部分请求的信息写入缓冲区,则该方法将返回STATUS_BUFFER_OVERFLOW。 如果该方法无法将任何信息写入缓冲区,则返回STATUS_BUFFER_TOO_SMALL。 写入 *ResultLength 的值指示保存所有请求信息的最小缓冲区大小。
要求
| 要求 | 价值 |
|---|---|
| 目标平台 | 普遍 |
| 标头 | portcls.h (包括 Portcls.h) |
| IRQL | PASSIVE_LEVEL |