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 のスペースを含める必要があります。

戻り値

操作が成功した場合、ZwSetValueKeySTATUS_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)

こちらもご覧ください

HalAssignSlotResources

IoAssignResources

IoQueryDeviceDescription

IoReportResourceUsage

Nt および Zw バージョンのネイティブ システム サービス ルーチンの使用

ZwClose

ZwCreateKey

ZwFlushKey

ZwOpenKey