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.

166 lines
4.6 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2001 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // MetabaseObject.cpp
  7. //
  8. // Description:
  9. // Copied from %fp%\server\source\msiis\metabase.cpp
  10. // Opens the Metabse for accessing information about
  11. // IIS. For example, to make sure it is installed correctly
  12. // and make sure ASP is turned on.
  13. //
  14. // Header File:
  15. // MetabaseObject.h
  16. //
  17. // History:
  18. // travisn 2-AUG-2001 Copied and comments added
  19. //
  20. //////////////////////////////////////////////////////////////////////////////
  21. #include "MetabaseObject.h"
  22. /////////////////////////////////////////////////////////////////////////
  23. // CMetabaseObject::~CMetabaseObject
  24. //
  25. // Description:
  26. // Destructor for the Metabase object
  27. //
  28. /////////////////////////////////////////////////////////////////////////
  29. CMetabaseObject::~CMetabaseObject()
  30. {
  31. if (m_pIAdmCom)
  32. {
  33. if (m_isOpen)
  34. m_pIAdmCom->CloseKey(m_handle);
  35. m_pIAdmCom->Release();
  36. m_pIAdmCom = 0;
  37. }
  38. }
  39. /////////////////////////////////////////////////////////////////////////
  40. // CMetabaseObject::init
  41. //
  42. // Description:
  43. // Initalize the metabase for access
  44. //
  45. /////////////////////////////////////////////////////////////////////////
  46. HRESULT CMetabaseObject::init()
  47. {
  48. if (m_pIAdmCom)
  49. return S_OK;
  50. return CoCreateInstance(
  51. CLSID_MSAdminBase,
  52. NULL,
  53. CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
  54. IID_IMSAdminBase,
  55. (void **) &m_pIAdmCom );
  56. }
  57. /////////////////////////////////////////////////////////////////////////
  58. // CMetabaseObject::openObject
  59. //
  60. // Description:
  61. // Open this metabase object with the path given
  62. //
  63. /////////////////////////////////////////////////////////////////////////
  64. HRESULT CMetabaseObject::openObject(const WCHAR *path)
  65. {
  66. HRESULT hr = S_OK;
  67. if (FAILED(hr = init()))
  68. return hr;
  69. if (m_isOpen)
  70. {
  71. if (FAILED(hr = closeObject()))
  72. return hr;
  73. }
  74. hr = m_pIAdmCom->OpenKey(
  75. METADATA_MASTER_ROOT_HANDLE,
  76. path,
  77. METADATA_PERMISSION_READ,
  78. 60000,
  79. &m_handle);
  80. if (FAILED(hr))
  81. return hr;
  82. m_isOpen = TRUE;
  83. return hr;
  84. }
  85. /////////////////////////////////////////////////////////////////////////
  86. // CMetabaseObject::closeObject
  87. //
  88. // Description:
  89. // Close this metabase object
  90. //
  91. /////////////////////////////////////////////////////////////////////////
  92. HRESULT CMetabaseObject::closeObject()
  93. {
  94. if (!m_isOpen)
  95. return S_FALSE;
  96. HRESULT hr = m_pIAdmCom->CloseKey(m_handle);
  97. if (FAILED(hr))
  98. return hr;
  99. m_isOpen = FALSE;
  100. return hr;
  101. }
  102. /////////////////////////////////////////////////////////////////////////
  103. // CMetabaseObject::getData
  104. //
  105. // Description:
  106. // This method does not appear necessary for SaInstall
  107. //
  108. //HRESULT CMetabaseObject::getData(
  109. // DWORD property,
  110. // Wstring& value,
  111. // DWORD userType,
  112. // LPCWSTR path,
  113. // BOOL inherited,
  114. // DWORD dataType)
  115. //{
  116. // METADATA_RECORD metaDataRecord;
  117. // metaDataRecord.dwMDIdentifier = property;
  118. // metaDataRecord.dwMDDataType = dataType;
  119. // metaDataRecord.dwMDUserType = userType;
  120. // metaDataRecord.dwMDAttributes = inherited ?
  121. // METADATA_INHERIT | METADATA_PARTIAL_PATH : 0;
  122. // metaDataRecord.dwMDDataLen = value.numBytes();
  123. // metaDataRecord.pbMDData = (unsigned char *)value.data();
  124. // DWORD metaDataLength = 0;
  125. // HRESULT hr = m_pIAdmCom->GetData(m_handle,
  126. // path, &metaDataRecord, &metaDataLength);
  127. //
  128. // // See if we need a bigger buffer
  129. // if (!FAILED(hr))
  130. // return hr;
  131. // if (ERROR_INSUFFICIENT_BUFFER != hr &&
  132. // ERROR_INSUFFICIENT_BUFFER != (hr & 0xFFFF))
  133. // return hr;
  134. // value.makeBigger(metaDataLength);
  135. // metaDataRecord.dwMDDataLen = value.numBytes();
  136. // metaDataRecord.pbMDData = (unsigned char *)value.data();
  137. // return m_pIAdmCom->GetData(m_handle,
  138. // path, &metaDataRecord, &metaDataLength);
  139. //}
  140. /////////////////////////////////////////////////////////////////////////
  141. // CMetabaseObject::enumerateObjects
  142. //
  143. // Description:
  144. // This method does not appear necessary for SaInstall
  145. //
  146. //HRESULT CMetabaseObject::enumerateObjects(
  147. // LPCWSTR pszMDPath,
  148. // LPWSTR pszMDName, // at least METADATA_MAX_NAME_LEN long
  149. // DWORD dwMDEnumKeyIndex)
  150. //{
  151. // return m_pIAdmCom->EnumKeys(m_handle,
  152. // pszMDPath,
  153. // pszMDName,
  154. // dwMDEnumKeyIndex);
  155. //}