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
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
新しいキーが作成されたか、または既存のキーが開かれたかを示す値を受け取る変数へのポインター。
Disposition 値 | 形容 |
---|---|
REG_CREATED_NEW_KEY | 新しいキーが作成されました。 |
REG_OPENED_EXISTING_KEY | 既存のキーが開かれました。 |
戻り値
ZwCreateKey
備考
ZwCreateKey は、呼び出し元がレジストリ キーの操作に使用できるハンドルを提供します。 詳細については、「ドライバーでのレジストリの使用」を参照してください。
KeyHandle
ZwCreateKeyで作成または
完全修飾パス名として、入力 ObjectAttributesの ObjectName メンバーで指定されます。 レジストリ キーのパス名は、\Registryで始まります。
objectAttributes
入力の RootDirectory メンバーのハンドルによって表される、別のレジストリ キーに対する相対パス名。
ObjectAttributes で指定されたキーが存在しない場合、ルーチンはキーの作成を試みます。 この試行を成功させるには、新しいキーが、
指定したキーが既に存在する場合は、そのキーが開き、その値は影響を受けません。
呼び出し元がシステム スレッド コンテキストで実行されていない場合は、作成するハンドルがプライベート ハンドルであることを確認する必要があります。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。 詳細については、「オブジェクト ハンドル」を参照してください。
レジストリ キーの操作の詳細については、「ドライバーでのレジストリの使用
この関数の呼び出しがユーザー モードで発生する場合は、"ZwCreateKey" ではなく"NtCreateKey" という名前を使用する必要があります。
Windows カーネル NtCreateKey ルーチンは、カーネル モード ドライバーから直接アクセスできません。
カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx と ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt および Zw バージョンの使用 を参照してください。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の |
万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 を |
HwStorPortProhibitedDDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), 2ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(wdm) |
関連項目
InitializeObjectAttributes の