次の方法で共有


レジストリ Run-Time ライブラリ ルーチン

レジストリ エントリを操作するために、ドライバーは 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 ルーチンを呼び出す

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

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));

Zw Xxx キー ルーチンの代わりに RtlXxxレジストリXxx ルーチンを使用する場合は、より少ないコード行を記述しますが、後者は特定の操作を実行するために必要です。 たとえば、ZwEnumerateKey に対応する RtlXxxレジストリXxx ルーチンは存在しません。

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