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

206 lines
4.7 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1999.
//
// File: I E N U M . H
//
// Contents: Implements the IEnumNetCfgBindingInterface,
// IEnumNetCfgBindingPath, and IEnumNetCfgComponent COM
// interfaces.
//
// Notes:
//
// Author: shaunco 15 Jan 1999
//
//----------------------------------------------------------------------------
#pragma once
#include "bindings.h"
#include "compdefs.h"
#include "complist.h"
#include "iatl.h"
#include "inetcfg.h"
//+---------------------------------------------------------------------------
// IEnumNetCfgBindingInterface -
//
class ATL_NO_VTABLE CImplIEnumNetCfgBindingInterface :
public CImplINetCfgHolder,
public IEnumNetCfgBindingInterface
{
private:
class CImplINetCfgBindingPath* m_pIPath;
UINT m_unIndex;
private:
HRESULT
HrNextOrSkip (
IN ULONG celt,
OUT INetCfgBindingInterface** rgelt,
OUT ULONG* pceltFetched);
public:
CImplIEnumNetCfgBindingInterface ()
{
m_pIPath = NULL;
m_unIndex = 1;
}
VOID FinalRelease ();
BEGIN_COM_MAP(CImplIEnumNetCfgBindingInterface)
COM_INTERFACE_ENTRY(IEnumNetCfgBindingInterface)
END_COM_MAP()
// IEnumNetCfgBindingInterface
STDMETHOD (Next) (
IN ULONG celt,
OUT INetCfgBindingInterface** rgelt,
OUT ULONG* pceltFetched);
STDMETHOD (Skip) (
IN ULONG celt);
STDMETHOD (Reset) ();
STDMETHOD (Clone) (
OUT IEnumNetCfgBindingInterface** ppIEnum);
public:
static HRESULT HrCreateInstance (
IN CImplINetCfg* pINetCfg,
IN class CImplINetCfgBindingPath* pIPath,
OUT IEnumNetCfgBindingInterface** ppIEnum);
};
//+---------------------------------------------------------------------------
// IEnumNetCfgBindingPath -
//
enum EBPC_FLAGS
{
EBPC_CREATE_EMPTY = 0x00000001,
EBPC_COPY_BINDSET = 0x00000002,
EBPC_TAKE_OWNERSHIP = 0x00000004,
};
class ATL_NO_VTABLE CImplIEnumNetCfgBindingPath :
public CImplINetCfgHolder,
public IEnumNetCfgBindingPath
{
friend CImplINetCfgComponent;
private:
CBindingSet m_InternalBindSet;
// m_pBindSet is the pointer through which we access the data being
// enumerated. It will either point to m_InternalBindSet above or some
// other bindset that we were given ownership of via HrCreateInstance.
//
const CBindingSet* m_pBindSet;
// The current enumeration position.
//
CBindingSet::const_iterator m_iter;
private:
HRESULT
HrNextOrSkip (
IN ULONG celt,
OUT INetCfgBindingPath** rgelt,
OUT ULONG* pceltFetched);
public:
CImplIEnumNetCfgBindingPath ()
{
m_pBindSet = NULL;
m_iter = NULL;
}
~CImplIEnumNetCfgBindingPath ()
{
// Delete m_pBindSet if we own it. (If it's not aliasing a copied
// bindset.)
//
if (&m_InternalBindSet != m_pBindSet)
{
delete m_pBindSet;
}
}
BEGIN_COM_MAP(CImplIEnumNetCfgBindingPath)
COM_INTERFACE_ENTRY(IEnumNetCfgBindingPath)
END_COM_MAP()
// IEnumNetCfgBindingPath
STDMETHOD (Next) (
IN ULONG celt,
OUT INetCfgBindingPath** rgelt,
OUT ULONG* pceltFetched);
STDMETHOD (Skip) (
IN ULONG celt);
STDMETHOD (Reset) ();
STDMETHOD (Clone) (
OUT IEnumNetCfgBindingPath** ppIEnum);
public:
static HRESULT HrCreateInstance (
IN CImplINetCfg* pINetCfg,
IN const CBindingSet* pBindSet OPTIONAL,
IN DWORD dwFlags,
OUT CImplIEnumNetCfgBindingPath** ppIEnum);
};
//+---------------------------------------------------------------------------
// IEnumNetCfgComponent -
//
class ATL_NO_VTABLE CImplIEnumNetCfgComponent :
public CImplINetCfgHolder,
public IEnumNetCfgComponent
{
private:
UINT m_unIndex;
NETCLASS m_Class;
private:
HRESULT
HrNextOrSkip (
IN ULONG celt,
OUT INetCfgComponent** rgelt,
OUT ULONG* pceltFetched);
public:
CImplIEnumNetCfgComponent ()
{
m_unIndex = 0;
}
BEGIN_COM_MAP(CImplIEnumNetCfgComponent)
COM_INTERFACE_ENTRY(IEnumNetCfgComponent)
END_COM_MAP()
// IEnumNetCfgComponent
STDMETHOD (Next) (
IN ULONG celt,
OUT INetCfgComponent** rgelt,
OUT ULONG* pceltFetched);
STDMETHOD (Skip) (
IN ULONG celt);
STDMETHOD (Reset) ();
STDMETHOD (Clone) (
OUT IEnumNetCfgComponent** ppIEnum);
public:
static HRESULT HrCreateInstance (
IN CImplINetCfg* pINetCfg,
IN NETCLASS Class,
OUT IEnumNetCfgComponent** ppIEnum);
};