ZwSetValueKey 関数 (wdm.h)
ZwSetValueKey ルーチンは、レジストリ キーの値エントリを作成または置換します。
構文
NTSYSAPI NTSTATUS ZwSetValueKey(
[in] HANDLE KeyHandle,
[in] PUNICODE_STRING ValueName,
[in, optional] ULONG TitleIndex,
[in] ULONG Type,
[in, optional] PVOID Data,
[in] ULONG DataSize
);
パラメーター
[in] KeyHandle
値エントリを書き込むレジストリ キーを処理します。 このハンドルは、 ZwCreateKey または ZwOpenKey を正常に呼び出すことによって作成 されます。
[in] ValueName
データが書き込まれる値エントリの名前へのポインター。 値エントリに名前がない場合、このパラメーターは NULL ポインターにすることができます。 名前文字列が指定され、指定された名前が含まれているキーに対して一意でない場合は、既存の値エントリのデータが置き換えられます。
[in, optional] TitleIndex
このパラメーターは予約されています。 デバイス ドライバーと中間ドライバーでは、このパラメーターを 0 に設定する必要があります。
[in] Type
書き込む次のシステム定義データの種類のいずれか。
型 の値 | 意味 |
---|---|
REG_BINARY | 任意の形式のバイナリ データ。 |
REG_DWORD | 4 バイトの数値。 |
REG_DWORD_LITTLE_ENDIAN | 最下位アドレスの下位バイトを持つ 4 バイトの数値。 REG_DWORDと同じです。 |
REG_DWORD_BIG_ENDIAN | 最上位アドレスの下位バイトを持つ 4 バイトの数値。 |
REG_EXPAND_SZ | 環境変数への展開されていない参照 ("%PATH%" など) を含む null で終わる Unicode 文字列。 |
REG_LINK | シンボリック リンクの名前を示す Unicode 文字列。 この種類は、デバイスドライバーと中間ドライバーとは無関係です。 |
REG_MULTI_SZ | null で終わる文字列の配列。別の 0 で終わる。 |
REG_NONE | 特定の型を持たないデータ。 |
REG_SZ | NULL で終わる Unicode 文字列。 |
REG_RESOURCE_LIST | \ResourceMap ツリーで、ドライバーまたはドライバーが制御する物理デバイスの 1 つによって使用されるハードウェア リソースのデバイス ドライバーの一覧 |
REG_RESOURCE_REQUIREMENTS_LIST | デバイス ドライバーの使用可能なハードウェア リソースの一覧、または制御する物理デバイスの 1 つを使用して、システムが \ResourceMap ツリーにサブセットを書き込みます |
REG_FULL_RESOURCE_DESCRIPTOR | 物理デバイスが使用し、検出され、システムによって \HardwareDescription ツリーに書き込まれたハードウェア リソースの一覧 |
デバイス ドライバーは、\Registry...\ResourceMap キーのサブキーに値エントリを明示的に書き込むには、ZwSetValueKey を呼び出そうとしないでください。 \Registry...\HardwareDescription ツリーに値エントリを書き込むことができるのは、システムだけです。
[in, optional] Data
値エントリのデータを含む呼び出し元によって割り当てられたバッファーへのポインター。
[in] DataSize
データ バッファーのサイズをバイト単位で指定します。 Type が REG_XXX_SZ の場合、この値には、終端の 0 のスペースを含める必要があります。
戻り値
操作が成功した場合、ZwSetValueKey はSTATUS_SUCCESSを返します。 それ以外の場合、このルーチンは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
STATUS_ACCESS_DENIED | 呼び出し元には、レジストリ値への適切なアクセス権がありません。 |
STATUS_INVALID_HANDLE | ハンドルが正しくありません。 |
注釈
この呼び出しを成功させるには、ZwSetValueKey に渡される KeyHandle がKEY_SET_VALUE DesiredAccess フラグを設定して開かれている必要があります。 DesiredAccess で使用できる値の詳細については、「ZwCreateKey」を参照してください。
指定されたキーに、指定された ValueName と一致する名前の既存の値エントリがない場合、 ZwSetValueKey は 指定された名前の新しい値エントリを作成します。 一致する値エントリ名が存在する場合、このルーチンは、指定された ValueName の元の値エントリを上書きします。 したがって、 ZwSetValueKey は、特定のキーの値エントリごとに一意の名前を保持します。 各値エントリ名は、含まれているキーに対して一意である必要があります。レジストリ内の多くの異なるキーは、同じ名前の値エントリを持つことができます。
レジストリ キーの操作の詳細については、「 ドライバーでのレジストリの使用」を参照してください。
この関数の呼び出しがユーザー モードで発生する場合は、"ZwSetValueKey" ではなく"NtSetValueKey" という名前を使用する必要があります。
カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なります。 ルーチンの NtXxx バージョンと ZwXxx バージョン間の関係の詳細については、「Using Nt and Zw Versions of the Native System Services Routines」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm) |