//--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1995 // // File: cprovcf.cxx // // Contents: NetWare 3.12 Provider Object Class Factory Code // // CNWCOMPATProviderCF::CreateInstance // // History: 10-Jan-96 t-ptam Created. // //---------------------------------------------------------------------------- #include "NWCOMPAT.hxx" #pragma hdrstop HRESULT GetObject( LPWSTR szBuffer, LPVOID * ppObject ); // Class CNWCOMPATProvider CNWCOMPATProvider::CNWCOMPATProvider() { ENLIST_TRACKING(CNWCOMPATProvider); } HRESULT CNWCOMPATProvider::Create(CNWCOMPATProvider FAR * FAR * ppProvider) { CNWCOMPATProvider FAR * pProvider = NULL; HRESULT hr = S_OK; // //Create the Provider Object /// pProvider = new CNWCOMPATProvider(); if (pProvider == NULL) { RRETURN(ResultFromScode(E_OUTOFMEMORY)); } if (FAILED(hr)) { delete pProvider; RRETURN(hr); } *ppProvider = pProvider; RRETURN(hr); } CNWCOMPATProvider::~CNWCOMPATProvider( ) { } STDMETHODIMP CNWCOMPATProvider::QueryInterface(REFIID iid,LPVOID FAR* ppv) { if (ppv == NULL) { RRETURN(E_POINTER); } if (IsEqualIID(iid, IID_IUnknown)) { *ppv = this; } else if (IsEqualIID(iid, IID_IParseDisplayName)) { *ppv = (IADs FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; } STDMETHODIMP CNWCOMPATProvider::ParseDisplayName( IBindCtx* pbc, WCHAR* szDisplayName, ULONG* pchEaten, IMoniker** ppmk ) { HRESULT hr; // clear out-parameters *ppmk = NULL; if (pchEaten != NULL) *pchEaten = 0; hr = ResolvePathName(pbc, szDisplayName, pchEaten, ppmk); RRETURN_EXP_IF_ERR(hr); } HRESULT CNWCOMPATProvider::ResolvePathName( IBindCtx* pbc, WCHAR* szDisplayName, ULONG* pchEaten, IMoniker** ppmk ) { HRESULT hr; LPUNKNOWN pUnknown = NULL; if (!pchEaten) { BAIL_IF_ERROR(hr = E_INVALIDARG); } *pchEaten = 0; hr = GetObject(szDisplayName, (LPVOID *)&pUnknown); BAIL_IF_ERROR(hr); hr = CreatePointerMoniker(pUnknown, ppmk); BAIL_IF_ERROR(hr); *pchEaten += wcslen(szDisplayName); cleanup: if (pUnknown) { pUnknown->Release(); } RRETURN_EXP_IF_ERR(hr); }