📄 reg.cpp
字号:
// Reg.cpp: implementation of the CReg class.
// 1)初始化系统
// 2)管理注册表信息
// 2)初始化子目录结构
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Reg.h"
//#include "ctrl_srvr9.h"
//#include "CEsmtp\CMimeString.H"
//#include "MD5Checksum.H"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CReg::CReg()
{
m_sPassword = "";
m_sEmailEnabled = "FALSE";
m_sEmailServer = "Smtp.21cn.com";
m_sEmailTo = "PeSrvr@21cn.com";
m_sEmailFrom = "PeSrvr@21cn.com";
m_sEmailText = "";
m_sEmailUser = "PeSrvr";
m_sEmailPW = "";
m_sAutoRun = "SERVER"; //SERVER|NORMAL|NO
m_sAutoRunOld = "NO"; //SERVER|NORMAL|NO
m_sAutoHideEnabled = "TRUE";
m_sRegisterID = "";
m_sRegName = "";
m_sCreateDate = "";
m_sServerPort = "";
m_sNote = "";
m_nServerPort = 9771;
m_bRegister = FALSE;
}
CReg::~CReg()
{
}
//删除自动起动
/*
BOOL CReg::DelAutoRun(CString sType)
{
char * strRegName[6] = {"SOFTWARE",
"Microsoft",
"Windows",
"CurrentVersion",
"Run",
"RunServices"};
HKEY hKey = HKEY_LOCAL_MACHINE;
HKEY hSubKey;
int indx = 0;
long lRC;
// char svBuffer[256];
DWORD dwSize = 256;
if(sType == "NO" ) return TRUE;
while(1)
{
lRC = RegOpenKeyEx(hKey, strRegName[indx], 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if(lRC != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
hKey = hSubKey;
indx++;
if (indx >= 5 ) break;
if (indx == 4 && sType == "SERVER") ////服务器方式
indx++;
}
// lRC = RegQueryValueEx(hKey, "PeSrvr", NULL, NULL,
// (BYTE *)svBuffer, &dwSize);
lRC = RegDeleteValue(hKey, "PeSrvr");
RegCloseKey(hKey);
return TRUE;
}
//删除自动起动
BOOL CReg::DelAutoRun()
{
char * strRegName[6] = {"SOFTWARE",
"Microsoft",
"Windows",
"CurrentVersion",
"Run",
"RunServices"};
HKEY hKey = HKEY_LOCAL_MACHINE;
HKEY hSubKey;
int indx = 0;
long lRC;
// DWORD dwSize = 256;
for (int i = 0; i < 2; i++)
{
while(1)
{
lRC = RegOpenKeyEx(hKey, strRegName[indx], 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if(lRC != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
hKey = hSubKey;
indx++;
if (indx >= 5 ) break;
if (indx == 4 && i == 0)
indx++;
}
lRC = RegDeleteValue(hKey, "APeSrvr");
RegCloseKey(hKey);
}
return TRUE;
}
//读注册表
BOOL CReg::ReadReg()
{
HKEY hKey = HKEY_CURRENT_CONFIG;
HKEY hSubKey;
long lRC;
char svBuffer[256];
DWORD dwSize = 255;
CString stmp;
lRC = RegOpenKeyEx(hKey, "APeSrvr", 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if (lRC != ERROR_SUCCESS) return FALSE;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "ServerPort", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
{
m_sServerPort = svBuffer;
m_nServerPort = atoi(svBuffer);
}
dwSize = 255;
if (RegQueryValueEx(hSubKey, "AutoHideEnabled", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sAutoHideEnabled = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "AutoRun", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
{
m_sAutoRun = svBuffer;
m_sAutoRunOld = m_sAutoRun;
}
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailEnabled", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sEmailEnabled = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailFrom", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sEmailFrom = svBuffer;
//解密
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailPW", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
{
stmp = svBuffer;
CMimeString sDecode1( CMimeString::DECODING, CMimeString::BASE64, stmp);
m_sEmailPW = sDecode1;
}
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailServer", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sEmailServer = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailText", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sEmailText = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailTo", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sEmailTo = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "EmailUser", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sEmailUser = svBuffer;
//解密
dwSize = 255;
if (RegQueryValueEx(hSubKey, "Password", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
{
stmp = svBuffer;
CMimeString sDecode1( CMimeString::DECODING, CMimeString::BASE64, stmp);
m_sPassword = sDecode1;
}
//解密
dwSize = 255;
if (RegQueryValueEx(hSubKey, "RegisterID", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
{
stmp = svBuffer;
CMimeString sDecode1( CMimeString::DECODING, CMimeString::BASE64, stmp);
m_sRegisterID = sDecode1;
}
dwSize = 255;
if (RegQueryValueEx(hSubKey, "RegName", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sRegName = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "CreateDate", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sCreateDate = svBuffer;
dwSize = 255;
if (RegQueryValueEx(hSubKey, "", NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
m_sNote = svBuffer;
RegCloseKey(hKey);
return TRUE;
}
//建立自动起动
BOOL CReg::CreAutoRun(CString sType)
{
char * strRegName[6] = {"SOFTWARE",
"Microsoft",
"Windows",
"CurrentVersion",
"Run",
"RunServices"};
HKEY hKey = HKEY_LOCAL_MACHINE;
HKEY hSubKey;
int indx = 0;
long lRC;
// char svBuffer[256];
DWORD dwSize = 256;
CString strFile;
CString strEndFile;
char szFile[256];
//////// 取系统目录/文件名/考贝文件
HMODULE hInstance;
hInstance = (HMODULE) AfxGetInstanceHandle();
GetModuleFileName (hInstance,szFile,255);
strFile = szFile;
GetSystemDirectory (szFile,255);
strEndFile = szFile + CString("\\PeSrvr.exe");
if(sType == "NO" ) return TRUE;
while(1)
{
lRC = RegOpenKeyEx(hKey, strRegName[indx], 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if(lRC != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
hKey = hSubKey;
indx++;
if (indx >= 5 ) break;
//服务器方式
if (indx == 4 && sType == "SERVER")
indx++;
}
if (lRC == ERROR_SUCCESS)
{
CopyFile(strFile,strEndFile,FALSE);
strEndFile += " /A";
lRC = RegSetValueEx (hKey, "APeSrvr", 0, REG_SZ,
(BYTE *)strEndFile.GetBuffer(256),strEndFile.GetLength());
}
RegCloseKey(hKey);
if (lRC == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
//修改密码
BOOL CReg::ModifyPassword(CString sNew)
{
//Install password
HKEY hKey = HKEY_CURRENT_CONFIG;
HKEY hSubKey;
char svBuffer[256];
DWORD dwSize;
CString stmp;
if (RegCreateKey(hKey, "APeSrvr", &hSubKey) == ERROR_SUCCESS)
{
CMimeString sEncode2(CMimeString::ENCODING, CMimeString::BASE64, sNew);
stmp = sEncode2;
if(RegSetValueEx(hSubKey,"Password",0, REG_SZ,
(unsigned char *)(LPCSTR)stmp,
stmp.GetLength()) == ERROR_SUCCESS)
{
RegCloseKey(hSubKey);
m_sPassword = sNew;
return TRUE;
}
else
{
RegCloseKey(hSubKey);
return FALSE;
}
}
return FALSE;
}
//写注册表
BOOL CReg::WriteReg()
{
//Install password
HKEY hKey = HKEY_CURRENT_CONFIG;
HKEY hSubKey;
char svBuffer[256];
DWORD dwSize;
CString stmp;
if (RegCreateKey(hKey, "APeSrvr", &hSubKey) == ERROR_SUCCESS)
{
itoa(m_nServerPort, svBuffer,10);
m_sServerPort = svBuffer;
RegSetValueEx(hSubKey,"ServerPort",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sServerPort,m_sServerPort.GetLength());
RegSetValueEx(hSubKey,"AutoHideEnabled",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sAutoHideEnabled,m_sAutoHideEnabled.GetLength());
RegSetValueEx(hSubKey,"AutoRun",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sAutoRun,m_sAutoRun.GetLength());
RegSetValueEx(hSubKey,"EmailEnabled",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sEmailEnabled,m_sEmailEnabled.GetLength());
RegSetValueEx(hSubKey,"EmailFrom",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sEmailFrom,m_sEmailFrom.GetLength());
//加密
CMimeString sEncode1(CMimeString::ENCODING, CMimeString::BASE64, m_sEmailPW);
stmp = sEncode1;
RegSetValueEx(hSubKey,"EmailPW",0, REG_SZ,
(unsigned char *)(LPCSTR)stmp, stmp.GetLength());
RegSetValueEx(hSubKey,"EmailServer",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sEmailServer,m_sEmailServer.GetLength());
RegSetValueEx(hSubKey,"EmailText",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sEmailText,m_sEmailText.GetLength());
RegSetValueEx(hSubKey,"EmailTo",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sEmailTo,m_sEmailTo.GetLength());
RegSetValueEx(hSubKey,"EmailUser",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sEmailUser,m_sEmailUser.GetLength());
//加密
CMimeString sEncode2(CMimeString::ENCODING, CMimeString::BASE64, m_sPassword);
stmp = sEncode2;
RegSetValueEx(hSubKey,"Password",0, REG_SZ,
(unsigned char *)(LPCSTR)stmp,stmp.GetLength());
//加密
CMimeString sEncode3(CMimeString::ENCODING, CMimeString::BASE64, m_sRegisterID);
stmp = sEncode3;
RegSetValueEx(hSubKey,"RegisterID",0, REG_SZ,
(unsigned char *)(LPCSTR)stmp,stmp.GetLength());
//没有创建时间,主动生成
if (RegQueryValueEx(hSubKey, "CreateDate", NULL, NULL,
(BYTE *)svBuffer, &dwSize) != ERROR_SUCCESS)
{
CTime now = CTime::GetCurrentTime();
m_sCreateDate = now.Format("%Y-%m-%d");
RegSetValueEx(hSubKey,"CreateDate",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sCreateDate,m_sCreateDate.GetLength());
}
//写入说明NOTE
RegSetValueEx(hSubKey,"",0, REG_SZ,
(unsigned char *)(LPCSTR)m_sNote,m_sNote.GetLength());
RegCloseKey(hSubKey);
//写入自动启动
if(m_sAutoRun != m_sAutoRunOld)
{
//if(!DelAutoRun(m_sAutoRunOld)) return false;
DelAutoRun();
if(!CreAutoRun(m_sAutoRun)) return false;
m_sAutoRunOld = m_sAutoRun;
}
return true;
}
return false;
}
//导入系统配置
BOOL CReg::Login()
{
CString strMD, strEn;
if (!ReadReg()) return FALSE;
CMimeString sEncode1( CMimeString::ENCODING, CMimeString::BASE64, m_sRegName);
strEn = sEncode1;
strMD = CMD5Checksum::GetMD5((BYTE*)(const char*)strEn, strEn.GetLength());
if (strMD == m_sRegisterID)
m_bRegister = true;
else
m_bRegister = false;
return TRUE;
}
//注册
BOOL CReg::Register(CString sName, CString sID)
{
HKEY hKey = HKEY_CURRENT_CONFIG;
HKEY hSubKey;
// char svBuffer[256];
// DWORD dwSize;
long lRC;
CString strMD, strEn, stmp;
if (sName.GetLength() < 5 || sID.GetLength() < 5) return FALSE;
CMimeString sEncode1( CMimeString::ENCODING, CMimeString::BASE64, sName);
strEn = sEncode1;
strMD = CMD5Checksum::GetMD5((BYTE*)(const char*)strEn, strEn.GetLength());
if (strMD != sID) return FALSE;
if (RegCreateKey(hKey, "APeSrvr", &hSubKey) == ERROR_SUCCESS)
{
//加密
CMimeString sEncode3(CMimeString::ENCODING, CMimeString::BASE64, sID);
stmp = sEncode3;
lRC = RegSetValueEx(hSubKey,"RegisterID",0, REG_SZ,
(unsigned char *)(LPCSTR)stmp,stmp.GetLength());
if (lRC != ERROR_SUCCESS)
{
RegCloseKey(hSubKey);
return FALSE;
}
RegSetValueEx(hSubKey,"RegName",0, REG_SZ,
(unsigned char *)(LPCSTR)sName,sName.GetLength());
if (lRC != ERROR_SUCCESS)
{
RegCloseKey(hSubKey);
return FALSE;
}
RegCloseKey(hSubKey);
m_sRegisterID = sID;
m_sRegName = sName;
m_bRegister = true;
return TRUE;
}
return FALSE;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -