2009-07-03 8 views
1

のために働いていないCRegKey.QueryBinaryValue()メソッドは:
ここでは、サンプルコードスニペットです:VC++:私は、Windows 7用のシステム情報を取り出すVC++でツールを開発していますWindows 7の

CRegKey key; 
if(ERROR_SUCCESS == key.Open(hKey, pPath, KEY_READ)) 
{ 
    // read the value, length will contain the size after the call 
    if (ERROR_SUCCESS != key.QueryBinaryValue(pValueName, pData, &length)) 
    { 
     // error occurred 
     length = 0; 
    } 
    key.Close(); 
} 
else 
{ 
    length = 0; 
} 

length

QueryBinaryValue()レジストリからREG_BINARYキーを読み込もうとすると、Windows 7で正常に動作せず、エラーコードが2(キーが見つかりません)と表示されます。 XP、Vistaでも同じコードがうまくいきます。

答えて

0

キーと値の両方が別のルート(例:RegEdit)でWindows 7レジストリに存在することを確認しましたか?

Process Monitorが根本的な問題を示している可能性があります。特に何が失敗しているか。

より具体的にするためにアクセスしようとしているキー/値を知らなくても。見て

1

2つのこと:

  1. は可能insufficiante許可が7上のキーを開くことからあなたを妨げていますか? IIRCのProcess Monitor(Richardが提案)は、アクセスが拒否されたかどうかなど、障害の理由を示します。
  2. 64ビットバージョンのWindowsには、32ビット実行可能ファイル用のサブシステムが含まれています。これらの実行可能ファイルは、Systemフォルダ(System32の代わりにSysWOW64)とレジストリの別のビューの別のビューを表示します。 7が64ビットでアプリケーションが32ビットの場合、あなたとあなたのアプリケーションが同じレジストリハイブを見ていない可能性があります。あなたがregeditを実行すると、メインの64ビットレジストリを見ています。しかし、32ビットの実行可能ファイルは、WOWハイブを調べることになります。これが当てはまる場合は、SysWOW64の下にあるregeditを使用することができます。 32ビットの実行ファイルであるため、アプリケーションに表示される内容が正確に表示されます。
関連する問題