Share via


レジストリ キーへの安全なアクセス

お客様の問題は、次の操作を行うサードパーティの デバイス インストール アプリケーションなどの外部コンポーネントに頻繁にトレースされています。

  • 重要なレジストリ キーを削除します。

  • 重要なレジストリ キーのアクセス許可を変更します。

外部コンポーネントで発生する問題の多くは、レジストリ キーのKEY_ALL_ACCESSアクセス許可を使用することによって発生します。 Windows Server 2003 以降、 SetupDiCreateDevRegKey はKEY_ALL_ACCESSではなく、KEY_READとKEY_WRITEアクセス許可のみを付与します。 Windows Vista 以降では、追加のKEY_ALL_ACCESS制限が適用されます。

レジストリ キーに安全にアクセスするには、次のガイドラインに従ってください。

  • SetupAPIConfiguration Manager関数、およびその他のサポートされているデバイス関連 API のみを使用して、デバイス レジストリ キー (特にデバイスのハードウェア キーソフトウェア キー) を開きます。

    これらの関数は、アクセス許可の制限に起因する一般的な問題に対処します。

  • レジストリ キーの場所と形式は、Windows のバージョンによって異なる場合があります。 デバイスとドライバーのインストールに使用されるレジストリ キーまたは値の場所、形式、意味を想定しないでください。

    レジストリ キーとツリーの詳細については、「デバイスとドライバーのレジストリ ツリーとキー」を参照してください。

  • レジストリを使用して、デバイスの内部設定に直接アクセスしたり、変更したりしないでください。

  • 次のように、各タスクに必要な最小限のアクセス許可のみを要求します。

    • KEY_SET_VALUE

    • KEY_CREATE_SUB_KEY

    • KEY_QUERY_VALUE

    • KEY_ENUMERATE_SUB_KEYS

  • レジストリでデバイス セットアップ クラス キーを直接開かないでください。 レジストリ キーと同様に、これらのデバイス セットアップ クラス キーの場所と名称は、Windows のバージョンにより異なる可能性があります。 デバイス セットアップ クラス キーに適切にアクセスする方法については、 「デバイス セットアップ クラスのレジストリ キーを開く」を参照してください。

  • レジストリでデバイス インターフェイス クラス キーを直接開かないでください。 レジストリ キーと同様に、これらのデバイス セットアップ インターフェイス キーの場所と名称は、Windows のバージョンにより異なる可能性があります。

    デバイス インターフェイス クラス キーを安全に開くには、ulFlags パラメーターにCM_OPEN_CLASS_KEY_INTERFACEを設定してCM_Open_Class_Key を使用するか、SetupDiOpenClassRegKeyEx を使用して FlagsパラメーターにDIOCR_INSTALLERを設定します。

  • オペレーティング システムで使用するために予約されているレジストリ キーを変更するには、INF ディレクティブのみを使用します。 詳細については、 「INFディレクティブの概要」を参照してください。

  • クラス インストーラー共同インストーラー は、オペレーティング システムで使用するために予約されているレジストリ値を作成、変更、または削除するためにレジストリ関数を呼び出すことはできません。

レジストリ キーのアクセス許可の詳細については、「レジストリ キーのセキュリティとアクセス権」を参照してください。