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.

234 lines
5.8 KiB

  1. /*++
  2. Copyright (c) 1999 Microsoft Corporation
  3. Module Name:
  4. Pointer.hxx
  5. Abstract:
  6. Declaration of VSS_OBJECT_PROP_Ptr
  7. This class is used as an element in the CSimpleArrays.
  8. This class is NOT a smart pointer. Life management of the internal pointer
  9. must be done explicitely from outside.
  10. WARNING:
  11. Beware how variables with VSS_OBJECT_PROP_Ptr are used!
  12. The destructor is called at the end of variable scope. To avoid destruction of the structure reffered
  13. by the variable, call Reset each time when you pass lifetime ownership to another code!
  14. The destructor is really needed in CSimpleArray clean destruction.
  15. Author:
  16. Adi Oltean [aoltean] 09/21/1999
  17. Revision History:
  18. Name Date Comments
  19. aoltean 09/21/1999 Created for having VSS_OBJECT_PROP_Ptr as a pointer to the properties structure.
  20. This pointer will serve as element in CSimpleArray constructs.
  21. aoltean 09/22/1999 Adding InitializeAsEmpty and Print
  22. aoltean 10/05/1999 Adding internal data member m_pInterface;
  23. aoltean 10/07/1999 Adding m_pwszSnapshotVolumeName, device object, modif timestamp
  24. aoltean 03/27/2000 Adding Writer support
  25. aoltean 03/01/2001 Adding mgmt objects
  26. --*/
  27. #ifndef __VSS_PTR_HXX__
  28. #define __VSS_PTR_HXX__
  29. #if _MSC_VER > 1000
  30. #pragma once
  31. #endif
  32. ////////////////////////////////////////////////////////////////////////
  33. // Standard foo for file name aliasing. This code block must be after
  34. // all includes of VSS header files.
  35. //
  36. #ifdef VSS_FILE_ALIAS
  37. #undef VSS_FILE_ALIAS
  38. #endif
  39. #define VSS_FILE_ALIAS "INCPNTRH"
  40. //
  41. ////////////////////////////////////////////////////////////////////////
  42. /////////////////////////////////////////////////////////////////////////////
  43. // VSS_OBJECT_PROP_Ptr
  44. class VSS_OBJECT_PROP_Ptr
  45. {
  46. // Constructors and destructors
  47. public:
  48. VSS_OBJECT_PROP_Ptr(): m_pStruct(NULL) {};
  49. VSS_OBJECT_PROP_Ptr(const VSS_OBJECT_PROP_Ptr& rhs): m_pStruct(rhs.m_pStruct) {};
  50. ~VSS_OBJECT_PROP_Ptr() // Called in CSimpleArray::RemoveAll
  51. {
  52. if (m_pStruct)
  53. {
  54. VSS_OBJECT_PROP_Copy::destroy(m_pStruct);
  55. ::CoTaskMemFree(static_cast<LPVOID>(m_pStruct));
  56. }
  57. };
  58. // Attributes
  59. public:
  60. VSS_OBJECT_PROP* GetStruct() const { return m_pStruct; };
  61. // Operators
  62. public:
  63. VSS_OBJECT_PROP_Ptr& operator = (const VSS_OBJECT_PROP_Ptr& rhs)
  64. {
  65. BS_ASSERT(m_pStruct == NULL);
  66. m_pStruct = rhs.m_pStruct;
  67. return (*this);
  68. };
  69. bool operator == (const VSS_OBJECT_PROP_Ptr& rhs)
  70. {
  71. return (m_pStruct == rhs.m_pStruct);
  72. };
  73. // Operations
  74. public:
  75. void Reset() { m_pStruct = NULL; }; // Must be called after detaching the internal pointer.
  76. void InitializeAsSnapshot(
  77. IN CVssFunctionTracer& ft,
  78. IN VSS_ID Id,
  79. IN VSS_ID SnapshotSetId,
  80. IN LONG lSnapshotsCount,
  81. IN VSS_PWSZ pwszSnapshotDeviceObject,
  82. IN VSS_PWSZ pwszOriginalVolumeName,
  83. IN VSS_PWSZ pwszOriginatingMachine,
  84. IN VSS_PWSZ pwszServiceMachine,
  85. IN VSS_PWSZ pwszExposedName,
  86. IN VSS_PWSZ pwszExposedPath,
  87. IN VSS_ID ProviderId,
  88. IN LONG lSnapshotAttributes,
  89. IN VSS_TIMESTAMP tsCreationTimestamp,
  90. IN VSS_SNAPSHOT_STATE eStatus
  91. ) throw (HRESULT);
  92. void InitializeAsProvider(
  93. IN CVssFunctionTracer& ft,
  94. IN VSS_ID ProviderId,
  95. IN VSS_PWSZ pwszProviderName,
  96. IN VSS_PROVIDER_TYPE eProviderType,
  97. IN VSS_PWSZ pwszProviderVersion,
  98. IN VSS_ID ProviderVersionId,
  99. IN CLSID ClassId
  100. ) throw (HRESULT);
  101. void InitializeAsEmpty(
  102. IN CVssFunctionTracer& ft
  103. ) throw (HRESULT);
  104. void Print(
  105. IN CVssFunctionTracer& ft,
  106. IN LPWSTR wszOutputBuffer,
  107. IN LONG lBufferSize
  108. ) throw (HRESULT);
  109. // Data member
  110. private:
  111. VSS_OBJECT_PROP* m_pStruct; // Must be allocated using CoTaskMemAlloc
  112. };
  113. /////////////////////////////////////////////////////////////////////////////
  114. // VSS_MGMT_OBJECT_PROP_Ptr
  115. class VSS_MGMT_OBJECT_PROP_Ptr
  116. {
  117. // Constructors and destructors
  118. public:
  119. VSS_MGMT_OBJECT_PROP_Ptr(): m_pStruct(NULL) {};
  120. VSS_MGMT_OBJECT_PROP_Ptr(const VSS_MGMT_OBJECT_PROP_Ptr& rhs): m_pStruct(rhs.m_pStruct) {};
  121. ~VSS_MGMT_OBJECT_PROP_Ptr() // Called in CSimpleArray::RemoveAll
  122. {
  123. if (m_pStruct)
  124. {
  125. VSS_MGMT_OBJECT_PROP_Copy::destroy(m_pStruct);
  126. ::CoTaskMemFree(static_cast<LPVOID>(m_pStruct));
  127. }
  128. };
  129. // Attributes
  130. public:
  131. VSS_MGMT_OBJECT_PROP* GetStruct() const { return m_pStruct; };
  132. // Operators
  133. public:
  134. VSS_MGMT_OBJECT_PROP_Ptr& operator = (const VSS_MGMT_OBJECT_PROP_Ptr& rhs)
  135. {
  136. BS_ASSERT(m_pStruct == NULL);
  137. m_pStruct = rhs.m_pStruct;
  138. return (*this);
  139. };
  140. bool operator == (const VSS_MGMT_OBJECT_PROP_Ptr& rhs)
  141. {
  142. return (m_pStruct == rhs.m_pStruct);
  143. };
  144. // Operations
  145. public:
  146. void Reset() { m_pStruct = NULL; }; // Must be called after detaching the internal pointer.
  147. void InitializeAsVolume(
  148. IN CVssFunctionTracer& ft,
  149. IN VSS_PWSZ pwszVolumeName,
  150. IN VSS_PWSZ pwszVolumeDisplayName
  151. ) throw (HRESULT);
  152. void InitializeAsDiffVolume(
  153. IN CVssFunctionTracer& ft,
  154. IN VSS_PWSZ pwszVolumeName,
  155. IN VSS_PWSZ pwszVolumeDisplayName,
  156. IN LONGLONG llVolumeFreeSpace,
  157. IN LONGLONG llVolumeTotalSpace
  158. ) throw (HRESULT);
  159. void InitializeAsDiffArea(
  160. IN CVssFunctionTracer& ft,
  161. IN VSS_PWSZ pwszVolumeName,
  162. IN VSS_PWSZ pwszDiffAreaVolumeName,
  163. IN LONGLONG llUsedDiffSpace,
  164. IN LONGLONG llAllocatedDiffSpace,
  165. IN LONGLONG llMaximumDiffSpace
  166. ) throw (HRESULT);
  167. void InitializeAsEmpty(
  168. IN CVssFunctionTracer& ft
  169. ) throw (HRESULT);
  170. void Print(
  171. IN CVssFunctionTracer& ft,
  172. IN LPWSTR wszOutputBuffer,
  173. IN LONG lBufferSize
  174. ) throw (HRESULT);
  175. // Data member
  176. private:
  177. VSS_MGMT_OBJECT_PROP* m_pStruct; // Must be allocated using CoTaskMemAlloc
  178. };
  179. #endif // __VSS_PTR_HXX__