レジストリ ランタイム ライブラリ ルーチン

レジストリ エントリを操作するために、ドライバーは RtlXxxRegistryXxx ルーチンを呼び出すことができます。このルーチンは、ZwXxxKey ルーチンよりも簡単なインターフェイスを提供します。 その場合、ドライバーはハンドルを開閉する必要はありません。代わりに、ドライバーは名前でキーを参照します。

RelativeTo パラメーターと Path パラメーターを各 RtlXxxRegistryXxx ルーチンに渡します。 RelativeTo が RTL_REGISTRY_ABSOLUTE の場合、Path は、\Registry ルートから始まるキーの完全なパスを指定します。 RelativeTo が RTL_REGISTRY_HANDLE の場合、Path は実際には開いているハンドルです。 RelativeTo の追加の RTL_REGISTRY_XXX 値は、キーの共通ルートのパスを指定します。そのような場合、Path はそのルートを基準にした相対パスを指定します。 たとえば、RTL_REGISTRY_U Standard Edition R では、Path が現在のユーザーのレジストリ設定に対する相対パスです。 (この値は、ユーザーモード アプリケーションで HKEY_CURRENT_USER を指定することと同じです)。すべての RTL_REGISTRY_XXX 値の説明については、RtlCheckRegistryKey を参照してください。

次の表に、RtlXxxRegistryXxx ルーチンを呼び出してドライバーが実行できる操作の一覧を示します。

操作 呼び出す RtlXxxRegistryXxx ルーチン

レジストリ キーを作成する

RtlCreateRegistryKey

レジストリ キーが存在するかどうかを確認する

RtlCheckRegistryKey

1 つ以上のレジストリ キー値を調べる

RtlQueryRegistryValues

レジストリ キー値を書き込む

RtlWriteRegistryValue

レジストリ キーを削除する

RtlDeleteRegistryValue

次のコード サンプルは、\Registry\Machine\System\KeyNameValueName を 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));

ZwXxxKey ルーチンの代わりに RtlXxxRegistrtryXxx ルーチンを使用する場合は、記述するコード行数は少なくなりますが、後者は特定の操作を実行するために必要です。 たとえば、ZwEnumerateKey に対応する RtlXxxXxxRegistryXxx ルーチンは存在しません。

同じキーに対して複数の操作を実行する場合は、操作ごとに同じオープン ハンドルを使用できるので ZwXxxKey ルーチンの方が効率的です。 これに対して、RtlXxxRegistryXxx ルーチンでは、各操作の新しいハンドルを開閉します。