// ClientCDKey::Load
// Loads CD-Key from WON standard location in registry.  Entry is registry must be
// the enrypted binary form.  Calls Init(RawBuffer).
bool
ClientCDKey::Load()
{
	WTRACE("ClientCDKey::Load");
	WDBG_LM("ClientCDKey::Load Loading key from registry.");

	// Open registry key
	RegKey aRegKey(REG_CDKEY_PATH, HKEY_LOCAL_MACHINE);
	if (! aRegKey.IsOpen())
	{
		WDBG_LH("ClientCDKey::Load Fail open registry key: " << REG_CDKEY_PATH);
		mValidity = Invalid;
		return false;
	}

	// Fetch key from registry for value product
	unsigned char* aBufP = NULL;
	unsigned long  aLen  = 0;
	if (aRegKey.GetValue(mProduct, aBufP, aLen) != RegKey::Ok)
	{
		WDBG_LH("ClientCDKey::Load Fail fetch key value for product=" << mProduct);
		mValidity = Invalid;
		return false;
	}

	// Build buffer and call Init(RawBuffer)
	RawBuffer aKey(aBufP, aLen);
	delete aBufP;
	return Init(aKey);
}
// ClientCDKey::CleanReg
// Cleans registry of CD-Key in WON standard location.
bool
ClientCDKey::CleanReg()
{
	WTRACE("ClientCDKey::CleanReg");
	WDBG_LM("ClientCDKey::CleanReg Clean key from registry.");

	// Open registry key
	RegKey aRegKey(REG_CDKEY_PATH, HKEY_LOCAL_MACHINE, true);
	if (! aRegKey.IsOpen())
	{
		WDBG_LH("ClientCDKey::CleanReg Fail open registry key: " << REG_CDKEY_PATH);
		return false;
	}

	// Delete key from registry
	return aRegKey.DeleteValue(mProduct.c_str());
}
// ClientCDKey::CleanReg
// Cleans registry of CD-Key in WON standard location.
bool
ClientCDKey::CleanReg()
{
	WTRACE("ClientCDKey::CleanReg");
	WDBG_LM("ClientCDKey::CleanReg Clean key from registry.");

	// Open registry key
	RegKey aRegKey(REG_CDKEY_PATH, mStoreInHKeyCurUser?HKEY_CURRENT_USER:HKEY_LOCAL_MACHINE, true);	// WON 3/21/00
	if (! aRegKey.IsOpen())
	{
		WDBG_LH("ClientCDKey::CleanReg Fail open registry key: " << REG_CDKEY_PATH);
		return false;
	}

	// Delete key from registry
	return aRegKey.DeleteValue(mProduct.c_str());
}
// ClientCDKey::Save
// Saves CD-Key to WON standard location in registry.  Entry is saved to registry as
// the enrypted binary form.  Calls AsBinary().
bool
ClientCDKey::Save() const
{
	WTRACE("ClientCDKey::Save");
	WDBG_LM("ClientCDKey::Save Save encrypted key to registry.");

	// Open registry key
	RegKey aRegKey(REG_CDKEY_PATH, HKEY_LOCAL_MACHINE, true);
	if (! aRegKey.IsOpen())
	{
		WDBG_LH("ClientCDKey::Save Fail open registry key: " << REG_CDKEY_PATH);
		return false;
	}

	// Build encrypted binary form if needed and write to registry
	AsBinary();
	return aRegKey.SetValue(mProduct.c_str(), mBinKey.data(), mBinKey.size());
}