<Return[R]><Top>

RegQueryInfoKey

Declare Function Api_RegQueryInfoKey& Lib "advapi32" Alias "RegQueryInfoKeyA" (ByVal hKey&, ByVal lpClass$, lpcbClass&, ByVal Reserved&, SubKeys&, SubKeyLen&, ClassLen&, Values&, ValueNameLen&, ValueLen&, SecurityDescriptor&, LastWriteTime As FILETIME)

Declare Function RegQueryInfoKey Lib "advapi32" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long

指定されたレジストリキーに関する情報を取得する。

パラメータ
hKey
    現在開いているキーを指定する。代わりに、あらかじめ定義されている次の予約済みハンドルのいずれかを指定することもできる。
    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 も指定できる。
lpClass
    1 個のバッファへのポインタを指定する。

    関数から制御が返ると、この構造体に、キーのクラス名を保持している、NULL で終わる文字列が格納される。

    現時点では、クラスはまったく定義されていない。アプリケーションはこのパラメータを無視するべきである。

    このパラメータで、NULL を指定できる。
lpcClass
    lpClass パラメータが指すバッファのサイズを TCHAR 単位で保持している、1 個の変数へのポインタを指定する(終端の NULL を含

    む)。関数から制御が返ると、この変数に、バッファに格納された文字列の長さが格納される(終端の NULL を除く)。

    バッファのサイズが不足した場合、この関数は ERROR_MORE_DATA を返し、この変数に、文字列のサイズが文字数単位で格納される

    (終端の NULL を除く)。
    lpClass パラメータで NULL を指定した場合、lpcbClass でも NULL を指定できる。
    Windows NT/2000:lpClass パラメータで適切な値を指定した場合でも lpcClass パラメータで不適切な値(たとえば NULL)を指定した

    場合、ERROR_INVALID_PARAMETER が返る。現時点では、lpClass パラメータで NULL、lpcClass パラメータで 0 を指定するべき

    である。
lpReserved
    予約されている。NULL を指定する。
lpcSubKeys
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、指定されたキーに所属しているサブキーの数が格納される。

    このパラメータで、NULL を指定することもできる。
lpcMaxSubKeyLen
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、指定されたキーに所属するサブキーのうち、最も長い名前を持

    つサブキーの名前の長さが TCHAR 単位で格納される。このパラメータで、NULL を指定することもできる。
    Windows NT/2000:この変数に格納される長さには、終端の NULL は含まれない。
    Windows 95/98:この変数に格納される長さには、終端の NULL が含まれる。
lpcMaxClassLen
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、サブキーのクラスを表す文字列のうち、最も長い文字列の長さ

    が文字単位で格納される(終端の NULL を除く)。現時点では、必ず 0 が格納されるので、実質的に意味はない。このパラメータで、

    NULL を指定することもできる。
lpcValues
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、指定されたキーに所属しているレジストリエントリの数が格納さ

    れる。このパラメータで、NULL を指定することもできる。
    レジストリエディタ(Regedt32.exe または Regedit.exe)は、ここで言う「レジストリエントリ」を「値」と呼ぶ。どちらも同じものを意味してい

    て、「名前」(レジストリエントリ名)と「データ」(レジストリエントリのデータ)で構成されている。
lpcMaxValueNameLen
    キーの値の最長の名前の長さを文字数で取得する 1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、指定された

    キーに所属するレジストリエントリのうち、最長の名前を持つレジストリエントリの名前の長さが格納される(終端の NULL を除く)。このパ

    ラメータで、NULL を指定することもできる。
lpcMaxValueLen
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、指定されたキーに所属するレジストリエントリのうち、最長のデ

    ータを持つレジストリエントリのデータの長さがバイト単位で格納される。このパラメータで、NULL を指定することもできる。
lpcbSecurityDescriptor
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、キーのセキュリティ記述子の長さがバイト単位で格納されます。

    このパラメータで、NULL を指定することもできる。
lpftLastWriteTime
    1 個の FILETIME 構造体へのポインタを指定する。関数から制御が返ると、この構造体に、このキーに最後の書き込みが行われた時刻

    が格納される。このパラメータで、NULL を指定することもできる。
    Windows NT/2000:この関数は、キーまたはその中のレジストリエントリのいずれかを最後に変更した日時を FILETIME 構造体のメンバ

    に書き込む。
    Windows 95/98:この関数は FILETIME 構造体のすべてのメンバを 0 に設定します。Windows 95/98 オペレーティングシステムは、レジ

    ストリキーやレジストリエントリの最終書き込み時刻を追跡していないからである。

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

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

解説
    hKey パラメータで指定するキーは、KEY_QUERY_VALUE アクセス権を指定して開いておかなければならない(KEY_READ アクセス権

    には、KEY_QUERY_VALUE アクセス権が含まれているので、代わりに KEY_READ アクセス権を指定して開いてもかまわない)。
    Windows 95/98:レジストリのサブキー名、およびレジストリエントリ名の長さは、最大 255 文字である。