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

  1. /*++
  2.  
  3. Copyright (c) 1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     CProv.cpp
  8.  
  9. Abstract:
  10.  
  11.     ADsSampleDS Provider 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. CSampleDSProvider::CSampleDSProvider()
  26. {
  27.  
  28. }
  29.  
  30. HRESULT
  31. CSampleDSProvider::Create(CSampleDSProvider FAR * FAR * ppProvider)
  32. {
  33.     CSampleDSProvider FAR * pProvider = NULL;
  34.     HRESULT hr = S_OK;
  35.  
  36.     //Create the Provider Object
  37.  
  38.     pProvider = new CSampleDSProvider();
  39.     if (pProvider == NULL) {
  40.         RRETURN(ResultFromScode(E_OUTOFMEMORY));
  41.     }
  42.  
  43.     if (FAILED(hr)) {
  44.         delete pProvider;
  45.         RRETURN(hr);
  46.     }
  47.  
  48.  
  49.     *ppProvider = pProvider;
  50.     RRETURN(hr);
  51. }
  52.  
  53. CSampleDSProvider::~CSampleDSProvider( )
  54. {
  55.     ENLIST_TRACKING(CSampleDSProvider);
  56. }
  57.  
  58. STDMETHODIMP
  59. CSampleDSProvider::QueryInterface(REFIID iid, LPVOID FAR* ppv)
  60. {
  61.     if (IsEqualIID(iid, IID_IUnknown))
  62.     {
  63.         *ppv = this;
  64.     }
  65.     else if (IsEqualIID(iid, IID_IParseDisplayName))
  66.     {
  67.         *ppv = (IADs FAR *) this;
  68.     }
  69.     else
  70.     {
  71.         *ppv = NULL;
  72.         return E_NOINTERFACE;
  73.     }
  74.     AddRef();
  75.     return NOERROR;
  76. }
  77.  
  78. STDMETHODIMP
  79. CSampleDSProvider::ParseDisplayName(IBindCtx* pbc, WCHAR* szDisplayName, ULONG* pchEaten, IMoniker** ppmk)
  80. {
  81.     HRESULT hr;
  82.  
  83.     *ppmk = NULL;
  84.  
  85.     if (pchEaten != NULL){
  86.         *pchEaten = 0;
  87.     }
  88.  
  89.     hr = ResolvePathName(
  90.                 pbc,
  91.                 szDisplayName,
  92.                 pchEaten,
  93.                 ppmk
  94.                 );
  95.  
  96.     RRETURN(hr);
  97. }
  98.  
  99. HRESULT
  100. CSampleDSProvider::ResolvePathName(IBindCtx* pbc,
  101.                 WCHAR* szDisplayName,
  102.                 ULONG* pchEaten,
  103.                 IMoniker** ppmk
  104.                 )
  105. {
  106.     HRESULT hr;
  107.     LPUNKNOWN pUnknown = NULL;
  108.  
  109.     *pchEaten = 0;
  110.     hr = GetObject(szDisplayName, (LPVOID *)&pUnknown);
  111.     BAIL_IF_ERROR(hr);
  112.  
  113.     hr = CreatePointerMoniker(pUnknown, ppmk);
  114.     BAIL_IF_ERROR(hr);
  115.  
  116.     *pchEaten += wcslen(szDisplayName);
  117.  
  118. cleanup:
  119.  
  120.     if (pUnknown) {
  121.         pUnknown->Release();
  122.     }
  123.  
  124.     RRETURN (hr);
  125. }
  126.  
  127.