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.

786 lines
18 KiB

  1. /*++
  2. Copyright (c) 2000 Microsoft Corporation
  3. Module Name:
  4. vs_wmxml.hxx
  5. Abstract:
  6. Declaration of Writer Metadata XML wrapper classes
  7. Brian Berkowitz [brianb] 3/13/2000
  8. TBD:
  9. Add comments.
  10. Revision History:
  11. Name Date Comments
  12. brianb 03/13/2000 Created
  13. brianb 03/22/2000 Added CVssGatherWriterMetadata
  14. --*/
  15. ////////////////////////////////////////////////////////////////////////
  16. // Standard foo for file name aliasing. This code block must be after
  17. // all includes of VSS header files.
  18. //
  19. #ifdef VSS_FILE_ALIAS
  20. #undef VSS_FILE_ALIAS
  21. #endif
  22. #define VSS_FILE_ALIAS "INCWXMLH"
  23. //
  24. ////////////////////////////////////////////////////////////////////////
  25. // forward declarations
  26. class CVssWMFiledesc;
  27. class CVssWMComponent;
  28. class CVssWMDependency;
  29. // base class used by all writer and component metadata classes.
  30. class CVssMetadataHelper
  31. {
  32. protected:
  33. CXMLDocument m_doc;
  34. // protection for document
  35. CVssSafeCriticalSection m_csDOM;
  36. CVssMetadataHelper(IXMLDOMNode *pNode, IXMLDOMDocument *pDoc) :
  37. m_doc(pNode, pDoc)
  38. {
  39. }
  40. CVssMetadataHelper()
  41. {
  42. }
  43. // initialize critical section used to protect document
  44. void InitializeHelper(CVssFunctionTracer &ft)
  45. {
  46. try
  47. {
  48. m_csDOM.Init();
  49. }
  50. catch(...)
  51. {
  52. ft.Throw(VSSDBG_XML, E_OUTOFMEMORY, L"Cannot initialize critical section");
  53. }
  54. }
  55. // convert string value "yes, no" to boolean
  56. bool ConvertToBoolean
  57. (
  58. IN CVssFunctionTracer &ft,
  59. IN BSTR bstr
  60. ) throw(HRESULT);
  61. // get the value of a string valued attribute of the element
  62. HRESULT GetStringAttributeValue
  63. (
  64. IN CVssFunctionTracer &ft,
  65. IN LPCWSTR wszAttrName,
  66. IN bool bAttrRequired,
  67. OUT BSTR *pbstrValue
  68. );
  69. // obtain the value of a byte array valued attribute. Returns S_FALSE if
  70. // attribute doesn't exist
  71. HRESULT GetByteArrayAttributeValue
  72. (
  73. IN CVssFunctionTracer &ft,
  74. IN LPCWSTR wszAttrName,
  75. IN bool bRequired,
  76. OUT BYTE **ppbValue,
  77. OUT UINT *pcbValue
  78. );
  79. // get the UUID valued attribute of the element
  80. HRESULT GetVSS_IDAttributeValue
  81. (
  82. IN CVssFunctionTracer &ft,
  83. IN LPCWSTR wszAttrName,
  84. IN bool bRequired,
  85. OUT VSS_ID *pidValue
  86. );
  87. // get the value of a boolean valued attribute of the current element
  88. HRESULT GetBooleanAttributeValue
  89. (
  90. IN CVssFunctionTracer &ft,
  91. IN LPCWSTR wszAttrName,
  92. IN bool bRequired,
  93. OUT bool *pbValue
  94. );
  95. // obtain the string value of an attribute
  96. bool get_stringValue
  97. (
  98. IN LPCWSTR wszAttrName,
  99. OUT BSTR *pbstr
  100. ) throw(HRESULT);
  101. // obtain the value of an ASCII string
  102. bool get_ansi_stringValue
  103. (
  104. CVssFunctionTracer &ft,
  105. IN LPCWSTR wszAttrName,
  106. OUT LPSTR *pstrValue
  107. );
  108. // get a byte array value. The value is UUENCODED in the xml document.
  109. BYTE *CVssMetadataHelper::get_byteArrayValue
  110. (
  111. CVssFunctionTracer &ft,
  112. LPCWSTR wszAttr,
  113. bool bRequired,
  114. UINT &cb
  115. );
  116. // obtain the boolean value of an attribute
  117. bool get_boolValue
  118. (
  119. IN CVssFunctionTracer &ft,
  120. IN LPCWSTR wszAttrName,
  121. OUT bool *pb
  122. ) throw(HRESULT);
  123. bool get_dwordValue
  124. (
  125. IN CVssFunctionTracer &ft,
  126. IN LPCWSTR wszAttrName,
  127. OUT DWORD *pdw
  128. ) throw(HRESULT);
  129. void get_VSS_IDValue
  130. (
  131. IN CVssFunctionTracer &ft,
  132. IN LPCWSTR wszAttrName,
  133. OUT VSS_ID *pid
  134. ) throw(HRESULT);
  135. static void MissingElement
  136. (
  137. IN CVssFunctionTracer &ft,
  138. IN LPCWSTR wszElement
  139. );
  140. static void MissingAttribute
  141. (
  142. IN CVssFunctionTracer &ft,
  143. IN LPCWSTR wszAttribute
  144. );
  145. public:
  146. // convert VSS_RESTORE_TARGET to string
  147. static LPCWSTR WszFromRestoreTarget
  148. (
  149. IN CVssFunctionTracer &ft,
  150. IN VSS_RESTORE_TARGET rt
  151. );
  152. // convert from string to restore target
  153. static VSS_RESTORE_TARGET ConvertToRestoreTarget
  154. (
  155. IN CVssFunctionTracer &ft,
  156. IN BSTR bstr
  157. );
  158. // convert VSS_FILE_RESTORE_STATUS to string
  159. static LPCWSTR WszFromFileRestoreStatus
  160. (
  161. IN CVssFunctionTracer &ft,
  162. IN VSS_FILE_RESTORE_STATUS rs
  163. );
  164. // convert from string to File restore status
  165. static VSS_FILE_RESTORE_STATUS ConvertToFileRestoreStatus
  166. (
  167. IN CVssFunctionTracer &ft,
  168. IN BSTR bstr
  169. );
  170. // convert a boolean value to a string ("yes", "no")
  171. static LPCWSTR WszFromBoolean(IN bool b);
  172. // convert a string to a GUID
  173. static void ConvertToVSS_ID
  174. (
  175. IN CVssFunctionTracer &ft,
  176. IN BSTR bstr,
  177. OUT VSS_ID *pId
  178. ) throw(HRESULT);
  179. // convert a VSS_USAGE_TYPE to a string
  180. static LPCWSTR WszFromUsageType
  181. (
  182. IN CVssFunctionTracer &ft,
  183. IN VSS_USAGE_TYPE ut
  184. ) throw(HRESULT);
  185. // convert a string to a VSS_USAGE_TYPE
  186. static VSS_USAGE_TYPE ConvertToUsageType
  187. (
  188. IN CVssFunctionTracer &ft,
  189. IN BSTR bstr
  190. ) throw(HRESULT);
  191. // convert a VSS_SOURCE_TYPE to a string
  192. static LPCWSTR WszFromSourceType
  193. (
  194. IN CVssFunctionTracer &ft,
  195. IN VSS_SOURCE_TYPE st
  196. ) throw(HRESULT);
  197. // convert a string to a VSS_SOURCE_TYPE
  198. static VSS_SOURCE_TYPE ConvertToSourceType
  199. (
  200. IN CVssFunctionTracer &ft,
  201. IN BSTR bstr
  202. ) throw(HRESULT);
  203. // convert a VSS_COMPONENT_TYPE to a string
  204. static LPCWSTR WszFromComponentType
  205. (
  206. IN CVssFunctionTracer &ft,
  207. IN VSS_COMPONENT_TYPE ct,
  208. IN bool bValue
  209. ) throw(HRESULT);
  210. // convert a string to a VSS_COMPONENT_TYPE
  211. static VSS_COMPONENT_TYPE ConvertToComponentType
  212. (
  213. IN CVssFunctionTracer &ft,
  214. IN BSTR bstr,
  215. IN bool bValue
  216. ) throw(HRESULT);
  217. // convert a VSS_RESTOREMETHOD_ENUM to a string
  218. static LPCWSTR WszFromRestoreMethod
  219. (
  220. IN CVssFunctionTracer &ft,
  221. IN VSS_RESTOREMETHOD_ENUM method
  222. ) throw(HRESULT);
  223. // convert a string to a VSS_RESTOREMETHOD_ENUM
  224. static VSS_RESTOREMETHOD_ENUM ConvertToRestoreMethod
  225. (
  226. IN CVssFunctionTracer &ft,
  227. IN BSTR bstr
  228. ) throw(HRESULT);
  229. // convert a VSS_WRITERRESTORE_ENUM to a string
  230. static LPCWSTR WszFromWriterRestore
  231. (
  232. IN CVssFunctionTracer &ft,
  233. IN VSS_WRITERRESTORE_ENUM writerRestore
  234. ) throw(HRESULT);
  235. // convert a string to a VSS_WRITERRESTORE_ENUM
  236. static VSS_WRITERRESTORE_ENUM ConvertToWriterRestore
  237. (
  238. IN CVssFunctionTracer &ft,
  239. IN BSTR bstr
  240. ) throw(HRESULT);
  241. // convert from a VSS_BACKUP_TYPE to a string
  242. static LPCWSTR WszFromBackupType
  243. (
  244. IN CVssFunctionTracer &ft,
  245. IN VSS_BACKUP_TYPE bt
  246. );
  247. // convert from string to VSS_BACKUP_TYPE
  248. static VSS_BACKUP_TYPE ConvertToBackupType
  249. (
  250. IN CVssFunctionTracer &ft,
  251. IN BSTR bstr
  252. );
  253. // conver from a VSS_RESTORE_TYPE to a string
  254. static LPCWSTR WszFromRestoreType
  255. (
  256. IN CVssFunctionTracer &ft,
  257. IN VSS_RESTORE_TYPE rt
  258. );
  259. // convert from a string to a VSS_RESTORE_TYPE
  260. static VSS_RESTORE_TYPE ConvertToRestoreType
  261. (
  262. IN CVssFunctionTracer &ft,
  263. IN BSTR bstr
  264. );
  265. // convert a STORAGE_BUS_TYPE to a string
  266. static LPCWSTR WszFromBusType
  267. (
  268. IN CVssFunctionTracer &ft,
  269. IN VDS_STORAGE_BUS_TYPE type
  270. );
  271. // convert a string to a STORAGE_BUS_TYPE
  272. static VDS_STORAGE_BUS_TYPE ConvertToStorageBusType
  273. (
  274. IN CVssFunctionTracer &ft,
  275. IN BSTR bstrBusType
  276. );
  277. // convert an interconnect address type to a string
  278. LPCWSTR WszFromInterconnectAddressType
  279. (
  280. IN CVssFunctionTracer &ft,
  281. IN VDS_INTERCONNECT_ADDRESS_TYPE type
  282. );
  283. // convert a string to an interconnect address type
  284. VDS_INTERCONNECT_ADDRESS_TYPE ConvertToInterconnectAddressType
  285. (
  286. IN CVssFunctionTracer &ft,
  287. IN BSTR bstrType
  288. );
  289. // common routine to count number of sub elements of a given type
  290. HRESULT GetElementCount
  291. (
  292. IN LPCWSTR wszElement,
  293. OUT UINT *pcElements
  294. );
  295. };
  296. // examine writer metadata
  297. class CVssExamineWriterMetadata :
  298. public IVssExamineWriterMetadata,
  299. public CVssMetadataHelper
  300. {
  301. public:
  302. CVssExamineWriterMetadata() :
  303. m_cRef(0)
  304. {
  305. }
  306. // initialize document from a string
  307. bool Initialize
  308. (
  309. IN BSTR bstrXML
  310. ) throw(HRESULT);
  311. // obtain identity of the writer
  312. STDMETHOD(GetIdentity)
  313. (
  314. OUT VSS_ID *pidInstance,
  315. OUT VSS_ID *pidWriter,
  316. OUT BSTR *pbstrWriterName,
  317. OUT VSS_USAGE_TYPE *pUsage,
  318. OUT VSS_SOURCE_TYPE *pSource
  319. );
  320. // obtain number of include files, exclude files, and components
  321. STDMETHOD(GetFileCounts)
  322. (
  323. OUT UINT *pcIncludeFiles,
  324. OUT UINT *pcExcludeFiles,
  325. OUT UINT *pcComponents
  326. );
  327. // obtain specific include files
  328. STDMETHOD(GetIncludeFile)
  329. (
  330. IN UINT iFile,
  331. OUT IVssWMFiledesc **ppFiledesc
  332. );
  333. // obtain specific exclude files
  334. STDMETHOD(GetExcludeFile)
  335. (
  336. IN UINT iFile,
  337. OUT IVssWMFiledesc **ppFiledesc
  338. );
  339. // obtain specific component
  340. STDMETHOD(GetComponent)
  341. (
  342. IN UINT iComponent,
  343. OUT IVssWMComponent **ppComponent
  344. );
  345. // obtain restoration method
  346. STDMETHOD(GetRestoreMethod)
  347. (
  348. OUT VSS_RESTOREMETHOD_ENUM *pMethod,
  349. OUT BSTR *pbstrService,
  350. OUT BSTR *pbstrUserProcedure,
  351. OUT VSS_WRITERRESTORE_ENUM *pwriterRestore,
  352. OUT bool *pbRebootRequired,
  353. UINT *pcMappings
  354. );
  355. // obtain a specific alternative location mapping
  356. STDMETHOD(GetAlternateLocationMapping)
  357. (
  358. IN UINT iMapping,
  359. OUT IVssWMFiledesc **ppFiledesc
  360. );
  361. // get the backup schema
  362. STDMETHOD(GetBackupSchema)
  363. (
  364. OUT DWORD *pdwSchemaMask
  365. );
  366. // obtain reference to actual XML document
  367. STDMETHOD(GetDocument)(IXMLDOMDocument **pDoc);
  368. // convert document to a XML string
  369. STDMETHOD(SaveAsXML)(BSTR *pbstrXML);
  370. // load document from an XML string
  371. STDMETHOD(LoadFromXML)(BSTR bstrXML);
  372. // IUnknown methods
  373. STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj);
  374. STDMETHOD_ (ULONG, AddRef)();
  375. STDMETHOD_ (ULONG, Release)();
  376. private:
  377. // load XML document saved using SaveAsXML
  378. bool LoadDocument(BSTR bstrXML);
  379. // used to load a specific kind of subcomponent of BACKUP_FILES
  380. // COMPONENT, DATABASE, or FILE_GROUP
  381. HRESULT GetFileType
  382. (
  383. IN CVssFunctionTracer &ft,
  384. IN UINT iFile,
  385. IN LPCWSTR wszFileType,
  386. OUT IVssWMFiledesc **ppFiledesc
  387. );
  388. // reference count
  389. LONG m_cRef;
  390. };
  391. // access a component
  392. class CVssWMComponent :
  393. public CVssMetadataHelper,
  394. public IVssWMComponent
  395. {
  396. friend class CVssExamineWriterMetadata;
  397. private:
  398. CVssWMComponent(IXMLDOMNode *pNode) :
  399. CVssMetadataHelper(pNode, NULL),
  400. m_cRef(0),
  401. m_iLastFile(0)
  402. {
  403. }
  404. // 2nd phase of construction
  405. void Initialize(CVssFunctionTracer &ft)
  406. {
  407. InitializeHelper(ft);
  408. }
  409. public:
  410. // get component information
  411. STDMETHOD(GetComponentInfo)(PVSSCOMPONENTINFO *ppInfo);
  412. // free component information
  413. STDMETHOD(FreeComponentInfo)(PVSSCOMPONENTINFO pInfo);
  414. // obtain a specific file in a file group
  415. STDMETHOD(GetFile)
  416. (
  417. IN UINT iFile,
  418. OUT IVssWMFiledesc **ppFiledesc
  419. );
  420. // obtain a specific physical database file for a database
  421. STDMETHOD(GetDatabaseFile)
  422. (
  423. IN UINT iDBFile,
  424. OUT IVssWMFiledesc **ppFiledesc
  425. );
  426. // obtain a specific physical log file for a database
  427. STDMETHOD(GetDatabaseLogFile)
  428. (
  429. IN UINT iDbLogFile,
  430. OUT IVssWMFiledesc **ppFiledesc
  431. );
  432. STDMETHOD(GetDependency)
  433. (
  434. IN UINT iDependency,
  435. OUT IVssWMDependency **ppDependency
  436. );
  437. // IUnknown methods
  438. STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj);
  439. STDMETHOD_ (ULONG, AddRef)();
  440. STDMETHOD_ (ULONG, Release)();
  441. private:
  442. // get a specific component file(file, database, log file)
  443. HRESULT GetComponentFile
  444. (
  445. IN CVssFunctionTracer &ft,
  446. IN LPCWSTR wszElementName,
  447. IN UINT iFile,
  448. OUT IVssWMFiledesc **ppFiledesc
  449. );
  450. LONG m_cRef;
  451. CVssAutoLocalString m_lastElementName;
  452. UINT m_iLastFile;
  453. };
  454. // information about a file or set of files
  455. class CVssWMFiledesc :
  456. public IVssWMFiledesc,
  457. public CVssMetadataHelper
  458. {
  459. friend class CVssExamineWriterMetadata;
  460. friend class CVssWMComponent;
  461. friend class CVssComponent;
  462. private:
  463. CVssWMFiledesc(IXMLDOMNode *pNode) :
  464. CVssMetadataHelper(pNode, NULL),
  465. m_cRef(0)
  466. {
  467. }
  468. // 2nd phase of construction
  469. void Initialize(CVssFunctionTracer &ft)
  470. {
  471. InitializeHelper(ft);
  472. }
  473. public:
  474. // get path to toplevel directory
  475. STDMETHOD(GetPath)(OUT BSTR *pbstrPath);
  476. // get filespec (may include wildcards)
  477. STDMETHOD(GetFilespec)(OUT BSTR *pbstrFilespec);
  478. // is path a directory or root of a tree
  479. STDMETHOD(GetRecursive)(OUT bool *pbRecursive);
  480. // alternate location for files
  481. STDMETHOD(GetAlternateLocation)(OUT BSTR *pbstrAlternateLocation);
  482. // backup type flags
  483. STDMETHOD(GetBackupTypeMask)(OUT DWORD *pdwTypeMask);
  484. // IUnknown methods
  485. STDMETHOD(QueryInterface)(REFIID riid, void **ppvObj);
  486. STDMETHOD_ (ULONG, AddRef)();
  487. STDMETHOD_ (ULONG, Release)();
  488. private:
  489. LONG m_cRef;
  490. };
  491. // information about a dependency
  492. class CVssWMDependency : public IVssWMDependency,
  493. public CVssMetadataHelper
  494. {
  495. friend class CVssWMComponent;
  496. private:
  497. CVssWMDependency(IXMLDOMNode* pNode) :
  498. CVssMetadataHelper(pNode, NULL),
  499. m_cRef(0)
  500. {
  501. }
  502. // 2nd phase of construction
  503. void Initialize(CVssFunctionTracer &ft)
  504. {
  505. InitializeHelper(ft);
  506. }
  507. public:
  508. STDMETHOD(GetWriterId)(OUT VSS_ID *pWriterId);
  509. STDMETHOD(GetLogicalPath)(OUT BSTR *pbstrLogicalPath);
  510. STDMETHOD(GetComponentName)(OUT BSTR *pbstrComponentName);
  511. STDMETHOD(QueryInterface)(REFIID riid, void **pvObj);
  512. STDMETHOD_(ULONG, AddRef)();
  513. STDMETHOD_(ULONG, Release)();
  514. private:
  515. LONG m_cRef;
  516. };
  517. class CVssCreateWriterMetadata : public IVssCreateWriterMetadata,
  518. public CVssMetadataHelper
  519. {
  520. public:
  521. // create initial metadata document
  522. HRESULT Initialize
  523. (
  524. IN VSS_ID idInstance,
  525. IN VSS_ID idWriter,
  526. IN LPCWSTR wszFriendlyName,
  527. IN VSS_USAGE_TYPE usage,
  528. IN VSS_SOURCE_TYPE source
  529. );
  530. // add files to include to metadata document
  531. STDMETHOD(AddIncludeFiles)
  532. (
  533. IN LPCWSTR wszPath,
  534. IN LPCWSTR wszFilespec,
  535. IN bool bRecursive,
  536. IN LPCWSTR wszAlternateLocation
  537. );
  538. // add files to exclude to metadata document
  539. STDMETHOD(AddExcludeFiles)
  540. (
  541. IN LPCWSTR wszPath,
  542. IN LPCWSTR wszFilespec,
  543. IN bool bRecursive
  544. );
  545. // add component to metadata document
  546. STDMETHOD(AddComponent)
  547. (
  548. IN VSS_COMPONENT_TYPE ct,
  549. IN LPCWSTR wszLogicalPath,
  550. IN LPCWSTR wszComponentName,
  551. IN LPCWSTR wszCaption,
  552. IN const BYTE *pbIcon,
  553. IN UINT cbIcon,
  554. IN bool bRestoreMetadata,
  555. IN bool bNotifyOnBackupComplete,
  556. IN bool bSelectable,
  557. IN bool bSelectableForRestore = false,
  558. IN DWORD dwComponentFlags = 0
  559. );
  560. // add physical database files to a database component
  561. STDMETHOD(AddDatabaseFiles)
  562. (
  563. IN LPCWSTR wszLogicalPath,
  564. IN LPCWSTR wszDatabaseName,
  565. IN LPCWSTR wszPath,
  566. IN LPCWSTR wszFilespec,
  567. IN DWORD dwBackupTypeMask = (VSS_FSBT_ALL_BACKUP_REQUIRED |
  568. VSS_FSBT_ALL_SNAPSHOT_REQUIRED)
  569. );
  570. // add log files to a database component
  571. STDMETHOD(AddDatabaseLogFiles)
  572. (
  573. IN LPCWSTR wszLogicalPath,
  574. IN LPCWSTR wszDatabaseName,
  575. IN LPCWSTR wszPath,
  576. IN LPCWSTR wszFilespec,
  577. IN DWORD dwBackupTypeMask = (VSS_FSBT_ALL_BACKUP_REQUIRED |
  578. VSS_FSBT_ALL_SNAPSHOT_REQUIRED)
  579. );
  580. // add files to a FILE_GROUP component
  581. STDMETHOD(AddFilesToFileGroup)
  582. (
  583. IN LPCWSTR wszLogicalPath,
  584. IN LPCWSTR wszGroupName,
  585. IN LPCWSTR wszPath,
  586. IN LPCWSTR wszFilespec,
  587. IN bool bRecursive,
  588. IN LPCWSTR wszAlternateLocation,
  589. IN DWORD dwBackupTypeMask = (VSS_FSBT_ALL_BACKUP_REQUIRED |
  590. VSS_FSBT_ALL_SNAPSHOT_REQUIRED)
  591. );
  592. // create a restore method
  593. STDMETHOD(SetRestoreMethod)
  594. (
  595. IN VSS_RESTOREMETHOD_ENUM method,
  596. IN LPCWSTR wszService,
  597. IN LPCWSTR wszUserProcedure,
  598. IN VSS_WRITERRESTORE_ENUM writerRestore,
  599. IN bool bRebootRequired
  600. );
  601. // add alternative location mappings to the restore method
  602. STDMETHOD(AddAlternateLocationMapping)
  603. (
  604. IN LPCWSTR wszSourcePath,
  605. IN LPCWSTR wszSourceFilespec,
  606. IN bool bRecursive,
  607. IN LPCWSTR wszDestination
  608. );
  609. // add a dependency to another writer's component
  610. STDMETHOD(AddComponentDependency)
  611. (
  612. IN LPCWSTR wszForLogicalPath,
  613. IN LPCWSTR wszForComponentName,
  614. IN VSS_ID onWriterId,
  615. IN LPCWSTR wszOnLogicalPath,
  616. IN LPCWSTR wszOnComponentName
  617. );
  618. // set the backup schema
  619. STDMETHOD(SetBackupSchema)
  620. (
  621. IN DWORD dwSchemaMask
  622. );
  623. // obtain reference to actual XML document
  624. STDMETHOD(GetDocument)(IXMLDOMDocument **pDoc);
  625. // save document as an XML string
  626. STDMETHOD(SaveAsXML)(BSTR *pbstrXML);
  627. private:
  628. // obtain BACKUP_LOCATIONS element
  629. CXMLNode GetBackupLocationsNode();
  630. // add files associated with DATABASE or FILE_GROUP component
  631. HRESULT CreateComponentFiles
  632. (
  633. IN CVssFunctionTracer &ft,
  634. IN LPCWSTR wszElement,
  635. IN LPCWSTR wszLogicalPath,
  636. IN LPCWSTR wszComponentName,
  637. IN LPCWSTR wszElementFile,
  638. IN LPCWSTR wszPath,
  639. IN LPCWSTR wszFilespec,
  640. IN bool bRecursive,
  641. IN LPCWSTR wszAlternateLocation,
  642. IN DWORD dwBackupTypeMask
  643. );
  644. };