<Return[R]><Top>

RegCreateKeyEx

Declare Function Api_RegCreateKeyEx& Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal Reserved&, ByVal lpClass$, ByVal dwOptions&, ByVal samDesired&, ByVal lpSecurityAttributes As Any, phkResult&, lpdwDisposition&)

Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long

指定されたレジストリキーを作成する。そのキーが既に存在している場合、そのキーを開く。

パラメータ
hKey
    現在開いている 1 つのキーのハンドルを指定する。

    代わりに、あらかじめ定義されている次の予約済みハンドルのいずれかを指定することもできる。
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_CONFIG
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS
    Windows NT/2000:HKEY_PERFORMANCE_DATA も指定できる。
    Windows 95/98:HKEY_DYN_DATA も指定できる。
    RegCreateKeyEx 関数を使って開いた、または作成したキーは、hKey パラメータで指定するキーのサブキーである。
lpSubKey
    開くべき、または作成するべきサブキーの名前を保持している、NULL で終わる文字列へのポインタを指定する。

    このサブキーは、hKey パラメータで指定したキーのサブキーでなければならない。NULL を指定することはできない。
    Windows NT/2000:lpSubKey パラメータで指定するサブキーの名前の先頭に円記号(\)を記述してはならない。

    先頭に円記号を記述すると、ERROR_BAD_PATHNAME が返る。
    Windows 95/98:lpSubKey パラメータで指定するサブキーの名前の先頭に円記号(\)を記述すると、その円記号は無視される。
Reserved
    予約されている。0 を指定する。
lpClass
    サブキーを新しく作成する際に、そのサブキーに割り当てられるクラス(オブジェクトタイプ)の名前を保持している、NULL で終わる文字列

    へのポインタを指定する。キーが既に存在する場合、このパラメータは無視される。現時点では、クラスはまったく定義されていない。

    アプリケーションは NULL を指定するべきである。Windows 95 と Windows 98 は、リモートレジストリのキーを作成する場合にのみ、この

    パラメータを使う。ローカルレジストリのキーを作成する場合は、このパラメータを無視する。Windows NT/2000 は、ローカルとリモートどちら

    のレジストリのキーを作成する場合も、このパラメータをサポートしている。しかし、どちらにしても、現時点ではこのパラメータで NULL を指

    定するべきである。
dwOptions
    キーに関する特別なオプションを指定する。次の値のいずれかを指定する。

    値                                                     

意味                                                                                                                    

    REG_OPTION_NON_VOLATILE

 

このキーは不揮発性である。このフラグは、既定で指定される。情報はファイルに格納され、

システムを再起動時しても失われない。RegSaveKey 関数は、不揮発性のキーを保存する。

    REG_OPTION_VOLATILE

 

 

 

 

 

 

 

 

Windows NT/2000:このキーは揮発性である。情報はメモリに格納され、このキーに対応する

レジストリハイブ(レジストリツリーのルート)をアンロードする際に保護されない。

たとえば、システムを再起動すると、HKEY_LOCAL_MACHINE レジストリハイブのアンロード

が発生する。RegLoadKey 関数を使ってロードされるレジストリハイブの場合、その関数に対応

する RegUnloadKey 関数を実行すると、レジストリハイブのアンロードが発生する。

RegSaveKey 関数は、揮発性のキーを保存しない。キーが既に存在する場合、このフラグは

無視される。
Windows 95:この値は無視される。REG_OPTION_VOLATILE を指定した場合でも、

RegCreateKeyEx 関数は不揮発性のキーを作成し、ERROR_SUCCESS を返す。

    REG_OPTION_BACKUP_RESTORE

 

 

 

 

 

 

 

Windows NT/2000:このフラグを指定すると、この関数は samDesired パラメータを無視し、

キーをバックアップまたは復元するために必要なアクセス権を割り当てて、そのキーを開こうとす

る。呼び出し側のスレッドで SE_BACKUP_NAME 特権が有効になっている場合、

ACCESS_SYSTEM_SECURITY と KEY_READ の各アクセス権を割り当ててこのキーを開    

く。呼び出し側のスレッドで SE_RESTORE_NAME 特権が有効になっている場合、

ACCESS_SYSTEM_SECURITY と KEY_WRITE の各アクセス権を割り当ててこのキーを開

く。両方の特権が有効になっている場合、両方の特権に対応するアクセス権を組み合わせて、

このキーを開く。

samDesired
    キーに割り当てるべき、希望のアクセスマスクを指定する。次の値を組み合わせて指定する。

   値                                                     

意味                                                                                                                    

    KEY_CREATE_LINK

シンボリックリンクの作成を許可する。

    KEY_CREATE_SUB_KEY

サブキーの作成を許可する。

    KEY_ENUMERATE_SUB_KEYS

サブキーの列挙を許可する。

    KEY_EXECUTE

読み取りアクセスを許可する。

    KEY_NOTIFY

変更の通知(キーに変更が加えられたときに、そのことを通知するよう要求)を許可する。

    KEY_QUERY_VALUE

サブキーのデータを問い合わせることを許可する。

    KEY_SET_VALUE

サブキーのデータを設定することを許可する。

    KEY_ALL_ACCESS

 

 

 

KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY、

KEY_CREATE_SUB_KEY、KEY_CREATE_LINK、KEY_SET_VALUE の各アクセス権を

組み合わせ、さらに SYNCHRONIZE 以外の「standard access rights」(標準アクセス権)

のすべての権利を組み合わせたものである。

    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 の各アク

セス権の組み合わせである。

lpSecurityAttributes
    子プロセスが、取得したハンドルを継承できるかどうかを決定する、1 個の SECURITY_ATTRIBUTES 構造体へのポインタを指定す

    る。NULL を指定すると、そのハンドルを継承できない。
    Windows NT/2000:SECURITY_ATTRIBUTES 構造体の lpSecurityDescriptor メンバで、セキュリティ記述子を指定する。

    このパラメータで NULL を指定すると既定のセキュリティ記述子をキーに割り当てる。
phkResult
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、開いたまたは作成したキーのハンドルが格納される。

    取得したハンドルが不要になった段階で、RegCloseKey 関数を呼び出して、そのハンドルを閉じること。
lpdwDisposition
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、キーが存在していたかどうかを示す次の値のいずれかが格納さ 

    れる。

  値                                                     

意味                                                                                                                    

    REG_CREATED_NEW_KEY

キーが存在していなかったため、新しく作成した。

    REG_OPENED_EXISTING_KEY

キーが存在しており、単純にそのキーを開いた。

    NULL を指定すると、キーが存在していたかどうかを表す値は格納されない。

戻り値
    関数が成功すると、ERROR_SUCCESS が返る。
    関数が失敗すると、Winerror.h ヘッダーファイル内で定義されている、0 以外のエラーコードが返る。

    FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して FormatMessage 関数を呼び出すと、エラーの一般的な説明を取得できる。

解説
    RegCreateKeyEx 関数がキーを作成した段階では、その中にレジストリエントリが存在していない。レジストリエントリを作成するには、

    RegSetValue 関数または RegSetValueEx 関数を使う。