レジストリ エントリを操作するために、ドライバーは RtlXxxレジストリXxx ルーチンを呼び出すことができます。このルーチンは、 ZwXxxキー ルーチンよりも簡単なインターフェイスを提供します。 その場合、ドライバーはハンドルを開いたり閉じたりする必要はありません。代わりに、ドライバーは名前でキーを参照します。
RelativeTo パラメーターと Path パラメーターを各 RtlXxxレジストリXxx ルーチンに渡します。 RelativeTo がRTL_REGISTRY_ABSOLUTEの場合、Path はキーの完全なパスを指定し、\Registry ルートから始めます。 RelativeTo がRTL_REGISTRY_HANDLE場合、Path は実際には開いているハンドルです。 RelativeTo の追加の RTL_REGISTRY_XXX 値は、キーの共通ルートのパスを指定します。このような場合、Path はそのルートに対する相対パスを指定します。 たとえば、パスが現在のユーザーのレジストリ設定に対して相対的であることが、RTL_REGISTRY_USERには必要です。 (この値は、ユーザー モード アプリケーションでHKEY_CURRENT_USERを指定することと同じです)。すべてのRTL_REGISTRY_XXX 値の説明については、「 RtlCheckRegistryKey」を参照してください。
次の表に、 RtlXxxレジストリXxx ルーチンを呼び出すことによってドライバーが実行できる操作の一覧を示します。
| オペレーション | RtlXxxレジストリXxx ルーチンを呼び出す |
|---|---|
レジストリ キーを作成する |
|
レジストリ キーが存在するかどうかを確認する |
|
1 つ以上のレジストリ キー値を調べる |
|
レジストリ キー値を書き込む |
|
レジストリ キーの値を削除する |
次のコード例は、\Registry\Machine\System\KeyName の ValueName を 0xFF の ULONG 値に設定する方法を示しています。 この例を、「 レジストリ キー オブジェクト ルーチン」 セクションの対応する例と比較します。
NTSTATUS status;
ULONG data = 0xFF;
status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
(PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
(PWCSTR)L"ValueName",
REG_DWORD,
&data,
sizeof(ULONG));
Zw Xxx キー ルーチンの代わりに RtlXxxレジストリXxx ルーチンを使用する場合は、より少ないコード行を記述しますが、後者は特定の操作を実行するために必要です。 たとえば、ZwEnumerateKey に対応する RtlXxxレジストリXxx ルーチンは存在しません。
同じキーに対して複数の操作を実行する場合、 ZwXxxキー ルーチンの方が効率的です。操作ごとに同じオープン ハンドルを使用できます。 これに対し、 RtlXxxレジストリXxx ルーチンは、各操作の新しいハンドルを開いたり閉じたりします。