#pragma once #include "hnetbcon.h" #include "nmbase.h" #include "nmres.h" #include "HNetCfg.h" extern LONG g_CountSharedAccessConnectionObjects; HRESULT InvokeVoidAction(IUPnPService * pService, LPTSTR pszCommand, VARIANT* pOutParams); class ATL_NO_VTABLE CSharedAccessConnection : public CComObjectRootEx , public CComCoClass , public INetConnection, public INetSharedAccessConnection, public IPersistNetConnection { public: DECLARE_REGISTRY_RESOURCEID(IDR_SA_CONNECTION) BEGIN_COM_MAP(CSharedAccessConnection) COM_INTERFACE_ENTRY(INetConnection) COM_INTERFACE_ENTRY(INetSharedAccessConnection) COM_INTERFACE_ENTRY(IPersistNetConnection) END_COM_MAP() CSharedAccessConnection(); HRESULT GetStatus(NETCON_STATUS* pStatus); HRESULT GetCharacteristics(DWORD* pdwFlags); // // INetConnection // STDMETHOD(Connect)(); STDMETHOD(Disconnect)(); STDMETHOD(Delete)(); STDMETHOD(Duplicate) (PCWSTR pszwDuplicateName, INetConnection** ppCon); STDMETHOD(GetProperties) (NETCON_PROPERTIES** ppProps); STDMETHOD(GetUiObjectClassId)(CLSID *pclsid); STDMETHOD(Rename)(PCWSTR pszwNewName); // // INetSharedAccessConnection // STDMETHOD(GetInfo)(DWORD dwMask, SHAREDACCESSCON_INFO* pConInfo); STDMETHOD(SetInfo)(DWORD dwMask, const SHAREDACCESSCON_INFO* pConInfo); STDMETHODIMP GetLocalAdapterGUID(GUID* pGuid); STDMETHODIMP GetService(SAHOST_SERVICES ulService, IUPnPService** ppService); // // IPersistNetConnection // STDMETHOD(GetClassID)(CLSID *pclsid); STDMETHOD(GetSizeMax)(ULONG *pcbSize); STDMETHOD(Load)(const BYTE *pbBuf, ULONG cbSize); STDMETHOD(Save)(BYTE *pbBuf, ULONG cbSize); // // Overrides // HRESULT FinalConstruct(void); HRESULT FinalRelease(void); private: HRESULT GetConnectionName(LPWSTR* pName); HRESULT GetStringStateVariable(IUPnPService* pService, LPWSTR pszVariableName, BSTR* pString); ISharedAccessBeacon* m_pSharedAccessBeacon; IUPnPService* m_pWANConnectionService; };