今回はレジストリエントリ(値)の数が不一致する件について質問させていただきます。
レジストリのあるキーに存在する値を列挙するためにRegEnumValue関数で値の名前を列挙したあとに、RegQueryValueEx関数で値の名前を元に1つ1つ値のデータを取得するプログラムを組みました。
正しく値が列挙できているか確かめるためにレジストリエディタでそのキーを確かめたところ、明らかに値の数が一致していませんでした。
環境によると思いますが、私の環境では列挙できたのが31個に対し、実際は49個でした。
念のためRegQueryInfoKey関数で値の数を取得しましたが、31個と、列挙できた個数と一致しました。
何故このような現象が起きるのか、原因が分かりません。
ご教授願います。
組んだプログラムは以下の通りです。
#uselib "advapi32" #func RegCloseKey "RegCloseKey" sptr #func RegEnumValue "RegEnumValueA" sptr, sptr, sptr, sptr, nullptr, nullptr, nullptr, nullptr #func RegOpenKeyEx "RegOpenKeyExA" sptr, sptr, nullptr, sptr, sptr #func RegQueryInfoKey "RegQueryInfoKeyA" sptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, sptr, nullptr, nullptr, nullptr, nullptr #func RegQueryValueEx "RegQueryValueExA" sptr, sptr, nullptr, nullptr, sptr, sptr dim n dim sCnt dim hKey RegOpenKeyEx $80000002, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions", $1, varptr(hKey) assert sdim name, , 64 sdim data, , 64 repeat dupptr size, varptr(name.cnt) - 16, 4 RegEnumValue hKey, cnt, varptr(name.cnt), varptr(size) if stat { if stat = 259 : sCnt = cnt : break logmes "ERROR" } loop sdim size repeat sCnt RegQueryValueEx hKey, varptr(name.cnt), 0, varptr(size) if stat : data.cnt = "ERROR" : continue RegQueryValueEx hKey, varptr(name.cnt), varptr(data.cnt), varptr(size) if stat : data.cnt = "ERROR" : continue loop RegQueryInfoKey hKey, varptr(n) if stat : logmes "ERROR" RegClosekey hKey font "" repeat sCnt mes name.cnt + " = " + data.cnt loop title "" + sCnt + ":" + n