ExtRegistry.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:16k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_REGISTRY_H)
  22. #define __EXT_REGISTRY_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. class __PROF_UIS_API CExtRegistry
  27. {
  28. public:
  29.     HKEY hKey;
  30. CExtRegistry()
  31. {
  32. Open();
  33. }
  34. virtual ~CExtRegistry()
  35. {
  36. Close();
  37. }
  38. static HKEY RegOpen(
  39. HKEY hKey,
  40. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  41. DWORD dwRights
  42. )
  43. {
  44. HKEY hSubKey;
  45. if( RegOpenKeyEx(
  46. hKey,
  47. pszSubKey,
  48. 0,
  49. dwRights,
  50. &hSubKey
  51. ) == ERROR_SUCCESS
  52. )
  53. {
  54. return hSubKey;
  55. }
  56. return NULL;
  57. }
  58. static void RegClose(HKEY hKey)
  59. {
  60. if( hKey )
  61. RegCloseKey( hKey );
  62. }
  63. static HKEY RegConnect(
  64. HKEY hKey, 
  65. __EXT_MFC_SAFE_LPCTSTR pszRemote
  66. )
  67. {
  68. HKEY hSubKey;
  69. if( RegConnectRegistry(
  70. pszRemote,
  71. hKey,
  72. &hSubKey
  73. ) == ERROR_SUCCESS
  74. )
  75. {
  76. return hSubKey;
  77. }
  78. return NULL;
  79. }
  80. static HKEY RegCreate(
  81. HKEY hKey,
  82. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  83. DWORD dwRights
  84. )
  85. {
  86. HKEY hSubKey;
  87. DWORD dwDisposition;
  88. if( RegCreateKeyEx(
  89. hKey,
  90. pszSubKey,
  91. 0,
  92. LPTSTR(NULL),
  93. REG_OPTION_NON_VOLATILE,
  94. dwRights,
  95. NULL,
  96. &hSubKey,
  97. &dwDisposition
  98. ) == ERROR_SUCCESS
  99. )
  100. {
  101. return hSubKey;
  102. }
  103. return NULL;
  104. }
  105. HKEY Connect(
  106. HKEY hNewKey,
  107. __EXT_MFC_SAFE_LPCTSTR pszRemote
  108. )
  109. {
  110. return
  111. hKey = RegConnect(hNewKey, pszRemote);
  112. }
  113. HKEY Create(
  114. HKEY hNewKey,
  115. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  116. DWORD dwRights
  117. )
  118. {
  119. return
  120. hKey = RegCreate(hNewKey, pszSubKey, dwRights);
  121. }
  122. HKEY Open(
  123. HKEY hNewKey = NULL
  124. )
  125. {
  126. return hKey = hNewKey;
  127. }
  128. HKEY Open(
  129. HKEY hNewKey,
  130. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  131. DWORD dwRights
  132. )
  133. {
  134. return hKey =
  135. RegOpen(hNewKey, pszSubKey, dwRights);
  136. }
  137. void Close()
  138. {
  139. if( hKey != NULL )
  140. {
  141. RegClose(hKey);
  142. hKey = NULL;
  143. }
  144. }
  145. static bool RegLoadString(
  146. HKEY hKey,
  147. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  148. __EXT_MFC_SAFE_LPCTSTR pszValName,
  149. __EXT_MFC_SAFE_LPCTSTR pszString, DWORD dwLength
  150. )
  151. {
  152. ASSERT( LPCTSTR(pszString) != NULL );
  153. dwLength *= sizeof(TCHAR);
  154. HKEY hSubKey = pszSubKey ? RegOpen (hKey, pszSubKey, KEY_READ) : hKey;
  155. if( hSubKey )
  156. {
  157. DWORD dwType, dwRealLength;
  158. if( RegQueryValueEx(
  159. hSubKey, pszValName, 0, &dwType,
  160. NULL, &dwRealLength
  161. ) == ERROR_SUCCESS
  162. )
  163. {
  164. if( (dwType == REG_SZ
  165. || dwType == REG_EXPAND_SZ
  166. || dwType == REG_LINK
  167. || dwType == REG_MULTI_SZ
  168. )
  169. &&
  170. dwLength >= dwRealLength
  171. )
  172. {
  173. if( RegQueryValueEx(
  174. hSubKey, LPCTSTR(pszValName), 0, NULL,
  175. (LPBYTE) (LPCTSTR) pszString, &dwRealLength
  176. ) == ERROR_SUCCESS
  177. )
  178. {
  179. if( hSubKey != hKey )
  180. RegClose( hSubKey );
  181. return true;
  182. }
  183. }
  184. }
  185. if( hSubKey != hKey )
  186. RegClose( hSubKey );
  187. }
  188. return false;
  189. }
  190. static bool RegLoadNewString(
  191. HKEY hKey,
  192. __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
  193. __EXT_MFC_SAFE_LPCTSTR *pszString, DWORD *pdwLength
  194. )
  195. {
  196. ASSERT(pszString);
  197. HKEY hSubKey =
  198. pszSubKey ?
  199. RegOpen(hKey, pszSubKey, KEY_READ) : hKey;
  200. if( hSubKey )
  201. {
  202. DWORD dwType, dwRealLength;
  203. if (RegQueryValueEx( hSubKey, LPCTSTR(pszValName), 0, &dwType, NULL, &dwRealLength) == ERROR_SUCCESS)
  204. {
  205. if( dwType == REG_SZ
  206. || dwType == REG_EXPAND_SZ
  207. || dwType == REG_LINK
  208. || dwType == REG_MULTI_SZ
  209. )
  210. {
  211. __EXT_MFC_SAFE_LPCTSTR pszNewString = (LPCTSTR)
  212. ::malloc( dwRealLength*sizeof(TCHAR) );
  213. if( pszNewString )
  214. {
  215. if( RegQueryValueEx(
  216. hSubKey, LPCTSTR(pszValName),
  217. 0, NULL,
  218. (LPBYTE) (LPCTSTR) pszNewString,
  219. &dwRealLength
  220. ) == ERROR_SUCCESS
  221. )
  222. {
  223. *pszString = pszNewString;
  224. if( pdwLength )
  225. {
  226. *pdwLength = dwRealLength;
  227. }
  228. if( hSubKey != hKey )
  229. RegClose( hSubKey );
  230. dwRealLength /= sizeof(TCHAR);
  231. return true;
  232. }
  233. ::free( (LPVOID) (LPCTSTR) pszNewString );
  234. }
  235. }
  236. }
  237. if( hSubKey != hKey )
  238. RegClose( hSubKey );
  239. }
  240. return false;
  241. }
  242. static bool RegSaveString(
  243. HKEY hKey,
  244. __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
  245. __EXT_MFC_SAFE_LPCTSTR pszString
  246. )
  247. {
  248. HKEY hSubKey =
  249. pszSubKey ?
  250. RegCreate(hKey, pszSubKey, KEY_WRITE) : hKey;
  251. if( hSubKey )
  252. {
  253. if( RegSetValueEx(
  254. hSubKey,
  255. pszValName, 0, REG_SZ,
  256. (LPBYTE) (LPCTSTR) pszString,
  257. (int(_tcslen(pszString)) + 1)*sizeof(TCHAR)
  258. ) == ERROR_SUCCESS
  259. )
  260. {
  261. if( hSubKey != hKey )
  262. RegClose( hSubKey );
  263. return true;
  264. }
  265. if( hSubKey != hKey )
  266. RegClose( hSubKey );
  267. }
  268. return false;
  269. }
  270. bool LoadNewString(__EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR *pszString, DWORD *pdwLength)
  271. {
  272. return RegLoadNewString(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), pszString, pdwLength);
  273. }
  274. bool LoadNewString(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR *pszString, DWORD *pdwLength)
  275. {
  276. return RegLoadNewString(hKey, pszSubKey, pszValName, pszString, pdwLength);
  277. }
  278. bool LoadString(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString, DWORD dwLength)
  279. {
  280. return RegLoadString(hKey, pszSubKey, pszValName, pszString, dwLength);
  281. }
  282. bool LoadString(__EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString, DWORD dwLength)
  283. {
  284. return RegLoadString(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), pszString, dwLength);
  285. }
  286. bool SaveString(__EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString)
  287. {
  288. return RegSaveString(hKey, NULL, pszValName, pszString);
  289. }
  290. bool SaveString(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString)
  291. {
  292. return RegSaveString(hKey, pszSubKey, pszValName, pszString);
  293. }
  294. static bool RegLoadNumber(
  295. HKEY hKey,
  296. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  297. __EXT_MFC_SAFE_LPCTSTR pszValName,
  298. DWORD *pdwNumber
  299. )
  300. {
  301. ASSERT(pdwNumber);
  302. HKEY hSubKey =
  303. pszSubKey ?
  304. RegOpen(hKey, pszSubKey, KEY_READ) : hKey;
  305. if (hSubKey)
  306. {
  307. DWORD dwType, dwSize;
  308. if( RegQueryValueEx(
  309. hSubKey, LPCTSTR(pszValName), 0, &dwType,
  310. NULL, &dwSize
  311. ) == ERROR_SUCCESS
  312. )
  313. {
  314. if( dwType == REG_DWORD )
  315. {
  316. ASSERT(dwSize == sizeof (DWORD));
  317. if( RegQueryValueEx(
  318. hSubKey, LPCTSTR(pszValName), 0, NULL,
  319. (LPBYTE) pdwNumber, &dwSize
  320. ) == ERROR_SUCCESS
  321. )
  322. {
  323. ASSERT(dwSize == sizeof (DWORD));
  324. if( hSubKey != hKey )
  325. RegClose( hSubKey );
  326. return true;
  327. }
  328. }
  329. }
  330. if( hSubKey != hKey )
  331. RegClose( hSubKey );
  332. }
  333. return false;
  334. }
  335. static bool RegSaveNumber(
  336. HKEY hKey,
  337. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  338. __EXT_MFC_SAFE_LPCTSTR pszValName,
  339. DWORD dwNumber
  340. )
  341. {
  342. HKEY hSubKey =
  343. pszSubKey ?
  344. RegCreate(hKey, pszSubKey, KEY_WRITE) : hKey;
  345. if( hSubKey )
  346. {
  347. if( RegSetValueEx(
  348. hSubKey, pszValName, 0, REG_DWORD,
  349. (LPBYTE) &dwNumber, sizeof (DWORD)
  350. ) == ERROR_SUCCESS
  351. )
  352. {
  353. if( hSubKey != hKey )
  354. RegClose( hSubKey );
  355. return true;
  356. }
  357. if( hSubKey != hKey )
  358. RegClose( hSubKey );
  359. }
  360. return false;
  361. }
  362. bool LoadNumber(__EXT_MFC_SAFE_LPCTSTR pszValName, DWORD *pdwNumber)
  363. {
  364. return RegLoadNumber(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), pdwNumber);
  365. }
  366. bool LoadNumber(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, DWORD *pdwNumber)
  367. {
  368. return RegLoadNumber(hKey, LPCTSTR(pszSubKey), LPCTSTR(pszValName), pdwNumber);
  369. }
  370. bool SaveNumber(__EXT_MFC_SAFE_LPCTSTR pszValName, DWORD dwNumber)
  371. {
  372. return RegSaveNumber(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), dwNumber);
  373. }
  374. bool SaveNumber(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, DWORD dwNumber)
  375. {
  376. return RegSaveNumber(hKey, LPCTSTR(pszSubKey), LPCTSTR(pszValName), dwNumber);
  377. }
  378. static bool RegLoadBinary(
  379. HKEY hKey,
  380. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  381. __EXT_MFC_SAFE_LPCTSTR pszValName,
  382. LPBYTE pbyteData,
  383. DWORD dwSize
  384. )
  385. {
  386. ASSERT(pbyteData);
  387. HKEY hSubKey =
  388. pszSubKey ?
  389. RegOpen(hKey, LPCTSTR(pszSubKey), KEY_READ) : hKey;
  390. if( hSubKey )
  391. {
  392. DWORD dwType, dwRealSize;
  393. if( RegQueryValueEx(
  394. hSubKey, LPCTSTR(pszValName), 0, &dwType, NULL,
  395. &dwRealSize
  396. ) == ERROR_SUCCESS
  397. )
  398. {
  399. if( dwType == REG_BINARY
  400. && dwSize >= dwRealSize
  401. )
  402. {
  403. if( RegQueryValueEx(
  404. hSubKey, LPCTSTR(pszValName), 0, NULL,
  405. pbyteData, &dwRealSize
  406. ) == ERROR_SUCCESS
  407. )
  408. {
  409. if( hSubKey != hKey )
  410. RegClose( hSubKey );
  411. return true;
  412. }
  413. }
  414. }
  415. if( hSubKey != hKey )
  416. RegClose( hSubKey );
  417. }
  418. return false;
  419. }
  420. static bool RegLoadNewBinary(
  421. HKEY hKey,
  422. __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
  423. LPBYTE *pbyteData,
  424. DWORD *pdwSize
  425. )
  426. {
  427. ASSERT(pbyteData);
  428. HKEY hSubKey =
  429. pszSubKey ?
  430. RegOpen(hKey, pszSubKey, KEY_READ) : hKey;
  431. if( hSubKey )
  432. {
  433. DWORD dwType, dwRealSize;
  434. if( RegQueryValueEx(
  435. hSubKey, LPCTSTR(pszValName),
  436. 0, &dwType, NULL,
  437. &dwRealSize
  438. ) == ERROR_SUCCESS
  439. )
  440. {
  441. if( dwType == REG_BINARY )
  442. {
  443. LPBYTE pbyteNewData = (LPBYTE)
  444. ::malloc( dwRealSize*sizeof(TCHAR) );
  445. if( pbyteNewData )
  446. {
  447. if( RegQueryValueEx(
  448. hSubKey, LPCTSTR(pszValName), 0, NULL,
  449. pbyteNewData, &dwRealSize
  450. ) == ERROR_SUCCESS
  451. )
  452. {
  453. *pbyteData = pbyteNewData;
  454. *pdwSize = dwRealSize;
  455. if( hSubKey != hKey )
  456. RegClose( hSubKey );
  457. return true;
  458. }
  459. ::free( pbyteNewData );
  460. }
  461. }
  462. }
  463. if( hSubKey != hKey )
  464. RegClose( hSubKey );
  465. }
  466. return false;
  467. }
  468. static bool RegSaveBinary(
  469. HKEY hKey,
  470. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  471. __EXT_MFC_SAFE_LPCTSTR pszValName,
  472. const LPBYTE pbyteData,
  473. DWORD dwSize
  474. )
  475. {
  476. HKEY hSubKey =
  477. pszSubKey ?
  478. RegCreate(hKey, pszSubKey, KEY_WRITE) : hKey;
  479. if( hSubKey )
  480. {
  481. if( RegSetValueEx(
  482. hSubKey, pszValName, 0, REG_BINARY,
  483. pbyteData, dwSize
  484. ) == ERROR_SUCCESS
  485. )
  486. {
  487. if( hSubKey != hKey )
  488. RegClose( hSubKey );
  489. return true;
  490. }
  491. if( hSubKey != hKey )
  492. RegClose( hSubKey );
  493. }
  494. return false;
  495. }
  496. bool LoadBinary(
  497. __EXT_MFC_SAFE_LPCTSTR pszValName,
  498. LPBYTE pbyteData,
  499. DWORD dwSize
  500. )
  501. {
  502. return
  503. RegLoadBinary(
  504. hKey,
  505. LPCTSTR(NULL),
  506. LPCTSTR(pszValName),
  507. pbyteData,
  508. dwSize
  509. );
  510. }
  511. bool LoadBinary(
  512. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  513. __EXT_MFC_SAFE_LPCTSTR pszValName,
  514. LPBYTE pbyteData,
  515. DWORD dwSize
  516. )
  517. {
  518. return
  519. RegLoadBinary(
  520. hKey,
  521. pszSubKey,
  522. pszValName,
  523. pbyteData,
  524. dwSize
  525. );
  526. }
  527. bool LoadNewBinary(
  528. __EXT_MFC_SAFE_LPCTSTR pszValName,
  529. LPBYTE *pbyteData,
  530. DWORD *pdwSize
  531. )
  532. {
  533. return
  534. RegLoadNewBinary(
  535. hKey,
  536. LPCTSTR(NULL),
  537. LPCTSTR(pszValName),
  538. pbyteData,
  539. pdwSize
  540. );
  541. }
  542. bool LoadNewBinary(
  543. __EXT_MFC_SAFE_LPCTSTR pszSubKey,
  544. __EXT_MFC_SAFE_LPCTSTR pszValName,
  545. LPBYTE *pbyteData,
  546. DWORD *pdwSize
  547. )
  548. {
  549. return
  550. RegLoadNewBinary(
  551. hKey,
  552. pszSubKey,
  553. pszValName,
  554. pbyteData,
  555. pdwSize
  556. );
  557. }
  558. bool SaveBinary(
  559. __EXT_MFC_SAFE_LPCTSTR pszValName,
  560. const LPBYTE pbyteData,
  561. DWORD dwSize
  562. )
  563. {
  564. return
  565. RegSaveBinary(
  566. hKey, LPCTSTR(NULL), LPCTSTR(pszValName),
  567. pbyteData, dwSize
  568. );
  569. }
  570. bool SaveBinary(
  571. __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
  572. const LPBYTE pbyteData, DWORD dwSize
  573. )
  574. {
  575. return
  576. RegSaveBinary(
  577. hKey, pszSubKey, pszValName,
  578. pbyteData, dwSize
  579. );
  580. }
  581. static bool RegDeleteKey(
  582. HKEY hKey, __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName
  583. )
  584. {
  585. HKEY hSubKey =
  586. pszSubKey ?
  587. RegOpen(hKey, pszSubKey, KEY_READ | KEY_WRITE)
  588. hKey;
  589. if( hSubKey )
  590. {
  591. if( pszValName )
  592. {
  593. if( RegDeleteValue(
  594. hSubKey,
  595. pszValName
  596. ) == ERROR_SUCCESS
  597. )
  598. {
  599. if( hSubKey != hKey )
  600. RegClose( hSubKey );
  601. return true;
  602. }
  603. }
  604. else
  605. {
  606. if( RegDeleteSubKeys(hSubKey) )
  607. {
  608. if( hSubKey != hKey )
  609. RegClose (hSubKey);
  610. return
  611. ::RegDeleteKey(
  612. hKey,
  613. pszSubKey
  614. ) == ERROR_SUCCESS;
  615. }
  616. }
  617. if( hSubKey != hKey )
  618. RegClose( hSubKey );
  619. }
  620. return false;
  621. }
  622. static bool RegDeleteSubKeys(HKEY hKey)
  623. {
  624. DWORD dwSubKeyCnt, dwMaxSubKey;
  625. if( RegQueryInfoKey(
  626. hKey,
  627. NULL,
  628. NULL,
  629. 0,
  630. &dwSubKeyCnt,
  631. &dwMaxSubKey,
  632. NULL,
  633. NULL,
  634. NULL,
  635. NULL,
  636. NULL,
  637. NULL
  638. ) == ERROR_SUCCESS
  639. )
  640. {
  641. if( dwSubKeyCnt )
  642. {
  643. dwMaxSubKey += 1;
  644. __EXT_MFC_SAFE_LPTSTR pszKeyName = (LPTSTR)
  645. ::malloc( dwMaxSubKey*sizeof(TCHAR) );
  646. if( LPCTSTR(pszKeyName) != NULL )
  647. {
  648. do
  649. {
  650. if( RegEnumKey(
  651. hKey,
  652. --dwSubKeyCnt,
  653. LPTSTR(pszKeyName),
  654. dwMaxSubKey
  655. ) == ERROR_SUCCESS
  656. )
  657. {
  658. HKEY hSubKey =
  659. RegOpen(
  660. hKey,
  661. (LPCTSTR) pszKeyName,
  662. KEY_READ | KEY_WRITE
  663. );
  664. if( hSubKey )
  665. {
  666. if( RegDeleteSubKeys(hSubKey) )
  667. {
  668. RegClose( hSubKey );
  669. if( ::RegDeleteKey(
  670. hKey,
  671. LPCTSTR(pszKeyName)
  672. ) != ERROR_SUCCESS
  673. )
  674. {
  675. ::free( (LPVOID) (LPCTSTR) pszKeyName );
  676. return false;
  677. }
  678. }
  679. else
  680. {
  681. RegClose( hSubKey );
  682. ::free( (LPVOID) (LPCTSTR) pszKeyName );
  683. return false;
  684. }
  685. }
  686. else
  687. {
  688. ::free( (LPVOID) (LPCTSTR) pszKeyName );
  689. return false;
  690. }
  691. }
  692. else
  693. {
  694. ::free( (LPVOID) (LPCTSTR) pszKeyName );
  695. return false;
  696. }
  697. }
  698. while( dwSubKeyCnt );
  699. ::free( (LPVOID) (LPCTSTR) pszKeyName );
  700. }
  701. else
  702. {
  703. return false;
  704. }
  705. }
  706. return true;
  707. }
  708. return false;
  709. }
  710. bool DeleteKey(__EXT_MFC_SAFE_LPCTSTR pszValName)
  711. {
  712. return RegDeleteKey(hKey, LPCTSTR(NULL), LPCTSTR(pszValName));
  713. }
  714. bool DeleteKey(
  715. __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName)
  716. {
  717. return RegDeleteKey(hKey, pszSubKey, pszValName);
  718. }
  719. bool DeleteSubKeys()
  720. {
  721. return RegDeleteSubKeys( hKey );
  722. }
  723. }; // class CExtRegistry
  724. #endif // __EXT_REGISTRY_H