RegOpenKeyExA 関数 (winreg.h)

指定したレジストリ キーが開きます。 キー名では大文字と小文字は区別されないことに注意してください。

キーに対してトランザクションレジストリ操作を実行するには、 RegOpenKeyTransacted 関数を呼び出します。

構文

LSTATUS RegOpenKeyExA(
  [in]           HKEY   hKey,
  [in, optional] LPCSTR lpSubKey,
  [in]           DWORD  ulOptions,
  [in]           REGSAM samDesired,
  [out]          PHKEY  phkResult
);

パラメーター

[in] hKey

開いているレジストリ キーへのハンドル。 このハンドルは、 RegCreateKeyEx 関数または RegOpenKeyEx 関数によって返されます。または、次の 定義済みキーのいずれかを指定できます。

HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIGHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERS

[in, optional] lpSubKey

開くレジストリ サブキーの名前。

キー名では大文字と小文字は区別されません。

lpSubKey パラメーターが NULL または空の文字列へのポインターであり、hKey が定義済みのキーの場合、システムは定義済みのキーを更新し、phkResult は関数に渡されたのと同じ hKey ハンドルを受け取ります。 それ以外の場合、 phkResult は、開かれたキーへの新しいハンドルを受け取ります。

詳細については、「 レジストリ要素のサイズ制限」を参照してください。

[in] ulOptions

キーを開くときに適用するオプションを指定します。 このパラメーターを 0 または次に設定します。

意味
REG_OPTION_OPEN_LINK
キーはシンボリック リンクです。 レジストリ シンボリック リンクは、絶対に必要な場合にのみ使用する必要があります。

[in] samDesired

開くキーに対する必要なアクセス権を指定するマスク。 キーのセキュリティ記述子が呼び出し元プロセスに対して要求されたアクセスを許可していない場合、関数は失敗します。 詳細については、「 レジストリ キーのセキュリティとアクセス権」を参照してください。

[out] phkResult

開かれたキーへのハンドルを受け取る変数へのポインター。 キーが定義済みのレジストリ キーの 1 つでない場合は、ハンドルの使用が完了したら 、RegCloseKey 関数を呼び出します。

戻り値

関数が成功した場合、戻り値は ERROR_SUCCESS です。

関数が失敗した場合、戻り値は Winerror.h で定義されている 0 以外のエラー コードです。 FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して FormatMessage 関数を使用すると、エラーの一般的な説明を取得できます。

注意

従来のバージョンの Windows では、この API は kernel32.dll によっても公開されます。

注釈

RegCreateKeyEx 関数とは異なり、レジストリにキーが存在しない場合、RegOpenKeyEx 関数は指定されたキーを作成しません。

特定のレジストリ操作では、キーへのハンドルが取得されたときに指定されたアクセス マスクではなく、キーのセキュリティ記述子に対してアクセス チェックを実行します。 たとえば、 samDesired のKEY_READでキーを開いた場合でも、キーのセキュリティ記述子で許可されている場合は、レジストリ キーを作成するために使用できます。 これに対し、 RegSetValueEx 関数では、KEY_SET_VALUEアクセス権を使用してキーを開く必要があります。

サービスまたはアプリケーションが異なるユーザーを偽装する場合は、この関数を HKEY_CURRENT_USERで使用しないでください。 代わりに、 RegOpenCurrentUser 関数を 呼び出します。

特定のレジストリ キーにアクセスする操作はリダイレクトされることに注意してください。 詳細については、「 レジストリの仮想化 」および「レジストリ内 の 32 ビットおよび 64 ビットアプリケーション データ」を参照してください。

lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey);

if (lResult != ERROR_SUCCESS) 
{
    if (lResult == ERROR_FILE_NOT_FOUND) {
        printf("Key not found.\n");
        return TRUE;
    } 
    else {
        printf("Error opening key.\n");
        return FALSE;
    }
}

コンテキストでこの例を確認するには、「 サブキーを使用してキーを削除する」を参照してください。

注意

winreg.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして RegOpenKeyEx を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winreg.h (Windows.h を含む)
Library Advapi32.lib
[DLL] Advapi32.dll

こちらもご覧ください

RegCloseKey

RegCreateKeyEx

RegDeleteKey

RegOpenKeyTransacted

レジストリ関数

レジストリの概要