Esempio n. 1
0
// 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);
    }