レジストリの値を読み出すには、RegQueryValueEx()関数を使います。WOW64(64bit)のレジストリのデータを読み出すには、 レジストリキーハンドルを取得する際に、RegOpenKeyEx()関数の権限に、KEY_WOW64_64KEYを付加してキーハンドルを取得します。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <windows.h> /* レジストリの読出し(64bit) WOW64 の影響を受けるレジストリ キー https://msdn.microsoft.com/ja-jp/library/aa384253(v=vs.85).aspx */ int _tmain ( int argc , _TCHAR* argv[] ) { // std::wcoutのロケールを設定 std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // エラーコード HRESULT hResult = S_OK; { // 戻り値 DWORD dwResult = 0; // HKEY HKEY hKey = NULL; /* レジストリオープン */ dwResult = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE // レジストリキー , L"SOFTWARE¥¥Microsoft¥¥Internet Explorer" // レジストリサブキー , 0 // Reserved(0固定) , KEY_QUERY_VALUE // アクセス権 | KEY_WOW64_64KEY // 64bitレジストリ , &hKey // キーハンドルの受け取り位置 ); if ( ERROR_SUCCESS != dwResult ) { // エラー hResult = ::HRESULT_FROM_WIN32( dwResult ); goto err; } // データの読出しバッファ TCHAR waReadBuf[ MAX_PATH ]; // データの読出しバッファのサイズ(文字数では無くバイト数) / 読みだしたサイズ DWORD dwReadSize = sizeof( waReadBuf ); // 読みだしたデータのタイプ(RegEnumValue) DWORD dwType = 0; /* レジストリの値を取得 InternetExprolerのバージョン情報 */ dwResult = ::RegQueryValueEx( hKey // キーハンドル , L"svcVersion" // ValueName , 0 // Reserved(0固定) , &dwType // 読みだしたデータの型 , (LPBYTE)waReadBuf // 読みだし位置 , &dwReadSize // Input: 読み出しバッファサイズ / Output読みだしたサイズ ); if ( ERROR_SUCCESS != dwResult ) { // エラー hResult = ::HRESULT_FROM_WIN32( dwResult ); goto err; } /* 読みだした内容の出力 */ std::wcout << L"読みだした値 = " << waReadBuf << std::endl; std::wcout << L"読みだしたサイズ = " << dwReadSize << std::endl; std::wcout << L"読みだしたデータの型 = "; switch( dwType ) { case REG_BINARY: std::wcout << L"REG_BINARY"; break; case REG_DWORD: std::wcout << L"REG_DWORD / REG_DWORD_LITTLE_ENDIAN"; break; case REG_DWORD_BIG_ENDIAN: std::wcout << L"REG_DWORD_BIG_ENDIAN"; break; case REG_EXPAND_SZ: std::wcout << L"REG_EXPAND_SZ"; break; case REG_LINK: std::wcout << L"REG_LINK"; break; case REG_MULTI_SZ: std::wcout << L"REG_MULTI_SZ"; break; case REG_NONE: std::wcout << L"REG_NONE"; break; case REG_QWORD: std::wcout << L"REG_QWORD / REG_QWORD_LITTLE_ENDIAN"; break; case REG_RESOURCE_LIST: std::wcout << L"REG_RESOURCE_LIST"; break; case REG_SZ: std::wcout << L"REG_SZ"; break; } std::wcout << std::endl; err: // キーハンドルの破棄 if ( NULL != hKey ) { ::RegCloseKey( hKey ); } } // 処理結果を返す return( 0 ); }
読みだした値 = 11.103.14393.0 読みだしたサイズ = 30 読みだしたデータの型 = REG_SZ