khanat-opennel-code/code/ryzom/common/src/game_share/login_registry.cpp
2010-05-06 02:08:41 +02:00

122 lines
3.7 KiB
C++

// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdpch.h"
#include "login_registry.h"
#ifdef NL_OS_WINDOWS
#include <windows.h>
const char *CLoginRegistry::AppRegEntry = "Software\\Nevrax\\RyzomInstall";
static const char *LoginStepKeyHandle = "LoginStep";
static const char *InstallIdKeyHandle = "InstallId";
//===========================================================================================
std::string CLoginRegistry::getProductInstallId()
{
// read value
HKEY hKey;
if (RegOpenKeyEx(HKEY_CURRENT_USER, AppRegEntry, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
const uint keyMaxLength = 1024;
DWORD dwType = 0L;
DWORD dwSize = keyMaxLength;
char buffer[keyMaxLength];
if(RegQueryValueEx(hKey, InstallIdKeyHandle, NULL, &dwType, (unsigned char *) buffer, &dwSize) == ERROR_SUCCESS && dwType == REG_SZ)
{
RegCloseKey(hKey);
return buffer;
}
RegCloseKey(hKey);
}
DWORD dwDisp;
// do not exist, create a new key
if(RegCreateKeyEx(HKEY_CURRENT_USER, AppRegEntry, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp) == ERROR_SUCCESS)
{
srand((uint32)nl_time(0));
uint32 r = rand();
r <<= 16;
r |= rand();
std::string id = NLMISC::toString(r);
if (RegSetValueEx(hKey, InstallIdKeyHandle, 0L, REG_SZ, (const BYTE *) id.c_str(), (id.size())+1) == ERROR_SUCCESS)
{
return id;
}
}
return "";
}
//===========================================================================================
uint CLoginRegistry::getLoginStep()
{
HKEY hKey;
if (RegOpenKeyEx(HKEY_CURRENT_USER, AppRegEntry, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
DWORD loginStep = 0;
DWORD type;
DWORD dataSize = sizeof(DWORD);
RegQueryValueEx (hKey, LoginStepKeyHandle, 0, &type, (LPBYTE) &loginStep, &dataSize);
if (type == REG_DWORD && dataSize == sizeof(DWORD))
{
return (uint) loginStep;
}
}
return 0;
}
//===========================================================================================
void CLoginRegistry::setLoginStep(uint step)
{
HKEY hKey;
DWORD dwDisp;
if(RegCreateKeyEx(HKEY_CURRENT_USER, AppRegEntry, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp) == ERROR_SUCCESS)
{
DWORD loginStep = step;
RegSetValueEx(hKey, LoginStepKeyHandle, 0L, REG_DWORD, (const BYTE *) &loginStep, sizeof(DWORD));
}
}
#else
static uint LoginStep = 0;
//===========================================================================================
std::string CLoginRegistry::getProductInstallId()
{
srand((uint32)nl_time(0));
uint32 r = rand();
r <<= 16;
r |= rand();
return NLMISC::toString(r);
}
//===========================================================================================
uint CLoginRegistry::getLoginStep()
{
return LoginStep;
}
//===========================================================================================
void CLoginRegistry::setLoginStep(uint step)
{
LoginStep = step;
}
#endif