2019-06-18 20:35:46 +00:00
|
|
|
#include "precomp.h"
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
const INetCfgBindingPath *lpVtbl;
|
|
|
|
LONG ref;
|
|
|
|
} INetCfgBindingPathImpl;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
const IEnumNetCfgBindingPath *lpVtbl;
|
|
|
|
LONG ref;
|
|
|
|
} IEnumNetCfgBindingPathImpl;
|
|
|
|
|
|
|
|
|
|
|
|
/***************************************************************
|
|
|
|
* INetCfgBindingPath
|
|
|
|
*/
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnQueryInterface(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
REFIID iid,
|
|
|
|
LPVOID *ppvObj)
|
|
|
|
{
|
|
|
|
INetCfgBindingPathImpl *This = (INetCfgBindingPathImpl*)iface;
|
|
|
|
*ppvObj = NULL;
|
|
|
|
|
|
|
|
if (IsEqualIID (iid, &IID_IUnknown) ||
|
|
|
|
IsEqualIID (iid, &IID_INetCfgBindingPath))
|
|
|
|
{
|
|
|
|
*ppvObj = This;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
}
|
|
|
|
|
|
|
|
ULONG
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnAddRef(
|
|
|
|
INetCfgBindingPath * iface)
|
|
|
|
{
|
|
|
|
INetCfgBindingPathImpl * This = (INetCfgBindingPathImpl*)iface;
|
|
|
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
|
|
|
|
|
|
|
return refCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
ULONG
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnRelease(
|
|
|
|
INetCfgBindingPath *iface)
|
|
|
|
{
|
|
|
|
INetCfgBindingPathImpl *This = (INetCfgBindingPathImpl*)iface;
|
|
|
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
|
|
|
|
|
|
|
if (!refCount)
|
|
|
|
{
|
|
|
|
CoTaskMemFree(This);
|
|
|
|
}
|
|
|
|
return refCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnIsSamePathAs(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
INetCfgBindingPath *pPath)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnIsSubPathOf(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
INetCfgBindingPath *pPath)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnIsEnabled(
|
|
|
|
INetCfgBindingPath *iface)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnEnable(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
BOOL fEnable)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnGetPathToken(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
LPWSTR *ppszwPathToken)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnGetOwner(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
INetCfgComponent **ppComponent)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnGetDepth(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
ULONG *pcInterfaces)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_fnEnumBindingInterfaces(
|
|
|
|
INetCfgBindingPath *iface,
|
|
|
|
IEnumNetCfgBindingInterface **ppenumInterface)
|
|
|
|
{
|
2019-06-19 20:38:31 +00:00
|
|
|
return IEnumNetCfgBindingInterface_Constructor(NULL, &IID_IEnumNetCfgBindingInterface, (LPVOID *)ppenumInterface);
|
2019-06-18 20:35:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static const INetCfgBindingPathVtbl vt_NetCfgBindingPath =
|
|
|
|
{
|
|
|
|
INetCfgBindingPath_fnQueryInterface,
|
|
|
|
INetCfgBindingPath_fnAddRef,
|
|
|
|
INetCfgBindingPath_fnRelease,
|
|
|
|
INetCfgBindingPath_fnIsSamePathAs,
|
|
|
|
INetCfgBindingPath_fnIsSubPathOf,
|
|
|
|
INetCfgBindingPath_fnIsEnabled,
|
|
|
|
INetCfgBindingPath_fnEnable,
|
|
|
|
INetCfgBindingPath_fnGetPathToken,
|
|
|
|
INetCfgBindingPath_fnGetOwner,
|
|
|
|
INetCfgBindingPath_fnGetDepth,
|
|
|
|
INetCfgBindingPath_fnEnumBindingInterfaces,
|
|
|
|
};
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
INetCfgBindingPath_Constructor(
|
|
|
|
IUnknown *pUnkOuter,
|
|
|
|
REFIID riid,
|
|
|
|
LPVOID *ppv)
|
|
|
|
{
|
|
|
|
INetCfgBindingPathImpl *This;
|
|
|
|
|
|
|
|
if (!ppv)
|
|
|
|
return E_POINTER;
|
|
|
|
|
|
|
|
This = (INetCfgBindingPathImpl *)CoTaskMemAlloc(sizeof(INetCfgBindingPathImpl));
|
|
|
|
if (!This)
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
|
|
|
|
This->ref = 1;
|
|
|
|
This->lpVtbl = (const INetCfgBindingPath*)&vt_NetCfgBindingPath;
|
|
|
|
|
|
|
|
if (!SUCCEEDED (INetCfgBindingPath_QueryInterface ((INetCfgBindingPath*)This, riid, ppv)))
|
|
|
|
{
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
}
|
|
|
|
|
|
|
|
INetCfgBindingPath_Release((INetCfgBindingPath*)This);
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***************************************************************
|
|
|
|
* IEnumNetCfgBindingPath
|
|
|
|
*/
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnQueryInterface(
|
|
|
|
IEnumNetCfgBindingPath *iface,
|
|
|
|
REFIID iid,
|
|
|
|
LPVOID *ppvObj)
|
|
|
|
{
|
|
|
|
IEnumNetCfgBindingPathImpl *This = (IEnumNetCfgBindingPathImpl*)iface;
|
|
|
|
*ppvObj = NULL;
|
|
|
|
|
|
|
|
if (IsEqualIID (iid, &IID_IUnknown) ||
|
|
|
|
IsEqualIID (iid, &IID_IEnumNetCfgBindingPath))
|
|
|
|
{
|
|
|
|
*ppvObj = This;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ULONG
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnAddRef(
|
|
|
|
IEnumNetCfgBindingPath *iface)
|
|
|
|
{
|
|
|
|
IEnumNetCfgBindingPathImpl *This = (IEnumNetCfgBindingPathImpl*)iface;
|
|
|
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
|
|
|
|
|
|
|
return refCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
ULONG
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnRelease(
|
|
|
|
IEnumNetCfgBindingPath *iface)
|
|
|
|
{
|
|
|
|
IEnumNetCfgBindingPathImpl *This = (IEnumNetCfgBindingPathImpl*)iface;
|
|
|
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
|
|
|
|
|
|
|
return refCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnNext(
|
|
|
|
IEnumNetCfgBindingPath *iface,
|
|
|
|
ULONG celt,
|
|
|
|
INetCfgBindingPath **rgelt,
|
|
|
|
ULONG *pceltFetched)
|
|
|
|
{
|
|
|
|
#if 0
|
|
|
|
IEnumNetCfgBindingPathImpl *This = (IEnumNetCfgBindingPathImpl*)iface;
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
|
|
if (!iface || !rgelt)
|
|
|
|
return E_POINTER;
|
|
|
|
|
|
|
|
if (celt != 1)
|
|
|
|
return E_INVALIDARG;
|
|
|
|
|
|
|
|
if (!This->pCurrent)
|
|
|
|
return S_FALSE;
|
|
|
|
|
|
|
|
hr = INetCfgBindingPath_Constructor (NULL, &IID_INetCfgComponent, (LPVOID*)rgelt);
|
|
|
|
if (SUCCEEDED(hr))
|
|
|
|
{
|
|
|
|
This->pCurrent = This->pCurrent->pNext;
|
|
|
|
if (pceltFetched)
|
|
|
|
*pceltFetched = 1;
|
|
|
|
}
|
|
|
|
return hr;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnSkip(
|
|
|
|
IEnumNetCfgBindingPath *iface,
|
|
|
|
ULONG celt)
|
|
|
|
{
|
|
|
|
#if 0
|
|
|
|
IEnumNetCfgBindingPathImpl *This = (IEnumNetCfgBindingPathImpl*)iface;
|
|
|
|
|
|
|
|
if (!This->pCurrent)
|
|
|
|
return S_FALSE;
|
|
|
|
|
|
|
|
while (celt-- > 0 && This->pCurrent)
|
|
|
|
This->pCurrent = This->pCurrent->pNext;
|
|
|
|
|
|
|
|
if (!celt)
|
|
|
|
return S_OK;
|
|
|
|
else
|
|
|
|
return S_FALSE;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnReset(
|
|
|
|
IEnumNetCfgBindingPath *iface)
|
|
|
|
{
|
|
|
|
#if 0
|
|
|
|
IEnumNetCfgBindingPathImpl *This = (IEnumNetCfgBindingPathImpl*)iface;
|
|
|
|
|
|
|
|
This->pCurrent = This->pHead;
|
|
|
|
return S_OK;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_fnClone(
|
|
|
|
IEnumNetCfgBindingPath *iface,
|
|
|
|
IEnumNetCfgBindingPath **ppenum)
|
|
|
|
{
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IEnumNetCfgBindingPathVtbl vt_EnumNetCfgBindingPath =
|
|
|
|
{
|
|
|
|
IEnumNetCfgBindingPath_fnQueryInterface,
|
|
|
|
IEnumNetCfgBindingPath_fnAddRef,
|
|
|
|
IEnumNetCfgBindingPath_fnRelease,
|
|
|
|
IEnumNetCfgBindingPath_fnNext,
|
|
|
|
IEnumNetCfgBindingPath_fnSkip,
|
|
|
|
IEnumNetCfgBindingPath_fnReset,
|
|
|
|
IEnumNetCfgBindingPath_fnClone
|
|
|
|
};
|
|
|
|
|
|
|
|
HRESULT
|
|
|
|
WINAPI
|
|
|
|
IEnumNetCfgBindingPath_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv, DWORD dwFlags)
|
|
|
|
{
|
|
|
|
IEnumNetCfgBindingPathImpl *This;
|
|
|
|
|
|
|
|
if (!ppv)
|
|
|
|
return E_POINTER;
|
|
|
|
|
|
|
|
This = (IEnumNetCfgBindingPathImpl *)CoTaskMemAlloc(sizeof(IEnumNetCfgBindingPathImpl));
|
|
|
|
if (!This)
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
|
|
|
|
This->ref = 1;
|
|
|
|
This->lpVtbl = (const IEnumNetCfgBindingPath*)&vt_EnumNetCfgBindingPath;
|
|
|
|
#if 0
|
|
|
|
This->pCurrent = pItem;
|
|
|
|
This->pHead = pItem;
|
|
|
|
This->pNCfg = pNCfg;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if (!SUCCEEDED (IEnumNetCfgBindingPath_QueryInterface((INetCfgBindingPath*)This, riid, ppv)))
|
|
|
|
{
|
|
|
|
IEnumNetCfgBindingPath_Release((INetCfg*)This);
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
}
|
|
|
|
|
|
|
|
IEnumNetCfgBindingPath_Release((IEnumNetCfgBindingPath*)This);
|
|
|
|
return S_OK;
|
|
|
|
}
|