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
RtlQueryRegistryValues をする前の呼び出しでドライバーが指定した、QueryTable 配列要素の EntryContext 値を指定します。
戻り値
QueryRoutine は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合は、適切なエラー状態コードが返されます。 Ntstatus.h ヘッダー ファイルで定義されている状態コードのみを使用します。
備考
カーネル モード ドライバーは、QueryRoutine ルーチンを実装します。 このルーチンは、rtlQueryRegistryValues ルーチン によって呼び出されます。
1 つ以上のレジストリ値に関する情報を取得するために、ドライバーは RtlQueryRegistryValues 呼び出し、ポインターを入力パラメーターとして RTL_QUERY_REGISTRY_TABLE 構造体の配列に渡します。 この配列内の各構造体には、ドライバーによって実装された QueryRoutine ルーチンへのポインターと、特定のレジストリ値に関する情報の要求が含まれています。 配列内の各構造体について、RtlQueryRegistryValues 指定した QueryRoutine ルーチンを呼び出し、指定したレジストリ値に関する要求された情報を含むパラメーターのセットをこのルーチンに渡します。
RTL_QUERY_REGISTRY_TABLE 構造体の詳細については、「RtlQueryRegistryValuesを参照してください。
例
QueryRoutine コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。
たとえば、MyQueryRoutine
という名前の QueryRoutine コールバック ルーチンを定義するには、次のコード例に示すように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で呼び出されます。 |
関連項目
RtlQueryRegistryValues を する