338 lines
6.9 KiB
C++
338 lines
6.9 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "WHRegKey.h"
|
|||
|
|
#include "WHEncrypt.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
TCHAR CWHRegKey::m_szMainKeyName[64]=TEXT(""); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CWHRegKey::CWHRegKey()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_hRegKey=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_szMainKeyName[0]==0)
|
|||
|
|
{
|
|||
|
|
CWinApp * pWinApp=AfxGetApp();
|
|||
|
|
lstrcpyn(m_szMainKeyName,pWinApp->m_pszAppName,CountArray(m_szMainKeyName));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CWHRegKey::~CWHRegKey()
|
|||
|
|
{
|
|||
|
|
//<2F>رռ<D8B1><D5BC><EFBFBD>
|
|||
|
|
if (m_hRegKey!=NULL) CloseRegKey();
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
VOID CWHRegKey::SetMainKeyName(LPCTSTR pszMainKeyName)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
ASSERT(pszMainKeyName!=NULL);
|
|||
|
|
lstrcpyn(m_szMainKeyName,pszMainKeyName,CountArray(m_szMainKeyName));
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
HKEY CWHRegKey::Detach()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
HKEY hRegKey=m_hRegKey;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_hRegKey=NULL;
|
|||
|
|
|
|||
|
|
return hRegKey;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F3B6A8BC><EFBFBD>
|
|||
|
|
HKEY CWHRegKey::Attach(HKEY hRegKey)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_hRegKey=hRegKey;
|
|||
|
|
|
|||
|
|
return m_hRegKey;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>رռ<D8B1><D5BC><EFBFBD>
|
|||
|
|
bool CWHRegKey::CloseRegKey()
|
|||
|
|
{
|
|||
|
|
//<2F>رռ<D8B1><D5BC><EFBFBD>
|
|||
|
|
RegCloseKey(m_hRegKey);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
m_hRegKey=NULL;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
bool CWHRegKey::OpenRegKey(LPCTSTR pszKeyName, bool bCreate)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pszKeyName!=NULL);
|
|||
|
|
|
|||
|
|
//<2F>رռ<D8B1><D5BC><EFBFBD>
|
|||
|
|
if (m_hRegKey!=NULL) RegCloseKey(m_hRegKey);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
|
|||
|
|
TCHAR szFullKeyName[256]=TEXT("");
|
|||
|
|
_sntprintf_s(szFullKeyName,CountArray(szFullKeyName),TEXT("Software\\%s\\%s\\%s"),szProductKey,m_szMainKeyName,pszKeyName);
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
m_hRegKey=NULL;
|
|||
|
|
LONG lResult=RegOpenKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);
|
|||
|
|
if ((lResult!=ERROR_SUCCESS)&&(bCreate==true)) lResult=RegCreateKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
bool CWHRegKey::OpenRegKey(LPCTSTR pszMainKeyName, LPCTSTR pszKeyName, bool bCreate)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pszKeyName!=NULL);
|
|||
|
|
ASSERT(pszMainKeyName!=NULL);
|
|||
|
|
|
|||
|
|
//<2F>رռ<D8B1><D5BC><EFBFBD>
|
|||
|
|
if (m_hRegKey!=NULL) RegCloseKey(m_hRegKey);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
|
|||
|
|
TCHAR szFullKeyName[256]=TEXT("");
|
|||
|
|
_sntprintf_s(szFullKeyName,CountArray(szFullKeyName),TEXT("Software\\%s\\%s\\%s"),szProductKey,pszMainKeyName,pszKeyName);
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
m_hRegKey=NULL;
|
|||
|
|
LONG lResult=RegOpenKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);
|
|||
|
|
if ((lResult!=ERROR_SUCCESS)&&(bCreate==true)) lResult=RegCreateKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
HKEY CWHRegKey::OpenItemKey(LPCTSTR pszSubKeyName)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
ASSERT(pszSubKeyName!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
HKEY hRegKey=NULL;
|
|||
|
|
RegOpenKey(m_hRegKey,pszSubKeyName,&hRegKey);
|
|||
|
|
|
|||
|
|
return hRegKey;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
HKEY CWHRegKey::CreateItemKey(LPCTSTR pszSubKeyName)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
ASSERT(pszSubKeyName!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
HKEY hRegKey=NULL;
|
|||
|
|
RegCreateKey(m_hRegKey,pszSubKeyName,&hRegKey);
|
|||
|
|
|
|||
|
|
return hRegKey;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ö<>ټ<EFBFBD><D9BC><EFBFBD>
|
|||
|
|
bool CWHRegKey::EnumItemString(DWORD dwIndex, LPTSTR pszString, DWORD dwSize)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
pszString[0]=0;
|
|||
|
|
|
|||
|
|
//ö<>ټ<EFBFBD><D9BC><EFBFBD>
|
|||
|
|
LONG lResult=RegEnumKey(m_hRegKey,dwIndex,pszString,dwSize);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD>ֵ
|
|||
|
|
bool CWHRegKey::WriteValue(LPCTSTR pszName, DWORD dwValue)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD>ֵ
|
|||
|
|
LONG lResult=RegSetValueEx(m_hRegKey,pszName,0,REG_DWORD,(LPBYTE)(&dwValue),sizeof(DWORD));
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD>ַ<EFBFBD>
|
|||
|
|
bool CWHRegKey::WriteString(LPCTSTR pszName, LPCTSTR pszString)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD>ֵ
|
|||
|
|
DWORD dwDataSize=CountStringBuffer(pszString);
|
|||
|
|
LONG lResult=RegSetValueEx(m_hRegKey,pszName,0,REG_SZ,(LPBYTE)pszString,dwDataSize);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD>ַ<EFBFBD>
|
|||
|
|
bool CWHRegKey::WriteEncryptString(LPCTSTR pszName, LPCTSTR pszString)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
TCHAR szRegString[MAX_ENCRYPT_LEN+1]=TEXT("");
|
|||
|
|
CWHEncrypt::XorEncrypt(pszString,szRegString,CountArray(szRegString));
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD>ַ<EFBFBD>
|
|||
|
|
return WriteString(pszName,szRegString);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CWHRegKey::WriteBinary(LPCTSTR pszName, const VOID * pData, DWORD dwSize)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD>ֵ
|
|||
|
|
LONG lResult=RegSetValueEx(m_hRegKey,pszName,0,REG_BINARY,(LPBYTE)(pData),dwSize);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|||
|
|
DWORD CWHRegKey::GetValue(LPCTSTR pszName, DWORD dwDefValue)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|||
|
|
DWORD dwType=REG_NONE,dwResultSize=sizeof(DWORD),dwValue=0;
|
|||
|
|
LONG lResult=RegQueryValueEx(m_hRegKey,pszName,0,&dwType,(BYTE *)(&dwValue),&dwResultSize);
|
|||
|
|
if ((lResult!=ERROR_SUCCESS)||(dwType!=REG_DWORD)) return dwDefValue;
|
|||
|
|
|
|||
|
|
return dwValue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
DWORD CWHRegKey::GetBinary(LPCTSTR pszName, VOID * pData, DWORD dwBufferSize)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pData!=NULL);
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|||
|
|
DWORD dwType=REG_NONE,dwResultSize=dwBufferSize;
|
|||
|
|
LONG lResult=RegQueryValueEx(m_hRegKey,pszName,0,&dwType,(BYTE *)(pData),&dwResultSize);
|
|||
|
|
if ((lResult!=ERROR_SUCCESS)||(dwType!=REG_BINARY)) return 0;
|
|||
|
|
|
|||
|
|
return dwResultSize;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD>ַ<EFBFBD>
|
|||
|
|
DWORD CWHRegKey::GetString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pszString!=NULL);
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|||
|
|
DWORD dwType=REG_NONE,dwResultSize=uMaxCount*sizeof(TCHAR);
|
|||
|
|
LONG lResult=RegQueryValueEx(m_hRegKey,pszName,0,&dwType,(BYTE *)(pszString),&dwResultSize);
|
|||
|
|
if ((lResult!=ERROR_SUCCESS)||(dwType!=REG_SZ)) return 0;
|
|||
|
|
|
|||
|
|
return dwResultSize/sizeof(TCHAR);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD>ַ<EFBFBD>
|
|||
|
|
DWORD CWHRegKey::GetEncryptString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pszString!=NULL);
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD>ַ<EFBFBD>
|
|||
|
|
TCHAR szRegString[MAX_ENCRYPT_LEN+1]=TEXT("");
|
|||
|
|
GetString(pszName,szRegString,CountArray(szRegString));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CWHEncrypt::XorCrevasse(szRegString,pszString,uMaxCount);
|
|||
|
|
|
|||
|
|
return lstrlen(pszString);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD>ֵ
|
|||
|
|
bool CWHRegKey::DeleteValue(LPCTSTR pszName)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD>ֵ
|
|||
|
|
LONG lResult=RegDeleteValue(m_hRegKey,pszName);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CWHRegKey::RecurseDeleteKey(LPCTSTR pszSubKeyName)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(m_hRegKey!=NULL);
|
|||
|
|
ASSERT(pszSubKeyName!=NULL);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LONG lResult=RecurseDeleteKey(m_hRegKey,pszSubKeyName);
|
|||
|
|
|
|||
|
|
return (lResult==ERROR_SUCCESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LONG CWHRegKey::RecurseDeleteKey(HKEY hParentKey, LPCTSTR pszSubKeyName)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(hParentKey!=NULL);
|
|||
|
|
ASSERT(pszSubKeyName!=NULL);
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><F2BFAABC><EFBFBD>
|
|||
|
|
HKEY hSubKey=NULL;
|
|||
|
|
LONG lResult=RegOpenKey(hParentKey,pszSubKeyName,&hSubKey);
|
|||
|
|
if (lResult!=ERROR_SUCCESS) return lResult;
|
|||
|
|
|
|||
|
|
//<2F>ݹ<EFBFBD>ɾ<EFBFBD><C9BE>
|
|||
|
|
TCHAR szKeyName[256];
|
|||
|
|
while (RegEnumKey(hSubKey,0,szKeyName,sizeof(szKeyName))==ERROR_SUCCESS)
|
|||
|
|
{
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
lResult=RecurseDeleteKey(hSubKey,szKeyName);
|
|||
|
|
if (lResult!=ERROR_SUCCESS)
|
|||
|
|
{
|
|||
|
|
RegCloseKey(hSubKey);
|
|||
|
|
return lResult;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>رռ<D8B1><D5BC><EFBFBD>
|
|||
|
|
RegCloseKey(hSubKey);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
lResult=RegDeleteKey(hParentKey,pszSubKeyName);
|
|||
|
|
|
|||
|
|
return lResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|