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.

179 lines
5.6 KiB

  1. ///////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright(C) 1997-1998 Microsoft Corporation all rights reserved.
  4. //
  5. // Module: sdocollection.h
  6. //
  7. // Project: Everest
  8. //
  9. // Description: IAS Server Data Object Collection Declaration
  10. //
  11. // Author: TLP 1/23/98
  12. //
  13. ///////////////////////////////////////////////////////////////////////////
  14. #ifndef __IAS_SDOCOLLECTION_H_
  15. #define __IAS_SDOCOLLECTION_H_
  16. #include <ias.h>
  17. #include <sdoiaspriv.h>
  18. #include <comdef.h> // COM definitions - Needed for IEnumVARIANT
  19. #include "resource.h" // main symbols
  20. #include <vector>
  21. using namespace std;
  22. ///////////////////////////////////////////////////////////////////////////////
  23. #define EMPTY_NAME L""
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CSdoCollection Class Declaration
  26. /////////////////////////////////////////////////////////////////////////////
  27. class ATL_NO_VTABLE CSdoCollection :
  28. public CComObjectRootEx<CComMultiThreadModel>,
  29. public IDispatchImpl<ISdoCollection, &IID_ISdoCollection, &LIBID_SDOIASLib>,
  30. public IASProductLimits
  31. {
  32. public:
  33. CSdoCollection();
  34. ~CSdoCollection();
  35. DECLARE_GET_CONTROLLING_UNKNOWN()
  36. BEGIN_COM_MAP(CSdoCollection)
  37. COM_INTERFACE_ENTRY(ISdoCollection)
  38. COM_INTERFACE_ENTRY(IDispatch)
  39. COM_INTERFACE_ENTRY_IID(__uuidof(IASProductLimits), IASProductLimits)
  40. END_COM_MAP()
  41. public:
  42. ///////////////////////////
  43. // ISdoCollection Interface
  44. ///////////////////////////
  45. //////////////////////////////////////////////////////////////////////////////
  46. STDMETHOD(get_Count)(
  47. /*[out, retval]*/ LONG *pVal
  48. );
  49. //////////////////////////////////////////////////////////////////////////////
  50. STDMETHOD(Add)(
  51. /*[in]*/ BSTR Name,
  52. /*[in/out]*/ IDispatch** ppItem
  53. );
  54. //////////////////////////////////////////////////////////////////////////////
  55. STDMETHOD(Remove)(
  56. /*[in]*/ IDispatch* pItem
  57. );
  58. //////////////////////////////////////////////////////////////////////////////
  59. STDMETHOD(RemoveAll)(void);
  60. //////////////////////////////////////////////////////////////////////////////
  61. STDMETHOD(Reload)(void);
  62. //////////////////////////////////////////////////////////////////////////////
  63. STDMETHOD(IsNameUnique)(
  64. /*[in]*/ BSTR bstrName,
  65. /*[out]*/ VARIANT_BOOL* pBool
  66. );
  67. //////////////////////////////////////////////////////////////////////////////
  68. STDMETHOD(Item)(
  69. /*[in]*/ VARIANT* Index,
  70. /*[out]*/ IDispatch** pItem
  71. );
  72. //////////////////////////////////////////////////////////////////////////////
  73. STDMETHOD(get__NewEnum)(
  74. /*[out]*/ IUnknown** pEnumVARIANT
  75. );
  76. // IASProductLimits.
  77. STDMETHOD(get_Limits)(IAS_PRODUCT_LIMITS* pVal);
  78. private:
  79. friend ISdoCollection* MakeSDOCollection(
  80. LPCWSTR lpszCreateClassId,
  81. ISdoMachine* pSdoMachine,
  82. IDataStoreContainer* pDSContainer,
  83. size_t maxSize
  84. );
  85. //////////////////////////////////////////////////////////////////////////////
  86. HRESULT InternalInitialize(
  87. /*[in]*/ LPCWSTR lpszCreateClassId,
  88. /*[in]*/ ISdoMachine* pSdoMachine,
  89. /*[in]*/ IDataStoreContainer* pDSContainer,
  90. /*[in]*/ size_t maxSize
  91. );
  92. //////////////////////////////////////////////////////////////////////////////
  93. void InternalShutdown(void);
  94. /////////////////////////////////////////////////////////////////////////////
  95. HRESULT InternalAdd(
  96. /*[in]*/ BSTR bstrName,
  97. /*[in/out]*/ IDispatch **ppItem
  98. );
  99. //////////////////////////////////////////////////////////////////////////////
  100. HRESULT InternalIsNameUnique(
  101. /*[in]*/ BSTR bstrName,
  102. /*[out]*/ VARIANT_BOOL* pBool
  103. );
  104. //////////////////////////////////////////////////////////////////////////////
  105. HRESULT Load(void);
  106. //////////////////////////////////////////////////////////////////////////////
  107. void ReleaseItems(void);
  108. // Container for collection's SDOs
  109. //
  110. typedef vector<_variant_t> VariantArray;
  111. typedef VariantArray::iterator VariantArrayIterator;
  112. // Container for object references
  113. //
  114. VariantArray m_Objects;
  115. // Collection state
  116. //
  117. bool m_fSdoInitialized;
  118. // Data store container associated with this collection
  119. //
  120. IDataStoreContainer* m_pDSContainer;
  121. // Attached Machine
  122. //
  123. ISdoMachine* m_pSdoMachine;
  124. // Create on add allowed flag
  125. //
  126. bool m_fCreateOnAdd;
  127. // Data store class name for objects that can be created by this collection
  128. //
  129. _bstr_t m_DatastoreClass;
  130. // Prog Id of the objects (SDOs) that can be created by this collection
  131. //
  132. _bstr_t m_CreateClassId;
  133. size_t m_MaxSize;
  134. };
  135. typedef CComObjectNoLock<CSdoCollection> SDO_COLLECTION_OBJ;
  136. typedef CComObjectNoLock<CSdoCollection>* PSDO_COLLECTION_OBJ;
  137. #endif //__IAS_SDOCOLLECTION_H_