RegQueryMultipleValues レジストリの複数の値の取得

Cの宣言:

LONG RegQueryMultipleValues(
	HKEY hKey,
	PVALENT Values,
	DWORD ValueNum,
	LPTSTR Buf,
	LPDWORD BufSize);

説明:

hKeyで示されるレジストリキーに存在する複数の値を取得する。

この関数はNT3.5以降または95で使用可能な、advapi32.dllで実装される関数である。

取得する値の一覧の指定は、VALENT型の配列によって行う。各VALENT型データのve_valuenameデータメンバに、取得する値の名前を指すポインタをあらかじめ設定してRegQueryMultipleValuesを呼ぶと、ve_valueptrメンバなどに、取得結果の値に関する情報が取得される。取得結果の値はBufで示されるデータ領域に書き込まれ、VALENT型のデータメンバであるve_valueptrは、Bufで指定したバッファ内を指すように設定される。

ve_valuenameに設定する名前には、“\”を含んではならない。

RegQueryMultipleValuesは、返されるデータの合計が1Mバイト以上となるようなデータの取得を行うことはできない。

引数の意味は、以下の通り。
hKey (IN) 値の取得元のレジストリキーを示すハンドル
Values (I/O) 取得する値の名前を指定するVALENT型の配列。関数の実行後、各々の値の型、値、長さなどが設定される。
ValueNum (IN) Valuesで指定した配列の要素の数。
Buf (OUT) Valuesで指定したVALENT型配列の要素のデータメンバであるve_valueptrが示す先として使用される、呼び出し元が用意するバッファ。NULLを指定した場合、BufSizeに必要なバッファのサイズが返される。
BufSize (I/O) Bufのサイズ。関数の実行後、Bufに書き込まれたデータのバイト数が設定される。BufSizeの入力値が小さすぎた場合、必要なバッファのサイズが返される。

関数の実行に成功した場合、ERROR_SUCCESSが返される。失敗した場合、エラーコードが返される。

Cのサンプル:

void DispMouseInfo()
{
	HKEY hKey;
	VALENT Values[3];
	char Buf[1000];
	DWORD BufSize;
	int i;

	/* バッファの初期化 */
	BufSize = 1000;
	Values[0].ve_valuename = "DoubleClickSpeed";
	Values[1].ve_valuename = "MouseSpeed";
	Values[2].ve_valuename = "SwapMouseButtons";

	/* レジストリのオープン */
	RegOpenKeyEx(HKEY_CURRENT_USER,
		"Control Panel\\Mouse",
		0,
		KEY_QUERY_VALUE,
		&hKey);

	/* 値の取得 */
	RegQueryMultipleValues(hKey, Values, 3, Buf, &BufSize);

	/* 値の表示 */
	for(i=0; i<3; i++) printf("%s: %s\n", Values[i].ve_valuename, Values[i].ve_valueptr);

	/* 後処理 */
	RegCloseKey(hKey);
}

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。