home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / netds / adsi / sampprov / cnamesp.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-29  |  5.7 KB  |  310 lines

  1. /*++
  2.  
  3. Copyright (c) 1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     CNameSp.cpp
  8.  
  9. Abstract:
  10.  
  11.     Sample Namespace Object 
  12.  
  13. Author:
  14.  
  15. Environment:
  16.  
  17.     User mode
  18.  
  19. Revision History :
  20.  
  21. --*/
  22. #include "adssmp.h"
  23. #pragma hdrstop
  24.  
  25.  
  26. DEFINE_IDispatch_Implementation(CSampleDSNamespace)
  27. DEFINE_IADs_Implementation(CSampleDSNamespace)
  28.  
  29. //  Class CSampleDSNamespace
  30. CSampleDSNamespace::CSampleDSNamespace()
  31. {
  32.     VariantInit(&_vFilter);
  33. }
  34.  
  35. HRESULT
  36. CSampleDSNamespace::CreateNamespace(
  37.     BSTR Parent,
  38.     BSTR NamespaceName,
  39.     DWORD dwObjectState,
  40.     REFIID riid,
  41.     void **ppvObj
  42.     )
  43. {
  44.     CSampleDSNamespace FAR * pNamespace = NULL;
  45.     HRESULT hr = S_OK;
  46.  
  47.     hr = AllocateNamespaceObject(&pNamespace);
  48.     BAIL_ON_FAILURE(hr);
  49.  
  50.     hr = pNamespace->InitializeCoreObject(
  51.                 Parent,
  52.                 NamespaceName,
  53.                 L"Namespace",
  54.                 L"",
  55.                 CLSID_SampleDSNamespace,
  56.                 dwObjectState
  57.                 );
  58.     BAIL_ON_FAILURE(hr);
  59.  
  60.     hr = pNamespace->QueryInterface(riid, ppvObj);
  61.     BAIL_ON_FAILURE(hr);
  62.  
  63.     pNamespace->Release();
  64.  
  65.     RRETURN(hr);
  66.  
  67. error:
  68.  
  69.     delete pNamespace;
  70.     RRETURN(hr);
  71. }
  72.  
  73.  
  74. CSampleDSNamespace::~CSampleDSNamespace( )
  75. {
  76.     delete _pDispMgr;
  77. }
  78.  
  79. STDMETHODIMP
  80. CSampleDSNamespace::QueryInterface(REFIID iid, LPVOID FAR* ppv)
  81. {
  82.     if (IsEqualIID(iid, IID_IUnknown))
  83.     {
  84.         *ppv = (IADs FAR *)this;
  85.     }else if (IsEqualIID(iid, IID_IDispatch))
  86.     {
  87.         *ppv = (IADs FAR *)this;
  88.     }
  89.     else if (IsEqualIID(iid, IID_IADsContainer))
  90.     {
  91.         *ppv = (IADsContainer FAR *) this;
  92.     }
  93.     else if (IsEqualIID(iid, IID_IADs))
  94.     {
  95.         *ppv = (IADs FAR *) this;
  96.     }
  97.     else
  98.     {
  99.         *ppv = NULL;
  100.         return E_NOINTERFACE;
  101.     }
  102.     AddRef();
  103.     return NOERROR;
  104. }
  105.  
  106.  
  107. STDMETHODIMP
  108. CSampleDSNamespace::SetInfo(THIS)
  109. {
  110.     RRETURN(E_NOTIMPL);
  111. }
  112.  
  113. STDMETHODIMP
  114. CSampleDSNamespace::GetInfo(THIS)
  115. {
  116.     RRETURN(E_NOTIMPL);
  117. }
  118.  
  119. /* IADsContainer methods */
  120.  
  121. STDMETHODIMP
  122. CSampleDSNamespace::get_Count(long FAR* retval)
  123. {
  124.     RRETURN(E_NOTIMPL);
  125. }
  126.  
  127. STDMETHODIMP
  128. CSampleDSNamespace::get_Filter(THIS_ VARIANT FAR* pVar)
  129. {
  130.     VariantInit(pVar);
  131.     RRETURN(VariantCopy(pVar, &_vFilter));
  132. }
  133.  
  134. STDMETHODIMP
  135. CSampleDSNamespace::put_Filter(THIS_ VARIANT Var)
  136. {
  137.     RRETURN(VariantCopy(&_vFilter, &Var));
  138. }
  139.  
  140. STDMETHODIMP
  141. CSampleDSNamespace::put_Hints(THIS_ VARIANT Var)
  142. {
  143.     RRETURN( E_NOTIMPL);
  144. }
  145.  
  146.  
  147. STDMETHODIMP
  148. CSampleDSNamespace::get_Hints(THIS_ VARIANT FAR* pVar)
  149. {
  150.     RRETURN(E_NOTIMPL);
  151. }
  152.  
  153.  
  154. STDMETHODIMP
  155. CSampleDSNamespace::GetObject(
  156.     THIS_ BSTR ClassName,
  157.     BSTR RelativeName,
  158.     IDispatch* FAR* ppObject
  159.     )
  160. {
  161.     RRETURN(::RelativeGetObject(_ADsPath,
  162.                                 ClassName,
  163.                                 RelativeName,
  164.                                 ppObject,
  165.                                 TRUE));
  166. }
  167.  
  168.  
  169. STDMETHODIMP
  170. CSampleDSNamespace::get__NewEnum(THIS_ IUnknown * FAR* retval)
  171. {
  172.     HRESULT hr;
  173.     IUnknown FAR* punkEnum=NULL;
  174.     IEnumVARIANT * penum = NULL;
  175.  
  176.  
  177.     *retval = NULL;
  178.  
  179.     //
  180.     // Create new enumerator for items currently
  181.     // in collection and QI for IUnknown
  182.     //
  183.  
  184.     hr = CSampleDSNamespaceEnum::Create(
  185.                 (CSampleDSNamespaceEnum **)&penum,
  186.                 _vFilter
  187.                 );
  188.     if (FAILED(hr)){
  189.  
  190.         goto error;
  191.     }
  192.     hr = penum->QueryInterface(
  193.                 IID_IUnknown,
  194.                 (VOID FAR* FAR*)retval
  195.                 );
  196.  
  197.     if (FAILED(hr)){
  198.        goto error;
  199.     }
  200.  
  201.     if (penum) {
  202.         penum->Release();
  203.     }
  204.  
  205.     return NOERROR;
  206.  
  207. error:
  208.  
  209.     if (penum) {
  210.         delete penum;
  211.     }
  212.  
  213.     return hr;
  214. }
  215.  
  216. STDMETHODIMP
  217. CSampleDSNamespace::Create(THIS_ BSTR ClassName, BSTR RelativeName, IDispatch * FAR* ppObject)
  218. {
  219.     RRETURN(E_NOTIMPL);
  220. }
  221.  
  222. STDMETHODIMP
  223. CSampleDSNamespace::Delete(THIS_ BSTR SourceName, BSTR Type)
  224. {
  225.     RRETURN(E_NOTIMPL);
  226. }
  227.  
  228. STDMETHODIMP
  229. CSampleDSNamespace::CopyHere(THIS_ BSTR SourceName, BSTR NewName, IDispatch * FAR* ppObject)
  230. {
  231.     RRETURN(E_NOTIMPL);
  232. }
  233.  
  234. STDMETHODIMP
  235. CSampleDSNamespace::MoveHere(THIS_ BSTR SourceName, BSTR NewName, IDispatch * FAR* ppObject)
  236. {
  237.     RRETURN(E_NOTIMPL);
  238. }
  239.  
  240.  
  241. HRESULT
  242. CSampleDSNamespace::AllocateNamespaceObject(CSampleDSNamespace ** ppNamespace)
  243. {
  244.     CSampleDSNamespace FAR * pNamespace = NULL;
  245.     CDispatchMgr FAR * pDispMgr = NULL;
  246.     HRESULT hr = S_OK;
  247.  
  248.     pNamespace = new CSampleDSNamespace();
  249.     if (pNamespace == NULL) {
  250.         hr = E_OUTOFMEMORY;
  251.     }
  252.     BAIL_ON_FAILURE(hr);
  253.  
  254.     pDispMgr = new CDispatchMgr;
  255.     if (pDispMgr == NULL) {
  256.         hr = E_OUTOFMEMORY;
  257.     }
  258.     BAIL_ON_FAILURE(hr);
  259.  
  260.     hr = LoadTypeInfoEntry(pDispMgr,
  261.                            LIBID_ADs,
  262.                            IID_IADs,
  263.                            (IADs *)pNamespace,
  264.                            DISPID_REGULAR
  265.                            );
  266.     BAIL_ON_FAILURE(hr);
  267.  
  268.     hr = LoadTypeInfoEntry(pDispMgr,
  269.                            LIBID_ADs,
  270.                            IID_IADsContainer,
  271.                            (IADsContainer *)pNamespace,
  272.                            DISPID_NEWENUM
  273.                            );
  274.     BAIL_ON_FAILURE(hr);
  275.  
  276.     pNamespace->_pDispMgr = pDispMgr;
  277.     *ppNamespace = pNamespace;
  278.  
  279.     RRETURN(hr);
  280.  
  281. error:
  282.     delete  pDispMgr;
  283.  
  284.     RRETURN(hr);
  285.  
  286. }
  287.  
  288.  
  289.  
  290. STDMETHODIMP
  291. CSampleDSNamespace::Get(
  292.     THIS_ BSTR bstrName,
  293.     VARIANT FAR* pvProp
  294.     )
  295. {
  296.     RRETURN(E_NOTIMPL);
  297. }
  298.  
  299.  
  300.  
  301. STDMETHODIMP
  302. CSampleDSNamespace::Put(
  303.     THIS_ BSTR bstrName,
  304.     VARIANT vProp
  305.     )
  306. {
  307.     RRETURN(E_NOTIMPL);
  308. }
  309.  
  310.