RTL_QUERY_REGISTRY_ROUTINE回调函数 (wdm.h)

QueryRoutine 例程提供有关在上述对 RtlQueryRegistryValues 例程的调用中请求的注册表值的信息。

语法

RTL_QUERY_REGISTRY_ROUTINE RtlQueryRegistryRoutine;

NTSTATUS RtlQueryRegistryRoutine(
  [in]           PWSTR ValueName,
  [in]           ULONG ValueType,
  [in]           PVOID ValueData,
  [in]           ULONG ValueLength,
  [in, optional] PVOID Context,
  [in, optional] PVOID EntryContext
)
{...}

参数

[in] ValueName

指定与所请求的注册表值关联的注册表项。 此参数是指向包含密钥的以 null 结尾的 Unicode 字符串的指针。

[in] ValueType

指定使用指定注册表项存储的注册表值的类型。 有关注册表值类型的详细信息,请参阅 KEY_VALUE_BASIC_INFORMATION类型 参数的定义。

[in] ValueData

指向与指定注册表项关联的数据值的指针。 驱动程序必须将此值视为只读。 有关 ValueData 指向的值数据类型的详细信息,请参阅 KEY_VALUE_BASIC_INFORMATION中的 Type 参数的定义。

[in] ValueLength

指定 ValueData 指向的值的长度(以字节为单位)。

[in, optional] Context

指定在上述调用 RtlQueryRegistryValues中指定的驱动程序 上下文 参数值。

[in, optional] EntryContext

指定 QueryTable 数组元素中的 EntryContext 值,该元素是上述调用中 RtlQueryRegistryValues中指定的驱动程序。

返回值

如果调用成功,QueryRoutine 返回STATUS_SUCCESS。 否则,它将返回适当的错误状态代码。 仅使用 Ntstatus.h 头文件中定义的状态代码。

言论

内核模式驱动程序实现 QueryRoutine 例程。 此例程由 RtlQueryRegistryValues 例程调用。

为了获取有关一个或多个注册表值的信息,驱动程序调用 RtlQueryRegistryValues 并将指针作为输入参数传递给 RTL_QUERY_REGISTRY_TABLE 结构的数组。 此数组中的每个结构都包含指向驱动程序实现的 QueryRoutine 例程的指针,以及有关特定注册表值的信息请求。 对于数组中的每个结构,RtlQueryRegistryValues 调用指定的 QueryRoutine 例程,并将一组参数传递给此例程,其中包含有关指定注册表值的请求信息。

有关 RTL_QUERY_REGISTRY_TABLE 结构的详细信息,请参阅 RtlQueryRegistryValues

例子

若要定义 QueryRoutine 回调例程,必须先提供一个函数声明来标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为 MyQueryRoutineQueryRoutine 回调例程,请使用RTL_QUERY_REGISTRY_ROUTINE类型,如以下代码示例所示:

RTL_QUERY_REGISTRY_ROUTINE MyQueryRoutine;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
NTSTATUS
  MyQueryRoutine(
    PWSTR ValueName,
    ULONG ValueType,
    PVOID ValueData,
    ULONG ValueLength,
    PVOID Context,
    PVOID EntryContext
    )
  {
      // Function body
  }

RTL_QUERY_REGISTRY_ROUTINE函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 _Use_decl_annotations_ 批注可确保使用应用于头文件中RTL_QUERY_REGISTRY_ROUTINE函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型来声明函数。 有关 _Use_decl_annotations_的信息,请参阅 批注函数行为

要求

要求 价值
目标平台 桌面
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 在PASSIVE_LEVEL调用。

另请参阅

KEY_VALUE_BASIC_INFORMATION

RtlQueryRegistryValues