#pragma once #include "nmbase.h" #include "nmres.h" extern LONG g_CountLanConnectionEnumerators; class ATL_NO_VTABLE CLanConnectionManagerEnumConnection : public CComObjectRootEx , public CComCoClass , public IEnumNetConnection { private: HDEVINFO m_hdi; DWORD m_dwIndex; public: CLanConnectionManagerEnumConnection() { m_hdi = NULL; m_dwIndex = 0; InterlockedIncrement(&g_CountLanConnectionEnumerators); } ~CLanConnectionManagerEnumConnection(); DECLARE_REGISTRY_RESOURCEID(IDR_LAN_CONMAN_ENUM) BEGIN_COM_MAP(CLanConnectionManagerEnumConnection) COM_INTERFACE_ENTRY(IEnumNetConnection) END_COM_MAP() // IEnumNetConnection STDMETHOD(Next)(ULONG celt, INetConnection **rgelt, ULONG *pceltFetched); STDMETHOD(Skip)(ULONG celt); STDMETHOD(Reset)(); STDMETHOD(Clone)(IEnumNetConnection **ppenum); private: // // Private functions // HRESULT HrNextOrSkip(ULONG celt, INetConnection **rgelt, ULONG *pceltFetched); HRESULT HrCreateLanConnectionInstance(SP_DEVINFO_DATA &deid, INetConnection **rgelt, ULONG ulEntry); public: static HRESULT CreateInstance(NETCONMGR_ENUM_FLAGS Flags, REFIID riid, LPVOID *ppv); }; // // Helper functions // BOOL FIsValidNetCfgDevice(HKEY hkey); HRESULT HrIsLanCapableAdapterFromHkey(HKEY hkey); BOOL FIsFunctioning(SP_DEVINFO_DATA * pdeid);