诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

338 lines
8.0 KiB

  1. #include "StdAfx.h"
  2. #include "WHRegKey.h"
  3. #include "WHEncrypt.h"
  4. //////////////////////////////////////////////////////////////////////////////////
  5. //静态变量
  6. TCHAR CWHRegKey::m_szMainKeyName[64] = TEXT(""); //主键名字
  7. //////////////////////////////////////////////////////////////////////////////////
  8. //构造函数
  9. CWHRegKey::CWHRegKey()
  10. {
  11. //键项变量
  12. m_hRegKey = NULL;
  13. //键名变量
  14. if (m_szMainKeyName[0] == 0)
  15. {
  16. CWinApp * pWinApp = AfxGetApp();
  17. lstrcpyn(m_szMainKeyName, pWinApp->m_pszAppName, CountArray(m_szMainKeyName));
  18. }
  19. return;
  20. }
  21. //析构函数
  22. CWHRegKey::~CWHRegKey()
  23. {
  24. //关闭键项
  25. if (m_hRegKey != NULL) CloseRegKey();
  26. return;
  27. }
  28. //设置主键
  29. VOID CWHRegKey::SetMainKeyName(LPCTSTR pszMainKeyName)
  30. {
  31. //设置变量
  32. ASSERT(pszMainKeyName != NULL);
  33. lstrcpyn(m_szMainKeyName, pszMainKeyName, CountArray(m_szMainKeyName));
  34. return;
  35. }
  36. //接触绑定
  37. HKEY CWHRegKey::Detach()
  38. {
  39. //保存变量
  40. HKEY hRegKey = m_hRegKey;
  41. //设置变量
  42. m_hRegKey = NULL;
  43. return hRegKey;
  44. }
  45. //绑定键项
  46. HKEY CWHRegKey::Attach(HKEY hRegKey)
  47. {
  48. //效验参数
  49. ASSERT(hRegKey != NULL);
  50. //设置变量
  51. m_hRegKey = hRegKey;
  52. return m_hRegKey;
  53. }
  54. //关闭键项
  55. bool CWHRegKey::CloseRegKey()
  56. {
  57. //关闭键项
  58. RegCloseKey(m_hRegKey);
  59. //设置变量
  60. m_hRegKey = NULL;
  61. return true;
  62. }
  63. //打开键项
  64. bool CWHRegKey::OpenRegKey(LPCTSTR pszKeyName, bool bCreate)
  65. {
  66. //效验参数
  67. ASSERT(pszKeyName != NULL);
  68. //关闭键项
  69. if (m_hRegKey != NULL) RegCloseKey(m_hRegKey);
  70. //生成键名
  71. TCHAR szFullKeyName[256] = TEXT("");
  72. _sntprintf(szFullKeyName, CountArray(szFullKeyName), TEXT("Software\\%s\\%s\\%s"), szProductKey, m_szMainKeyName, pszKeyName);
  73. //打开键项
  74. m_hRegKey = NULL;
  75. LONG lResult = RegOpenKey(HKEY_CURRENT_USER, szFullKeyName, &m_hRegKey);
  76. if ((lResult != ERROR_SUCCESS) && (bCreate == true)) lResult = RegCreateKey(HKEY_CURRENT_USER, szFullKeyName, &m_hRegKey);
  77. return (lResult == ERROR_SUCCESS);
  78. }
  79. //打开键项
  80. bool CWHRegKey::OpenRegKey(LPCTSTR pszMainKeyName, LPCTSTR pszKeyName, bool bCreate)
  81. {
  82. //效验参数
  83. ASSERT(pszKeyName != NULL);
  84. ASSERT(pszMainKeyName != NULL);
  85. //关闭键项
  86. if (m_hRegKey != NULL) RegCloseKey(m_hRegKey);
  87. //生成键名
  88. TCHAR szFullKeyName[256] = TEXT("");
  89. _sntprintf(szFullKeyName, CountArray(szFullKeyName), TEXT("Software\\%s\\%s\\%s"), szProductKey, pszMainKeyName, pszKeyName);
  90. //打开键项
  91. m_hRegKey = NULL;
  92. LONG lResult = RegOpenKey(HKEY_CURRENT_USER, szFullKeyName, &m_hRegKey);
  93. if ((lResult != ERROR_SUCCESS) && (bCreate == true)) lResult = RegCreateKey(HKEY_CURRENT_USER, szFullKeyName, &m_hRegKey);
  94. return (lResult == ERROR_SUCCESS);
  95. }
  96. //打开键项
  97. HKEY CWHRegKey::OpenItemKey(LPCTSTR pszSubKeyName)
  98. {
  99. //效验参数
  100. ASSERT(m_hRegKey != NULL);
  101. ASSERT(pszSubKeyName != NULL);
  102. //打开键项
  103. HKEY hRegKey = NULL;
  104. RegOpenKey(m_hRegKey, pszSubKeyName, &hRegKey);
  105. return hRegKey;
  106. }
  107. //创建键项
  108. HKEY CWHRegKey::CreateItemKey(LPCTSTR pszSubKeyName)
  109. {
  110. //效验参数
  111. ASSERT(m_hRegKey != NULL);
  112. ASSERT(pszSubKeyName != NULL);
  113. //创建键项
  114. HKEY hRegKey = NULL;
  115. RegCreateKey(m_hRegKey, pszSubKeyName, &hRegKey);
  116. return hRegKey;
  117. }
  118. //枚举键项
  119. bool CWHRegKey::EnumItemString(DWORD dwIndex, LPTSTR pszString, DWORD dwSize)
  120. {
  121. //效验参数
  122. ASSERT(m_hRegKey != NULL);
  123. //设置变量
  124. pszString[0] = 0;
  125. //枚举键项
  126. LONG lResult = RegEnumKey(m_hRegKey, dwIndex, pszString, dwSize);
  127. return (lResult == ERROR_SUCCESS);
  128. }
  129. //写入数值
  130. bool CWHRegKey::WriteValue(LPCTSTR pszName, DWORD dwValue)
  131. {
  132. //效验参数
  133. ASSERT(m_hRegKey != NULL);
  134. //写入数值
  135. LONG lResult = RegSetValueEx(m_hRegKey, pszName, 0, REG_DWORD, (LPBYTE)(&dwValue), sizeof(DWORD));
  136. return (lResult == ERROR_SUCCESS);
  137. }
  138. //写入字符
  139. bool CWHRegKey::WriteString(LPCTSTR pszName, LPCTSTR pszString)
  140. {
  141. //效验参数
  142. ASSERT(m_hRegKey != NULL);
  143. //写入数值
  144. DWORD dwDataSize = CountStringBuffer(pszString);
  145. LONG lResult = RegSetValueEx(m_hRegKey, pszName, 0, REG_SZ, (LPBYTE)pszString, dwDataSize);
  146. return (lResult == ERROR_SUCCESS);
  147. }
  148. //写入字符
  149. bool CWHRegKey::WriteEncryptString(LPCTSTR pszName, LPCTSTR pszString)
  150. {
  151. //加密数据
  152. TCHAR szRegString[MAX_ENCRYPT_LEN + 1] = TEXT("");
  153. CWHEncrypt::XorEncrypt(pszString, szRegString, CountArray(szRegString));
  154. //写入字符
  155. return WriteString(pszName, szRegString);
  156. }
  157. //写入数据
  158. bool CWHRegKey::WriteBinary(LPCTSTR pszName, const VOID * pData, DWORD dwSize)
  159. {
  160. //效验参数
  161. ASSERT(m_hRegKey != NULL);
  162. //写入数值
  163. LONG lResult = RegSetValueEx(m_hRegKey, pszName, 0, REG_BINARY, (LPBYTE)(pData), dwSize);
  164. return (lResult == ERROR_SUCCESS);
  165. }
  166. //读取数值
  167. DWORD CWHRegKey::GetValue(LPCTSTR pszName, DWORD dwDefValue)
  168. {
  169. //效验参数
  170. ASSERT(m_hRegKey != NULL);
  171. //读取数值
  172. DWORD dwType = REG_NONE, dwResultSize = sizeof(DWORD), dwValue = 0;
  173. LONG lResult = RegQueryValueEx(m_hRegKey, pszName, 0, &dwType, (BYTE *)(&dwValue), &dwResultSize);
  174. if ((lResult != ERROR_SUCCESS) || (dwType != REG_DWORD)) return dwDefValue;
  175. return dwValue;
  176. }
  177. //读取数据
  178. DWORD CWHRegKey::GetBinary(LPCTSTR pszName, VOID * pData, DWORD dwBufferSize)
  179. {
  180. //效验参数
  181. ASSERT(pData != NULL);
  182. ASSERT(m_hRegKey != NULL);
  183. //读取数值
  184. DWORD dwType = REG_NONE, dwResultSize = dwBufferSize;
  185. LONG lResult = RegQueryValueEx(m_hRegKey, pszName, 0, &dwType, (BYTE *)(pData), &dwResultSize);
  186. if ((lResult != ERROR_SUCCESS) || (dwType != REG_BINARY)) return 0;
  187. return dwResultSize;
  188. }
  189. //读取字符
  190. DWORD CWHRegKey::GetString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount)
  191. {
  192. //效验参数
  193. ASSERT(pszString != NULL);
  194. ASSERT(m_hRegKey != NULL);
  195. //读取数值
  196. DWORD dwType = REG_NONE, dwResultSize = uMaxCount*sizeof(TCHAR);
  197. LONG lResult = RegQueryValueEx(m_hRegKey, pszName, 0, &dwType, (BYTE *)(pszString), &dwResultSize);
  198. if ((lResult != ERROR_SUCCESS) || (dwType != REG_SZ)) return 0;
  199. return dwResultSize / sizeof(TCHAR);
  200. }
  201. //读取字符
  202. DWORD CWHRegKey::GetEncryptString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount)
  203. {
  204. //效验参数
  205. ASSERT(pszString != NULL);
  206. ASSERT(m_hRegKey != NULL);
  207. //读取字符
  208. TCHAR szRegString[MAX_ENCRYPT_LEN + 1] = TEXT("");
  209. GetString(pszName, szRegString, CountArray(szRegString));
  210. //解密数据
  211. CWHEncrypt::XorCrevasse(szRegString, pszString, uMaxCount);
  212. return lstrlen(pszString);
  213. }
  214. //删除数值
  215. bool CWHRegKey::DeleteValue(LPCTSTR pszName)
  216. {
  217. //效验参数
  218. ASSERT(m_hRegKey != NULL);
  219. //删除数值
  220. LONG lResult = RegDeleteValue(m_hRegKey, pszName);
  221. return (lResult == ERROR_SUCCESS);
  222. }
  223. //删除键项
  224. bool CWHRegKey::RecurseDeleteKey(LPCTSTR pszSubKeyName)
  225. {
  226. //效验参数
  227. ASSERT(m_hRegKey != NULL);
  228. ASSERT(pszSubKeyName != NULL);
  229. //删除键项
  230. LONG lResult = RecurseDeleteKey(m_hRegKey, pszSubKeyName);
  231. return (lResult == ERROR_SUCCESS);
  232. }
  233. //删除键项
  234. LONG CWHRegKey::RecurseDeleteKey(HKEY hParentKey, LPCTSTR pszSubKeyName)
  235. {
  236. //效验参数
  237. ASSERT(hParentKey != NULL);
  238. ASSERT(pszSubKeyName != NULL);
  239. //打开键项
  240. HKEY hSubKey = NULL;
  241. LONG lResult = RegOpenKey(hParentKey, pszSubKeyName, &hSubKey);
  242. if (lResult != ERROR_SUCCESS) return lResult;
  243. //递归删除
  244. TCHAR szKeyName[256];
  245. while (RegEnumKey(hSubKey, 0, szKeyName, sizeof(szKeyName)) == ERROR_SUCCESS)
  246. {
  247. //删除键项
  248. lResult = RecurseDeleteKey(hSubKey, szKeyName);
  249. if (lResult != ERROR_SUCCESS)
  250. {
  251. RegCloseKey(hSubKey);
  252. return lResult;
  253. }
  254. }
  255. //关闭键项
  256. RegCloseKey(hSubKey);
  257. //删除键项
  258. lResult = RegDeleteKey(hParentKey, pszSubKeyName);
  259. return lResult;
  260. }
  261. //////////////////////////////////////////////////////////////////////////////////