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 / cschobj.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-29  |  6.1 KB  |  349 lines

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