// Static functions static HRESULT RegDefaultReadValueBinary( __in CFGDB_STRUCT *pcdb, __in HKEY hkKey, __in_z LPCWSTR wzValueName, __in_z LPCWSTR wzCfgValueName ) { HRESULT hr = S_OK; BYTE *pbBuffer = NULL; SIZE_T cbBuffer = 0; CONFIG_VALUE cvNewValue = { }; hr = RegReadBinary(hkKey, wzValueName, &pbBuffer, &cbBuffer); ExitOnFailure(hr, "Failed to read binary value from registry: %ls", wzValueName); hr = ValueSetBlob(pbBuffer, cbBuffer, FALSE, NULL, pcdb->sczGuid, &cvNewValue); ExitOnFailure(hr, "Failed to set string value %ls in memory", wzCfgValueName); hr = ValueWrite(pcdb, pcdb->dwAppID, wzCfgValueName, &cvNewValue, TRUE, NULL); ExitOnFailure(hr, "Failed to set value in db: %ls", wzCfgValueName); LExit: ReleaseMem(pbBuffer); ReleaseCfgValue(cvNewValue); return hr; }
void CfgTest::CheckCfgAndRegValueFlag(CFGDB_HANDLE cdhDb, HKEY hk, LPCWSTR wzCfgName, LPCWSTR wzName, BOOL fExpectedValue, DWORD dwOffset) { HRESULT hr = S_OK; BYTE *pbBytes; DWORD cbBytes; BOOL fRegFoundValue = FALSE; BOOL fCfgFoundValue = FALSE; hr = RegReadBinary(hk, wzName, &pbBytes, &cbBytes); ExitOnFailure1(hr, "Failed to read binary value from registry named %ls", wzName); if (dwOffset >= cbBytes * 8) { hr = E_INVALIDARG; ExitOnFailure2(hr, "Not enough bytes found in registry value %ls to check offset %u", wzName, dwOffset); } fRegFoundValue = (pbBytes[dwOffset / 8] & (0x1 << (dwOffset % 8))) == 0 ? FALSE : TRUE; if (fRegFoundValue != fExpectedValue) { hr = E_FAIL; ExitOnFailure3(hr, "Boolean flag value in registry didn't match expected! RegName: %ls, Offset: %ls, Expected: %ls", wzName, dwOffset, fExpectedValue ? L"TRUE" : L"FALSE"); } hr = CfgGetBool(cdhDb, wzCfgName, &fCfgFoundValue); ExitOnFailure1(hr, "Failed to read boolean from cfg db named %ls", wzCfgName); if (fCfgFoundValue != fExpectedValue) { hr = E_FAIL; ExitOnFailure2(hr, "Boolean flag value in cfg db didn't match expected! CfgName: %ls, Expected: %ls", wzCfgName, fExpectedValue ? L"TRUE" : L"FALSE"); } LExit: ReleaseMem(pbBytes); }