<Return[R]><Top>

RegOpenUserClassesRoot

Declare Function Api_RegOpenUserClassesRoot& Lib "advapi32" Alias "RegOpenUserClassesRoot" (ByVal hToken&, ByVal dwOptions&, ByVal samDesired&, ByRef phkResult&)

Declare Function RegOpenUserClassesRoot Lib "advapi32" Alias "RegOpenUserClassesRoot" (ByVal hToken As Long, ByVal dwOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long

指定したユーザーの HKEY_CLASSES_ROOT キーのハンドルを取得する。ユーザーは、アクセストークンで指定する。

この関数で取得したキーを使って、ユーザーのレジストリハイブの内容と HKEY_LOCAL_MACHINE\Software\Classes キーの内容をマージしたレジストリを取得できる。

パラメータ
hToken
ユーザーのプライマリアクセストークンまたは偽装アクセストークンのハンドルを指定する。このハンドルには、TOKEN_QUERY アクセス権が必要である。
dwOptions
予約されている。0 を指定する。
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_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 の各アクセ

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

phkResult
    開かれたキーのハンドルを受け取る変数へのポインタを指定する。不要になったハンドルは、RegCloseKey 関数を使って閉じる。

戻り値
    関数が成功すると、ERROR_SUCCESS が返る。
    関数が失敗すると、WINERROR.H で定義されている 0 以外のエラーコードが返る。FORMAT_MESSAGE_FROM_SYSTEM フラグを指

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

解説
    この関数を使って、対話型ユーザー以外のユーザーのマージされた HKEY_CLASSES_ROOT 情報を取得できる。

    たとえば、クライアント/サーバーアプリケーションのサーバーコンポーネントは、RegOpenUserClassesRoot 関数を使ってクライアントのマージさ

    れた情報を取得できる。
    指定したユーザーのユーザープロファイルがロードされていないと、この関数は失敗する。ユーザーが対話形式でログオンすると、ユーザーの

    プロファイルが自動的にロードされる。他のユーザーについても、 関数を使ってユーザープロファイルをロードできる。ただし、

    LoadUserProfile 関数は処理に非常に時間がかかるため、ユーザーのマージされた HKEY_CLASSES_ROOT 情報がどうしても必要なと

    き以外は使わない。
    対話形式でログオンしているユーザーのセキュリティコンテキストで実行されているアプリケーションは、RegOpenUserClassesRoot 関数を使う

    必要がない。そのようなアプリケーションは、RegOpenKeyEx 関数を使って、対話型ユーザーのマージされた HKEY_CLASSES_ROOT キ

    ーの内容を取得することができる。