RegCreateKeyTransactedA 関数 (winreg.h)
指定されたレジストリ キーを作成し、トランザクションに関連付けます。 キーが既に存在する場合、関数によって開かれます。 キー名では大文字と小文字は区別されないことに注意してください。
システム ファイルやレジストリ ハイブを含むシステム状態をバックアップまたは復元するアプリケーションでは、レジストリ関数の代わりに ボリューム シャドウ コピー サービス を使用する必要があります。
構文
LSTATUS RegCreateKeyTransactedA(
[in] HKEY hKey,
[in] LPCSTR lpSubKey,
DWORD Reserved,
[in, optional] LPSTR lpClass,
[in] DWORD dwOptions,
[in] REGSAM samDesired,
[in, optional] const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[out] PHKEY phkResult,
[out, optional] LPDWORD lpdwDisposition,
[in] HANDLE hTransaction,
PVOID pExtendedParemeter
);
パラメーター
[in] hKey
開いているレジストリ キーへのハンドル。 呼び出し元のプロセスには、キーへのKEY_CREATE_SUB_KEYアクセス権が必要です。 詳細については、「 レジストリ キーのセキュリティとアクセス権」を参照してください。
キー作成のアクセスは、ハンドルが取得されたときに指定されたアクセス マスクではなく、レジストリ キーのセキュリティ記述子に対してチェックされます。 そのため、 hKey が samDesired のKEY_READで開かれた場合でも、セキュリティ記述子で許可されている場合はキーを作成する操作で使用できます。
このハンドルは、 RegCreateKeyTransacted 関数または RegOpenKeyTransacted 関数によって返されます。または、次の 定義済みキーのいずれかを指定できます。
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_CONFIG
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_USERS
[in] lpSubKey
この関数によって開かれる、または作成されるサブキーの名前。 指定するサブキーは、 hKey パラメーターによって識別されるキーのサブキーである必要があります。レジストリ ツリーの深いレベルは最大 32 レベルです。 キー名の詳細については、「 レジストリの構造」を参照してください。
lpSubKey が空の文字列へのポインターである場合、phkResult はhKey で指定されたキーへの新しいハンドルを受け取ります。
このパラメーターを NULL にすることはできません。
Reserved
このパラメーターは予約されており、0 である必要があります。
[in, optional] lpClass
このキーのユーザー定義クラス。 このパラメーターは無視できます。 このパラメーターは、NULL でもかまいません。
[in] dwOptions
このパラメーターには、次の値のいずれかを指定できます。
値 | 説明 |
---|---|
|
このフラグが設定されている場合、関数は samDesired パラメーターを 無視し、キーのバックアップまたは復元に必要なアクセス権を使用してキーを開こうとします。 呼び出し元のスレッドでSE_BACKUP_NAME特権が有効になっている場合、キーはACCESS_SYSTEM_SECURITYとKEY_READアクセス権を使用して開かれます。 呼び出し元のスレッドでSE_RESTORE_NAME特権が有効になっている場合、キーはACCESS_SYSTEM_SECURITYとKEY_WRITEアクセス権を使用して開かれます。 両方の特権が有効になっている場合、キーには両方の特権の組み合わせアクセス権があります。 詳細については、「特別な特権を使用して実行する」を参照してください。 |
|
このキーは揮発性ではありません。これが既定値です。 情報はファイルに格納され、システムの再起動時に保持されます。 RegSaveKey 関数は、揮発性ではないキーを保存します。 |
|
関数によって作成されるすべてのキーは揮発性です。 情報はメモリに格納され、対応するレジストリ ハイブのアンロード後は維持されません。 HKEY_LOCAL_MACHINEの場合、これはシステムがシャットダウンされるときに発生します。 RegLoadKey 関数によって読み込まれたレジストリ キーの場合、これは対応する RegUnLoadKey が実行されるときに発生します。 RegSaveKey 関数では、揮発性キーは保存されません。 このフラグは、既に存在するキーでは無視されます。 |
[in] samDesired
作成するキーのアクセス権を指定するマスク。 詳細については、「 レジストリ キーのセキュリティとアクセス権」を参照してください。
[in, optional] lpSecurityAttributes
返された ハンドルを子 プロセスによって継承できるかどうかを決定するSECURITY_ATTRIBUTES構造体へのポインター。 lpSecurityAttributes が NULL の場合、ハンドルを継承できません。
構造体の lpSecurityDescriptor メンバーは、新しいキーのセキュリティ記述子を指定します。 lpSecurityAttributes が NULL の場合、キーは既定のセキュリティ記述子を取得します。 キーの既定のセキュリティ記述子の ACL は、その直接の親キーから継承されます。
[out] phkResult
開かれた、または作成されたキーへのハンドルを受け取る変数へのポインター。 キーが定義済みのレジストリ キーの 1 つでない場合は、ハンドルの使用が完了したら 、RegCloseKey 関数を呼び出します。
[out, optional] lpdwDisposition
次のいずれかの処理値を受け取る変数へのポインター。
値 | 説明 |
---|---|
|
キーが存在せず、作成されました。 |
|
キーは存在し、変更されずに単純に開かれました。 |
lpdwDisposition が NULL の場合、処理情報は返されません。
[in] hTransaction
アクティブなトランザクションへのハンドル。 このハンドルは、 CreateTransaction 関数によって返されます。
pExtendedParemeter
このパラメーターは予約されており、 NULL である必要があります。
戻り値
関数が成功した場合、戻り値は ERROR_SUCCESS です。
関数が失敗した場合、戻り値は Winerror.h で定義されている 0 以外のエラー コードです。 FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して FormatMessage 関数を使用すると、エラーの一般的な説明を取得できます。
解説
この関数を使用してキーを作成すると、そのキーに対する後続の操作が処理されます。 トランザクションがコミットされる前に、トランザクション以外の操作がキーに対して実行された場合、トランザクションはロールバックされます。 トランザクションがコミットまたはロールバックされた後、RegCreateKeyTransacted または RegOpenKeyTransacted とアクティブなトランザクション ハンドルを使用してキーを開き直して、追加の操作をトランザクション処理する必要があります。 トランザクションの詳細については、「 カーネル トランザクション マネージャー」を参照してください。
このキーのサブキーに対する後続の操作は自動的には処理されないことに注意してください。 したがって、 RegDeleteKeyEx はトランザクション削除操作を実行しません。 代わりに、 RegDeleteKeyTransacted 関数を使用して、トランザクション削除操作を実行します。
RegCreateKeyTransacted 関数が作成するキーには値がありません。 アプリケーションでは、 RegSetValueEx 関数を使用してキー値を設定できます。
RegCreateKeyTransacted 関数は、指定したパスに不足しているすべてのキーを作成します。 アプリケーションでは、この動作を利用して、一度に複数のキーを作成できます。 たとえば、アプリケーションでは、 lpSubKey パラメーターに次の形式の文字列を指定することで、前の 3 つのサブキーと同時に 4 つのレベルの深さのサブキーを作成できます。
subkey1\subkey2\subkey3\subkey4
パス内の既存のキーのスペルが正しくない場合、この動作により不要なキーが作成されることに注意してください。
アプリケーションは、 HKEY_USERSまたはHKEY_LOCAL_MACHINE の直接の子であるキー を作成できません。 アプリケーションは、HKEY_USERSまたは HKEY_LOCAL_MACHINE ツリーの下位レベルでサブキー を 作成できます。
Note
winreg.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして RegCreateKeyTransacted を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winreg.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |