Windowsにソフトウェアポリシーハッシュルールを追加するプロセスを自動化しようとしています。現在、有効なハッシュをレジストリに追加する際に問題が発生しています。このコードは、キーを作成し、レジストリにハッシュを追加します。ルールにレジストリキーを比較するときWindowsレジストリのREG_BINARYタイプに文字列を正しく追加します。
しかし:これは正常に動作して、レジストリにキーを追加します
HKEY* m_hKey;
string md5Digest;
string valueName = "ItemData";
vector<BYTE> itemData;
/*
use Crypto++ to get file hash
*/
//convert string to format that can be loaded into registry
for (int i = 1; i < md5Digest.length(); i += 2)
itemData.push_back('0x' + md5Digest[i - 1] + md5Digest[i]);
// Total data size, in bytes
const DWORD dataSize = static_cast<DWORD>(itemData.size());
::RegSetValueEx(
m_hKey,
valueName.c_str(),
0, // reserved
REG_BINARY,
&itemData[0],
dataSize
);
あなたは非常に重要な違いを見ることができ、グループポリシーによって追加:
「にItemData」値はそれらの間で異なっています。下の画像のItemData値が正しい出力です。プログラムをデバッグするとき、私ははっきりとは何
.... MD5ダイジェストが正しい値を持っているので、問題はバイトまたは符号なし文字のにItemDataベクトルにMD5ダイジェスト文字列の変換であることがわかります私のコードの問題、なぜデータがレジストリに間違って入力されていますか?
あなたは 'char_code( 'x')+ char_code( '3')+ char_code( 'D')= 0xEF'から間違ったベクトルを構築しているようですが、0x3Dが必要です。 –
@JohnnyMoppどのようにベクトルを正しく構築するのですか? –