ZwCreateKey 関数 (wdm.h)

ZwCreateKey ルーチンは、新しいレジストリ キーを作成するか、既存のレジストリ キーを開きます。

構文

NTSYSAPI NTSTATUS ZwCreateKey(
  [out]           PHANDLE            KeyHandle,
  [in]            ACCESS_MASK        DesiredAccess,
  [in]            POBJECT_ATTRIBUTES ObjectAttributes,
                  ULONG              TitleIndex,
  [in, optional]  PUNICODE_STRING    Class,
  [in]            ULONG              CreateOptions,
  [out, optional] PULONG             Disposition
);

パラメーター

[out] KeyHandle

キーへのハンドルを受け取る HANDLE 変数へのポインター。

[in] DesiredAccess

オブジェクトへの要求されたアクセスを決定する ACCESS_MASK 値を指定します。 呼び出し元は、すべての種類のオブジェクトに対して定義されているアクセス権 ( ACCESS_MASKを参照) に加えて、オブジェクト ディレクトリに固有の次のアクセス権を 1 つ以上指定できます。

DesiredAccess フラグ 呼び出し元がこれを行うことを許可します
KEY_QUERY_VALUE キー値を読み取ります。
KEY_SET_VALUE キー値を書き込みます。
KEY_CREATE_SUB_KEY キーのサブキーを作成します。
KEY_ENUMERATE_SUB_KEYS キーのサブキーを読み取ります。
KEY_CREATE_LINK キーへのシンボリック リンクを作成します。 このフラグは、デバイス ドライバーと中間ドライバーでは使用されません。
KEY_NOTIFY キーの名前、値、または属性が変更されたときに通知を受け取るように求めます。 詳細については、「 ZwNotifyChangeKey」を参照してください。

呼び出し元は、いくつかのACCESS_MASKフラグを組み合わせた次の定数のいずれかを指定することもできます。

常時 これらのACCESS_MASKフラグで構成されます
KEY_READ STANDARD_RIGHTS_READ、KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY
KEY_WRITE STANDARD_RIGHTS_WRITE、KEY_SET_VALUE、KEY_CREATE_SUB_KEY
KEY_EXECUTE KEY_READと同じです。
KEY_ALL_ACCESS STANDARD_RIGHTS_ALL、KEY_QUERY_VALUE、KEY_SET_VALUE、KEY_CREATE_SUB_KEY、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY、KEY_CREATE_LINK

[in] ObjectAttributes

オブジェクト名とその他の属性を指定する OBJECT_ATTRIBUTES 構造体へのポインター。 InitializeObjectAttributes を使用して、この構造体を初期化します。 呼び出し元がシステム スレッド コンテキストで実行されていない場合は、 InitializeObjectAttributes を呼び出すときにOBJ_KERNEL_HANDLE属性を設定する必要があります。

TitleIndex

デバイス ドライバーと中間ドライバーでは、このパラメーターを 0 に設定します。

[in, optional] Class

キーのオブジェクト クラスを含む Unicode 文字列へのポインター。 この情報は、構成マネージャーによって使用されます。

[in] CreateOptions

キーを作成または開くときに適用するオプションを指定します。次のフラグの互換性のある組み合わせとして指定します。

CreateOptions フラグ 説明
REG_OPTION_VOLATILE システムの再起動時にキーは保持されません。
REG_OPTION_NON_VOLATILE キーは、システムの再起動時に保持されます。
REG_OPTION_CREATE_LINK 新しく作成されたキーはシンボリック リンクです。 このフラグは、デバイス ドライバーと中間ドライバーでは使用されません。
REG_OPTION_BACKUP_RESTORE キーは、バックアップ操作と復元操作を許可する特別な特権で作成または開く必要があります。 このフラグは、デバイス ドライバーと中間ドライバーでは使用されません。

[out, optional] Disposition

新しいキーが作成されたか、既存のキーが開かれたかを示す値を受け取る変数へのポインター。

廃棄 説明
REG_CREATED_NEW_KEY 新しいキーが作成されました。
REG_OPENED_EXISTING_KEY 既存のキーが開かれました。

戻り値

ZwCreateKey は 、成功した場合はSTATUS_SUCCESS、失敗した場合は適切な NTSTATUS エラー コードを返します。

注釈

ZwCreateKey は、呼び出し元がレジストリ キーを操作するために使用できるハンドルを提供します。 詳細については、「 ドライバーでのレジストリの使用」を参照してください。

KeyHandle が指すハンドルが使用されなくなったら、ドライバーは ZwClose を呼び出して閉じる必要があります。

ZwCreateKey を使用して作成または開くファイルの名前を指定するには、次の 2 つの方法があります。

  1. 完全修飾パス名として、入力 ObjectAttributesObjectName メンバーで指定されます。 レジストリ キーのパス名は 、\Registry で始まります。

  2. 入力 ObjectAttributesRootDirectory メンバーのハンドルによって表される、別のレジストリ キーに対する相対パス名。

ObjectAttributes で指定されたキーが存在しない場合、ルーチンはキーの作成を試みます。 この試行を成功させるには、新しいキーが RootDirectory によって参照されるキーの直接サブキーである必要があり、 RootDirectory が参照するキーは、KEY_CREATE_SUB_KEYアクセスのために開かれている必要があります。

指定したキーが既に存在する場合は、そのキーが開き、その値は何も影響を受けません。

キーの作成時に ObjectAttributes によって指定されたセキュリティ属性によって、ZwCreateKeyZwOpenKey の後続の呼び出しで、指定した DesiredAccess が許可されるかどうかが決まります。

呼び出し元がシステム スレッド コンテキストで実行されていない場合は、作成するハンドルがプライベート ハンドルであることを確認する必要があります。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。 詳細については、「 オブジェクト ハンドル」を参照してください。

レジストリ キーの操作の詳細については、「 ドライバーでのレジストリの使用」を参照してください。

この関数の呼び出しがユーザー モードで行われる場合は、"ZwCreateKey" ではなく "NtCreateKey" という名前を使用する必要があります。

Windows カーネルの NtCreateKey ルーチンは、カーネル モード ドライバーから直接アクセスできません。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx バージョンと ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
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(wdm)

こちらもご覧ください

ACCESS_MASK

InitializeObjectAttributes

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

ZwClose

ZwDeleteKey

ZwEnumerateKey

ZwEnumerateValueKey

ZwFlushKey

ZwNotifyChangeKey

ZwOpenKey

ZwQueryValueKey

ZwSetValueKey