Leaked source code of windows server 2003
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.

879 lines
17 KiB

  1. ////////////////////////////////////////////////////////////////////////
  2. //
  3. // Module : Static/NshCache.cpp
  4. //
  5. // Purpose : Cache implementation
  6. //
  7. //
  8. // Developers Name : surya
  9. //
  10. // Description : Functions implementation for the class NshPolNegFilData
  11. // for improving performance by caching the Policy,Filterlist and negpols
  12. // (in BatchMode only.)
  13. //
  14. // History :
  15. //
  16. // Date Author Comments
  17. // 18-12-2001 Surya Initial Version. V1.0
  18. //
  19. ////////////////////////////////////////////////////////////////////////
  20. #include "nshipsec.h"
  21. extern CNshPolNegFilData g_NshPolNegFilData;
  22. extern CNshPolStore g_NshPolStoreHandle;
  23. extern HINSTANCE g_hModule;
  24. //////////////////////////////////////////////////////////////////////
  25. // Construction/Destruction For Class CNshPolStore
  26. //////////////////////////////////////////////////////////////////////
  27. CNshPolStore::CNshPolStore()
  28. {
  29. hPolicyStorage=NULL;
  30. bBatchModeOn=FALSE;
  31. }
  32. CNshPolStore::~CNshPolStore()
  33. {
  34. if(hPolicyStorage)
  35. {
  36. IPSecClosePolicyStore(hPolicyStorage);
  37. //hPolicyStorage=NULL;
  38. }
  39. bBatchModeOn=FALSE;
  40. }
  41. //////////////////////////////////////////////////////////////////////
  42. // public member functions For Class CNshPolStore
  43. //////////////////////////////////////////////////////////////////////
  44. DWORD
  45. CNshPolStore::SetBatchmodeStatus(
  46. BOOL bStatus
  47. )
  48. {
  49. return ERROR_SUCCESS;
  50. }
  51. BOOL
  52. CNshPolStore::GetBatchmodeStatus()
  53. {
  54. return FALSE;
  55. }
  56. HANDLE
  57. CNshPolStore::GetStorageHandle()
  58. {
  59. return hPolicyStorage;
  60. }
  61. VOID
  62. CNshPolStore::SetStorageHandle(
  63. HANDLE hPolicyStore
  64. )
  65. {
  66. if(hPolicyStore)
  67. {
  68. if(hPolicyStorage)
  69. {
  70. IPSecClosePolicyStore(hPolicyStorage);
  71. hPolicyStorage=NULL;
  72. }
  73. hPolicyStorage=hPolicyStore;
  74. }
  75. }
  76. //////////////////////////////////////////////////////////////////////
  77. // Construction/Destruction For Class CNshPolNegFilData
  78. //////////////////////////////////////////////////////////////////////
  79. CNshPolNegFilData::CNshPolNegFilData()
  80. {
  81. pPolicyData = NULL;
  82. pFilterData = NULL;
  83. pNegPolData = NULL;
  84. }
  85. CNshPolNegFilData::~CNshPolNegFilData()
  86. {
  87. if (pPolicyData)
  88. {
  89. IPSecFreePolicyData(pPolicyData);
  90. pPolicyData = NULL;
  91. }
  92. if(pFilterData)
  93. {
  94. IPSecFreeFilterData(pFilterData);
  95. pFilterData = NULL;
  96. }
  97. if(pNegPolData)
  98. {
  99. IPSecFreeNegPolData(pNegPolData);
  100. pNegPolData = NULL;
  101. }
  102. }
  103. //////////////////////////////////////////////////////////////////////
  104. // public member functions For Class CNshPolNegFilData
  105. //////////////////////////////////////////////////////////////////////
  106. //////////////////////////////////////////////////////////////////////
  107. // Set member functions
  108. //////////////////////////////////////////////////////////////////////
  109. VOID
  110. CNshPolNegFilData::SetPolicyInCache(
  111. PIPSEC_POLICY_DATA pPolicy
  112. )
  113. {
  114. if (pPolicyData)
  115. {
  116. if (!IsEqualGUID(pPolicyData->PolicyIdentifier,pPolicy->PolicyIdentifier))
  117. {
  118. IPSecFreePolicyData(pPolicyData);
  119. pPolicyData=pPolicy;
  120. }
  121. }
  122. else
  123. {
  124. pPolicyData=pPolicy;
  125. }
  126. }
  127. VOID
  128. CNshPolNegFilData::SetFilterListInCache(
  129. PIPSEC_FILTER_DATA pFilter
  130. )
  131. {
  132. if (pFilterData)
  133. {
  134. if (!IsEqualGUID(pFilterData->FilterIdentifier,pFilter->FilterIdentifier))
  135. {
  136. IPSecFreeFilterData(pFilterData);
  137. pFilterData=pFilter;
  138. }
  139. }
  140. else
  141. {
  142. pFilterData=pFilter;
  143. }
  144. }
  145. VOID
  146. CNshPolNegFilData::SetNegPolInCache(
  147. PIPSEC_NEGPOL_DATA pNegPol
  148. )
  149. {
  150. if (pNegPolData)
  151. {
  152. if (!IsEqualGUID(pNegPolData->NegPolIdentifier,pNegPol->NegPolIdentifier))
  153. {
  154. IPSecFreeNegPolData(pNegPolData);
  155. pNegPolData=pNegPol;
  156. }
  157. }
  158. else
  159. {
  160. pNegPolData=pNegPol;
  161. }
  162. }
  163. //////////////////////////////////////////////////////////////////////
  164. // Get member functions For Class CNshPolNegFilData
  165. //////////////////////////////////////////////////////////////////////
  166. BOOL
  167. CNshPolNegFilData::GetPolicyFromCacheByName(
  168. LPTSTR pszPolicyName,
  169. PIPSEC_POLICY_DATA * ppPolicy
  170. )
  171. {
  172. BOOL bPolExists=FALSE;
  173. if (pPolicyData)
  174. {
  175. if (_tcscmp(pszPolicyName,pPolicyData->pszIpsecName)==0)
  176. {
  177. bPolExists=TRUE;
  178. if(ppPolicy)
  179. {
  180. *ppPolicy=pPolicyData;
  181. }
  182. }
  183. }
  184. return bPolExists;
  185. }
  186. BOOL
  187. CNshPolNegFilData::GetFilterListFromCacheByName(
  188. LPTSTR pszFilterListName,
  189. PIPSEC_FILTER_DATA * ppFilter
  190. )
  191. {
  192. BOOL bFLExists=FALSE;
  193. if (pFilterData)
  194. {
  195. if (_tcscmp(pszFilterListName,pFilterData->pszIpsecName)==0)
  196. {
  197. bFLExists=TRUE;
  198. if(ppFilter)
  199. {
  200. *ppFilter=pFilterData;
  201. }
  202. }
  203. }
  204. return bFLExists;
  205. }
  206. BOOL
  207. CNshPolNegFilData::GetNegPolFromCacheByName(
  208. LPTSTR pszNegPolName,
  209. PIPSEC_NEGPOL_DATA * ppNegPol
  210. )
  211. {
  212. BOOL bNegPolExists=FALSE;
  213. if (pNegPolData)
  214. {
  215. if (_tcscmp(pszNegPolName,pNegPolData->pszIpsecName)==0)
  216. {
  217. bNegPolExists=TRUE;
  218. if(ppNegPol)
  219. {
  220. *ppNegPol=pNegPolData;
  221. }
  222. }
  223. }
  224. return bNegPolExists;
  225. }
  226. //////////////////////////////////////////////////////////////////////
  227. // check member functions For Class CNshPolNegFilData
  228. //////////////////////////////////////////////////////////////////////
  229. BOOL
  230. CNshPolNegFilData::CheckPolicyInCacheByName(
  231. LPTSTR pszPolicyName
  232. )
  233. {
  234. BOOL bPolExists=FALSE;
  235. if (pPolicyData)
  236. {
  237. if (_tcscmp(pszPolicyName,pPolicyData->pszIpsecName)==0)
  238. {
  239. bPolExists=TRUE;
  240. }
  241. }
  242. return bPolExists;
  243. }
  244. BOOL
  245. CNshPolNegFilData::CheckFilterListInCacheByName(
  246. LPTSTR pszFilterListName
  247. )
  248. {
  249. BOOL bFLExists=FALSE;
  250. if (pFilterData)
  251. {
  252. if (_tcscmp(pszFilterListName,pFilterData->pszIpsecName)==0)
  253. {
  254. bFLExists=TRUE;
  255. }
  256. }
  257. return bFLExists;
  258. }
  259. BOOL
  260. CNshPolNegFilData::CheckNegPolInCacheByName(
  261. LPTSTR pszNegPolName
  262. )
  263. {
  264. BOOL bNegPolExists=FALSE;
  265. if (pNegPolData)
  266. {
  267. if (_tcscmp(pszNegPolName,pNegPolData->pszIpsecName)==0)
  268. {
  269. bNegPolExists=TRUE;
  270. }
  271. }
  272. return bNegPolExists;
  273. }
  274. //////////////////////////////////////////////////////////////////////
  275. // Delete member functions For Class CNshPolNegFilData
  276. //////////////////////////////////////////////////////////////////////
  277. VOID
  278. CNshPolNegFilData::DeletePolicyFromCache(
  279. PIPSEC_POLICY_DATA pPolicy
  280. )
  281. {
  282. if (pPolicyData)
  283. {
  284. if (IsEqualGUID(pPolicyData->PolicyIdentifier,pPolicy->PolicyIdentifier))
  285. {
  286. IPSecFreePolicyData(pPolicyData);
  287. pPolicyData=NULL;
  288. }
  289. }
  290. }
  291. VOID
  292. CNshPolNegFilData::DeleteFilterListFromCache(
  293. GUID FilterListGUID
  294. )
  295. {
  296. if (pFilterData)
  297. {
  298. if (IsEqualGUID(pFilterData->FilterIdentifier,FilterListGUID))
  299. {
  300. IPSecFreeFilterData(pFilterData);
  301. pFilterData=NULL;
  302. }
  303. }
  304. }
  305. VOID
  306. CNshPolNegFilData::DeleteNegPolFromCache(
  307. GUID NegPolGUID
  308. )
  309. {
  310. if (pNegPolData)
  311. {
  312. if (IsEqualGUID(pNegPolData->NegPolIdentifier,NegPolGUID))
  313. {
  314. IPSecFreeNegPolData(pNegPolData);
  315. pNegPolData=NULL;
  316. }
  317. }
  318. }
  319. VOID
  320. CNshPolNegFilData::FlushAll()
  321. {
  322. if (pPolicyData)
  323. {
  324. IPSecFreePolicyData(pPolicyData);
  325. pPolicyData = NULL;
  326. }
  327. if(pFilterData)
  328. {
  329. IPSecFreeFilterData(pFilterData);
  330. pFilterData = NULL;
  331. }
  332. if(pNegPolData)
  333. {
  334. IPSecFreeNegPolData(pNegPolData);
  335. pNegPolData = NULL;
  336. }
  337. }
  338. //
  339. // Other Functions implemetation (Wrapper functions for the APIs)
  340. //
  341. /////////////////////////////////////////////////////////////
  342. //
  343. // Function : CreatePolicyData()
  344. //
  345. // Date of Creation: 21st Aug 2001
  346. //
  347. // Parameters :
  348. // HANDLE hPolicyStore,
  349. // PIPSEC_POLICY_DATA pIpsecPolicyData
  350. //
  351. // Return : DWORD (Win32 Error Code)
  352. //
  353. // Description : Wrapper Function for updating cache
  354. //
  355. // Revision History:
  356. //
  357. // Date Author Comments
  358. //
  359. ////////////////////////////////////////////////////////////
  360. DWORD
  361. CreatePolicyData(
  362. HANDLE hPolicyStore,
  363. PIPSEC_POLICY_DATA pIpsecPolicyData
  364. )
  365. {
  366. DWORD dwReturnCode=ERROR_SUCCESS;
  367. dwReturnCode=IPSecCreatePolicyData(hPolicyStore,pIpsecPolicyData);
  368. if(dwReturnCode==ERROR_SUCCESS)
  369. {
  370. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  371. {
  372. g_NshPolNegFilData.SetPolicyInCache(pIpsecPolicyData);
  373. }
  374. }
  375. return dwReturnCode;
  376. }
  377. /////////////////////////////////////////////////////////////
  378. //
  379. // Function : CreateFilterData()
  380. //
  381. // Date of Creation: 21st Aug 2001
  382. //
  383. // Parameters :
  384. // HANDLE hPolicyStore,
  385. // PIPSEC_FILTER_DATA pIpsecFilterData
  386. //
  387. // Return : DWORD (Win32 Error Code)
  388. //
  389. // Description : Wrapper Function for updating cache
  390. //
  391. // Revision History:
  392. //
  393. // Date Author Comments
  394. //
  395. ////////////////////////////////////////////////////////////
  396. DWORD
  397. CreateFilterData(
  398. HANDLE hPolicyStore,
  399. PIPSEC_FILTER_DATA pIpsecFilterData
  400. )
  401. {
  402. DWORD dwReturnCode=ERROR_SUCCESS;
  403. dwReturnCode=IPSecCreateFilterData(hPolicyStore,pIpsecFilterData);
  404. if(dwReturnCode==ERROR_SUCCESS)
  405. {
  406. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  407. {
  408. g_NshPolNegFilData.SetFilterListInCache(pIpsecFilterData);
  409. }
  410. }
  411. return dwReturnCode;
  412. }
  413. /////////////////////////////////////////////////////////////
  414. //
  415. // Function : CreateNegPolData()
  416. //
  417. // Date of Creation: 21st Aug 2001
  418. //
  419. // Parameters :
  420. // HANDLE hPolicyStore,
  421. // PIPSEC_NEGPOL_DATA pIpsecNegPolData
  422. //
  423. // Return : DWORD (Win32 Error Code)
  424. //
  425. // Description : Wrapper Function for updating cache
  426. //
  427. // Revision History:
  428. //
  429. // Date Author Comments
  430. //
  431. ////////////////////////////////////////////////////////////
  432. DWORD
  433. CreateNegPolData(
  434. HANDLE hPolicyStore,
  435. PIPSEC_NEGPOL_DATA pIpsecNegPolData
  436. )
  437. {
  438. DWORD dwReturnCode=ERROR_SUCCESS;
  439. dwReturnCode=IPSecCreateNegPolData(hPolicyStore,pIpsecNegPolData);
  440. if(dwReturnCode==ERROR_SUCCESS)
  441. {
  442. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  443. {
  444. g_NshPolNegFilData.SetNegPolInCache(pIpsecNegPolData);
  445. }
  446. }
  447. return dwReturnCode;
  448. }
  449. /////////////////////////////////////////////////////////////
  450. //
  451. // Function : SetPolicyData()
  452. //
  453. // Date of Creation: 21st Aug 2001
  454. //
  455. // Parameters :
  456. // HANDLE hPolicyStore,
  457. // PIPSEC_POLICY_DATA pIpsecPolicyData
  458. //
  459. // Return : DWORD (Win32 Error Code)
  460. //
  461. // Description : Wrapper Function for updating cache
  462. //
  463. // Revision History:
  464. //
  465. // Date Author Comments
  466. //
  467. ////////////////////////////////////////////////////////////
  468. DWORD
  469. SetPolicyData(
  470. HANDLE hPolicyStore,
  471. PIPSEC_POLICY_DATA pIpsecPolicyData
  472. )
  473. {
  474. DWORD dwReturnCode=ERROR_SUCCESS;
  475. dwReturnCode=IPSecSetPolicyData(hPolicyStore,pIpsecPolicyData);
  476. if(dwReturnCode==ERROR_SUCCESS)
  477. {
  478. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  479. {
  480. g_NshPolNegFilData.SetPolicyInCache(pIpsecPolicyData);
  481. }
  482. }
  483. return dwReturnCode;
  484. }
  485. /////////////////////////////////////////////////////////////
  486. //
  487. // Function : SetFilterData()
  488. //
  489. // Date of Creation: 21st Aug 2001
  490. //
  491. // Parameters :
  492. // HANDLE hPolicyStore,
  493. // PIPSEC_FILTER_DATA pIpsecFilterData
  494. //
  495. // Return : DWORD (Win32 Error Code)
  496. //
  497. // Description : Wrapper Function for updating cache
  498. //
  499. // Revision History:
  500. //
  501. // Date Author Comments
  502. //
  503. ////////////////////////////////////////////////////////////
  504. DWORD
  505. SetFilterData(
  506. HANDLE hPolicyStore,
  507. PIPSEC_FILTER_DATA pIpsecFilterData
  508. )
  509. {
  510. DWORD dwReturnCode=ERROR_SUCCESS;
  511. dwReturnCode=IPSecSetFilterData(hPolicyStore,pIpsecFilterData);
  512. if(dwReturnCode==ERROR_SUCCESS)
  513. {
  514. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  515. {
  516. g_NshPolNegFilData.SetFilterListInCache(pIpsecFilterData);
  517. }
  518. }
  519. return dwReturnCode;
  520. }
  521. /////////////////////////////////////////////////////////////
  522. //
  523. // Function : DeletePolicyData()
  524. //
  525. // Date of Creation: 21st Aug 2001
  526. //
  527. // Parameters :
  528. // HANDLE hPolicyStore,
  529. // PIPSEC_POLICY_DATA pIpsecPolicyData
  530. //
  531. // Return : DWORD (Win32 Error Code)
  532. //
  533. // Description : Wrapper Function for deleting Policy
  534. //
  535. // Revision History:
  536. //
  537. // Date Author Comments
  538. //
  539. ////////////////////////////////////////////////////////////
  540. DWORD
  541. DeletePolicyData(
  542. HANDLE hPolicyStore,
  543. PIPSEC_POLICY_DATA pIpsecPolicyData
  544. )
  545. {
  546. DWORD dwReturnCode=ERROR_SUCCESS;
  547. dwReturnCode=IPSecDeletePolicyData(hPolicyStore,pIpsecPolicyData);
  548. if(dwReturnCode==ERROR_SUCCESS)
  549. {
  550. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  551. {
  552. g_NshPolNegFilData.DeletePolicyFromCache(pIpsecPolicyData);
  553. }
  554. }
  555. return dwReturnCode;
  556. }
  557. /////////////////////////////////////////////////////////////
  558. //
  559. // Function : DeleteFilterData()
  560. //
  561. // Date of Creation: 21st Aug 2001
  562. //
  563. // Parameters :
  564. // HANDLE hPolicyStore,
  565. // GUID FilterIdentifier
  566. //
  567. // Return : DWORD (Win32 Error Code)
  568. //
  569. // Description : Wrapper Function for deleting Filter
  570. //
  571. // Revision History:
  572. //
  573. // Date Author Comments
  574. //
  575. ////////////////////////////////////////////////////////////
  576. DWORD
  577. DeleteFilterData(
  578. HANDLE hPolicyStore,
  579. GUID FilterIdentifier
  580. )
  581. {
  582. DWORD dwReturnCode=ERROR_SUCCESS;
  583. dwReturnCode=IPSecDeleteFilterData(hPolicyStore,FilterIdentifier);
  584. if(dwReturnCode==ERROR_SUCCESS)
  585. {
  586. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  587. {
  588. g_NshPolNegFilData.DeleteFilterListFromCache(FilterIdentifier);
  589. }
  590. }
  591. return dwReturnCode;
  592. }
  593. /////////////////////////////////////////////////////////////
  594. //
  595. // Function : DeleteNegPolData()
  596. //
  597. // Date of Creation: 21st Aug 2001
  598. //
  599. // Parameters :
  600. // HANDLE hPolicyStore,
  601. // GUID NegPolIdentifier
  602. //
  603. // Return : DWORD (Win32 Error Code)
  604. //
  605. // Description : Wrapper Function for deleting NegPol
  606. //
  607. // Revision History:
  608. //
  609. // Date Author Comments
  610. //
  611. ////////////////////////////////////////////////////////////
  612. DWORD
  613. DeleteNegPolData(
  614. HANDLE hPolicyStore,
  615. GUID NegPolIdentifier
  616. )
  617. {
  618. DWORD dwReturnCode=ERROR_SUCCESS;
  619. dwReturnCode=IPSecDeleteNegPolData(hPolicyStore,NegPolIdentifier);
  620. if(dwReturnCode==ERROR_SUCCESS)
  621. {
  622. if(g_NshPolStoreHandle.GetBatchmodeStatus())
  623. {
  624. g_NshPolNegFilData.DeleteNegPolFromCache(NegPolIdentifier);
  625. }
  626. }
  627. return dwReturnCode;
  628. }
  629. /////////////////////////////////////////////////////////////
  630. //
  631. // Function : FreePolicyData()
  632. //
  633. // Date of Creation: 21st Aug 2001
  634. //
  635. // Parameters :
  636. // PIPSEC_POLICY_DATA pIpsecPolicyData
  637. //
  638. // Return : VOID
  639. //
  640. // Description : Wrapper Function for Free Policy cache
  641. //
  642. // Revision History:
  643. //
  644. // Date Author Comments
  645. //
  646. ////////////////////////////////////////////////////////////
  647. VOID
  648. FreePolicyData(
  649. PIPSEC_POLICY_DATA pIpsecPolicyData
  650. )
  651. {
  652. if(!g_NshPolStoreHandle.GetBatchmodeStatus())
  653. {
  654. if(pIpsecPolicyData)
  655. {
  656. IPSecFreePolicyData(pIpsecPolicyData);
  657. pIpsecPolicyData=NULL;
  658. }
  659. }
  660. }
  661. /////////////////////////////////////////////////////////////
  662. //
  663. // Function : FreeNegPolData()
  664. //
  665. // Date of Creation: 21st Aug 2001
  666. //
  667. // Parameters :
  668. // PIPSEC_NEGPOL_DATA pIpsecNegPolData
  669. //
  670. // Return : VOID
  671. //
  672. // Description : Wrapper Function for Free NegPol Cache
  673. //
  674. // Revision History:
  675. //
  676. // Date Author Comments
  677. //
  678. ////////////////////////////////////////////////////////////
  679. VOID
  680. FreeNegPolData(
  681. PIPSEC_NEGPOL_DATA pIpsecNegPolData
  682. )
  683. {
  684. if(!g_NshPolStoreHandle.GetBatchmodeStatus())
  685. {
  686. if(pIpsecNegPolData)
  687. {
  688. IPSecFreeNegPolData(pIpsecNegPolData);
  689. pIpsecNegPolData=NULL;
  690. }
  691. }
  692. }
  693. /////////////////////////////////////////////////////////////
  694. //
  695. // Function : FreeFilterData()
  696. //
  697. // Date of Creation: 21st Aug 2001
  698. //
  699. // Parameters :
  700. // PIPSEC_FILTER_DATA pIpsecFilterData
  701. //
  702. // Return : VOID
  703. //
  704. // Description : Wrapper Function for Free Filter Cache
  705. //
  706. // Revision History:
  707. //
  708. // Date Author Comments
  709. //
  710. ////////////////////////////////////////////////////////////
  711. VOID
  712. FreeFilterData(
  713. PIPSEC_FILTER_DATA pIpsecFilterData
  714. )
  715. {
  716. if(!g_NshPolStoreHandle.GetBatchmodeStatus())
  717. {
  718. if(pIpsecFilterData)
  719. {
  720. IPSecFreeFilterData(pIpsecFilterData);
  721. pIpsecFilterData=NULL;
  722. }
  723. }
  724. }
  725. /////////////////////////////////////////////////////////////
  726. //
  727. // Function : OpenPolicyStore()
  728. //
  729. // Date of Creation: 21st Aug 2001
  730. //
  731. // Parameters :
  732. // LPWSTR pszMachineName,
  733. // DWORD dwTypeOfStore,
  734. // LPWSTR pszFileName,
  735. // HANDLE * phPolicyStore
  736. //
  737. // Return : DWORD (Win32 Error Code)
  738. //
  739. // Description : Implementation for the Openingpolstore in batch mode
  740. //
  741. // Revision History:
  742. //
  743. // Date Author Comments
  744. //
  745. ////////////////////////////////////////////////////////////
  746. DWORD
  747. OpenPolicyStore(
  748. HANDLE * phPolicyStore
  749. )
  750. {
  751. DWORD dwReturnCode = ERROR_SUCCESS;
  752. if (g_NshPolStoreHandle.GetStorageHandle())
  753. {
  754. *phPolicyStore = g_NshPolStoreHandle.GetStorageHandle();
  755. dwReturnCode = ERROR_SUCCESS;
  756. }
  757. else
  758. {
  759. dwReturnCode = ERROR_INVALID_DATA;
  760. }
  761. return dwReturnCode;
  762. }
  763. /////////////////////////////////////////////////////////////
  764. //
  765. // Function : ClosePolicyStore()
  766. //
  767. // Date of Creation: 21st Aug 2001
  768. //
  769. // Parameters :
  770. // HANDLE hPolicyStore
  771. //
  772. // Return : DWORD (Win32 Error Code)
  773. //
  774. // Description : Implementation for the ClosingPolstore in batch mode
  775. //
  776. // Revision History:
  777. //
  778. // Date Author Comments
  779. //
  780. ////////////////////////////////////////////////////////////
  781. DWORD
  782. ClosePolicyStore(
  783. HANDLE hPolicyStore
  784. )
  785. {
  786. return ERROR_SUCCESS;
  787. }