windows-nt/Source/XPSP1/NT/net/config/netcfg/engine/ibind.h
2020-09-26 16:20:57 +08:00

167 lines
3.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1999.
//
// File: I B I N D . H
//
// Contents: Implements the INetCfgBindingInterface and INetCfgBindingPath
// COM interfaces.
//
// Notes:
//
// Author: shaunco 15 Jan 1999
//
//----------------------------------------------------------------------------
#pragma once
#include "bindings.h"
#include "iatl.h"
#include "ienum.h"
#include "icomp.h"
#include "inetcfg.h"
//+---------------------------------------------------------------------------
// INetCfgBindingInterface -
//
class ATL_NO_VTABLE CImplINetCfgBindingInterface :
public CImplINetCfgHolder,
public INetCfgBindingInterface
{
private:
CImplINetCfgComponent* m_pUpper;
CImplINetCfgComponent* m_pLower;
private:
HRESULT HrLockAndTestForValidInterface (
DWORD dwFlags);
public:
CImplINetCfgBindingInterface ()
{
m_pUpper = NULL;
m_pLower = NULL;
}
VOID FinalRelease ()
{
AssertH (m_pUpper);
AssertH (m_pLower);
ReleaseObj (m_pUpper->GetUnknown());
ReleaseObj (m_pLower->GetUnknown());
CImplINetCfgHolder::FinalRelease();
}
BEGIN_COM_MAP(CImplINetCfgBindingInterface)
COM_INTERFACE_ENTRY(INetCfgBindingInterface)
END_COM_MAP()
// INetCfgBindingInterface
//
STDMETHOD (GetName) (
OUT PWSTR* ppszInterfaceName);
STDMETHOD (GetUpperComponent) (
OUT INetCfgComponent** ppComp);
STDMETHOD (GetLowerComponent) (
OUT INetCfgComponent** ppComp);
public:
static HRESULT HrCreateInstance (
IN CImplINetCfg* pINetCfg,
IN CImplINetCfgComponent* pUpper,
IN CImplINetCfgComponent* pLower,
OUT INetCfgBindingInterface** ppv);
};
//+---------------------------------------------------------------------------
// INetCfgBindingPath -
//
class ATL_NO_VTABLE CImplINetCfgBindingPath :
public CImplINetCfgHolder,
public INetCfgBindingPath
{
friend class CImplIEnumNetCfgBindingInterface;
private:
// Note: For code coverage, we keep the static array small to
// test the case where we don't fit and have to allocate.
// Make this number 8 after we test both cases.
//
INetCfgComponent* m_apIComp [8];
INetCfgComponent** m_papIComp;
ULONG m_cpIComp;
private:
HRESULT HrLockAndTestForValidInterface (
IN DWORD dwFlags,
OUT CBindPath* pBindPath);
public:
CImplINetCfgBindingPath ()
{
m_papIComp = NULL;
m_cpIComp = 0;
}
VOID FinalRelease ()
{
AssertH (m_cpIComp);
AssertH (m_papIComp);
ReleaseIUnknownArray (m_cpIComp, (IUnknown**)m_papIComp);
// If we are not using our static array, free what we allocated.
//
if (m_papIComp != m_apIComp)
{
MemFree (m_papIComp);
}
CImplINetCfgHolder::FinalRelease();
}
HRESULT
HrIsValidInterface (
IN DWORD dwFlags,
OUT CBindPath* pBindPath);
BEGIN_COM_MAP(CImplINetCfgBindingPath)
COM_INTERFACE_ENTRY(INetCfgBindingPath)
END_COM_MAP()
// INetCfgBindingPath
//
STDMETHOD (IsSamePathAs) (
IN INetCfgBindingPath* pIPath);
STDMETHOD (IsSubPathOf) (
IN INetCfgBindingPath* pIPath);
STDMETHOD (IsEnabled) ();
STDMETHOD (Enable) (
IN BOOL fEnable);
STDMETHOD (GetPathToken) (
OUT PWSTR* ppszPathToken);
STDMETHOD (GetOwner) (
OUT INetCfgComponent** ppIComp);
STDMETHOD (GetDepth) (
OUT ULONG* pulDepth);
STDMETHOD (EnumBindingInterfaces) (
OUT IEnumNetCfgBindingInterface** ppIEnum);
public:
static HRESULT HrCreateInstance (
IN CImplINetCfg* pINetCfg,
IN const CBindPath* pBindPath,
OUT INetCfgBindingPath** ppIPath);
};