次の方法で共有


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 以外のエラー コードです。 FormatMessage 関数を FORMAT_MESSAGE_FROM_SYSTEM フラグと共に使用すると、エラーの一般的な説明を取得できます。

手記

レガシ バージョンの 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 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winreg.h (Windows.h を含む)
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

RegCloseKey

RegCreateKeyEx の

RegDeleteKey を する

RegOpenKeyTransacted

レジストリ関数 を する

レジストリの概要