RegQueryValueExA 関数 (winreg.h)
開いているレジストリ キーに関連付けられている指定した値の名前の型とデータを取得します。
警告
クエリ対象の値が文字列 (REG_SZ、REG_MULTI_SZ、REG_EXPAND_SZ) の場合、返される値は null で終わるとは限りません。 返される文字列値が null で終わるようにする場合は、RegGetValue 関数を使用します。 詳細については、以下の解説を参照してください。
構文
LSTATUS RegQueryValueExA(
[in] HKEY hKey,
[in, optional] LPCSTR lpValueName,
LPDWORD lpReserved,
[out, optional] LPDWORD lpType,
[out, optional] LPBYTE lpData,
[in, out, optional] LPDWORD lpcbData
);
パラメーター
[in] hKey
開いているレジストリ キーへのハンドル。 キーは、KEY_QUERY_VALUEアクセス権で開かれている必要があります。 詳細については、「レジストリ キーのセキュリティとアクセス権のを
このハンドルは、
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_CONFIG
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_PERFORMANCE_DATA
- HKEY_PERFORMANCE_NLSTEXT
- HKEY_PERFORMANCE_TEXT
- HKEY_USERS
[in, optional] lpValueName
レジストリ値の名前。
lpValueName
lpValueName
キーには、名前のない値や既定値は自動的に設定されません。 名前のない値には、任意の型を指定できます。 詳細については、「レジストリ要素のサイズ制限
lpReserved
このパラメーターは予約されており、NULL
[out, optional] lpType
指定した値に格納されているデータの型を示すコードを受け取る変数へのポインター。 使用可能な型コードの一覧については、「レジストリ値の型
[out, optional] lpData
値のデータを受け取るバッファーへのポインター。 データが不要な場合、このパラメーターは NULL
[in, out, optional] lpcbData
lpData パラメーターが指すバッファーのサイズをバイト単位で指定する変数へのポインター。 関数から制御が戻るときに、この変数には、lpDataにコピーされたデータのサイズ
データにREG_SZ、REG_MULTI_SZ、またはREG_EXPAND_SZの型がある場合、このサイズには、データが格納されていない限り、null 文字または文字
lpData パラメーター
lpData
戻り値
関数が成功した場合、戻り値はERROR_SUCCESS。
関数が失敗した場合、戻り値は
lpData バッファーが小さすぎてデータを受け取れなければ、関数はERROR_MORE_DATAを返します。
lpValueName レジストリ値が存在しない場合、関数はERROR_FILE_NOT_FOUNDを返します。
備考
アプリケーションは通常、
データにREG_SZ、REG_MULTI_SZ、またはREG_EXPAND_SZの型がある場合、文字列が適切な終端 null 文字で格納されていない可能性があります。 したがって、関数がERROR_SUCCESSを返した場合でも、アプリケーションは文字列を使用する前に適切に終了するようにする必要があります。それ以外の場合は、バッファーを上書きする可能性があります。 (REG_MULTI_SZ文字列には、2 つの終端
データにREG_SZ、REG_MULTI_SZ、またはREG_EXPAND_SZ型があり、この関数の ANSI バージョンが使用されている場合 (
hKeyHKEY_PERFORMANCE_DATA ハンドルと指定したオブジェクトの値文字列に設定された RegQueryValueEx 関数を呼び出すと、返されるデータ構造に要求されないオブジェクトが含まれる場合があります。 驚かないでください。これは通常の動作です。 RegQueryValueEx 関数を呼び出すときは、要求されたオブジェクトを検索するために、返されるデータ構造を常に確認する必要があります。
特定のレジストリ キーにアクセスする操作はリダイレクトされることに注意してください。 詳細については、「レジストリ仮想化
例
この関数を呼び出すたびに、lpcbData パラメーターが指す値を再初期化してください。 これは、次のコード例のように、ループでこの関数を呼び出すときに非常に重要です。
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#define TOTALBYTES 8192
#define BYTEINCREMENT 4096
void main()
{
DWORD BufferSize = TOTALBYTES;
DWORD cbData;
DWORD dwRet;
PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
cbData = BufferSize;
printf("\nRetrieving the data...");
dwRet = RegQueryValueEx( HKEY_PERFORMANCE_DATA,
TEXT("Global"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
while( dwRet == ERROR_MORE_DATA )
{
// Get a buffer that is big enough.
BufferSize += BYTEINCREMENT;
PerfData = (PPERF_DATA_BLOCK) realloc( PerfData, BufferSize );
cbData = BufferSize;
printf(".");
dwRet = RegQueryValueEx( HKEY_PERFORMANCE_DATA,
TEXT("Global"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
}
if( dwRet == ERROR_SUCCESS )
printf("\n\nFinal buffer size is %d\n", BufferSize);
else printf("\nRegQueryValueEx failed (%d)\n", dwRet);
}
手記
winreg.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして RegQueryValueEx を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winreg.h (Windows.h を含む) |
ライブラリ | Advapi32.lib |
DLL | Advapi32.dll |
関連項目
RegCreateKeyEx の
RegEnumKeyEx を
RegEnumValue を
RegGetValue を
RegOpenKeyEx を
RegQueryInfoKey の
レジストリ関数 を