[NETSHELL] Use ATL
[reactos.git] / dll / shellext / netshell / connectmanager.h
diff --git a/dll/shellext/netshell/connectmanager.h b/dll/shellext/netshell/connectmanager.h
new file mode 100644 (file)
index 0000000..a4a8329
--- /dev/null
@@ -0,0 +1,75 @@
+
+typedef struct tagINetConnectionItem
+{
+    struct tagINetConnectionItem * Next;
+    DWORD dwAdapterIndex;
+    NETCON_PROPERTIES    Props;
+} INetConnectionItem, *PINetConnectionItem;
+
+class CNetConnectionManager:
+    public CComCoClass<CNetConnectionManager, &CLSID_ConnectionManager>,
+    public CComObjectRootEx<CComMultiThreadModelNoCS>,
+    public INetConnectionManager,
+    public IEnumNetConnection
+{
+    public:
+        CNetConnectionManager();
+        HRESULT Initialize();
+        HRESULT EnumerateINetConnections();
+
+        // INetConnectionManager
+        virtual HRESULT WINAPI EnumConnections(NETCONMGR_ENUM_FLAGS Flags, IEnumNetConnection **ppEnum);
+
+        // IEnumNetConnection
+        virtual HRESULT WINAPI Next(ULONG celt, INetConnection **rgelt, ULONG *pceltFetched);
+        virtual HRESULT WINAPI Skip(ULONG celt);
+        virtual HRESULT WINAPI Reset();
+        virtual HRESULT WINAPI Clone(IEnumNetConnection **ppenum);
+
+    private:
+        PINetConnectionItem m_pHead;
+        PINetConnectionItem m_pCurrent;
+
+    public:
+        DECLARE_NO_REGISTRY()
+        DECLARE_NOT_AGGREGATABLE(CNetConnectionManager)
+        DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+        BEGIN_COM_MAP(CNetConnectionManager)
+            COM_INTERFACE_ENTRY_IID(IID_INetConnectionManager, INetConnectionManager)
+            COM_INTERFACE_ENTRY_IID(IID_IEnumNetConnection, IEnumNetConnection)
+        END_COM_MAP()
+};
+
+class CNetConnection:
+    public CComObjectRootEx<CComMultiThreadModelNoCS>,
+    public INetConnection
+{
+    private:
+        NETCON_PROPERTIES m_Props;
+        DWORD m_dwAdapterIndex;
+
+    public:
+       ~CNetConnection();
+        HRESULT WINAPI Initialize(PINetConnectionItem pItem);
+
+        // INetConnection
+        HRESULT WINAPI Connect();
+        HRESULT WINAPI Disconnect();
+        HRESULT WINAPI Delete();
+        HRESULT WINAPI Duplicate(LPCWSTR pszwDuplicateName, INetConnection **ppCon);
+        HRESULT WINAPI GetProperties(NETCON_PROPERTIES **ppProps);
+        HRESULT WINAPI GetUiObjectClassId(CLSID *pclsid);
+        HRESULT WINAPI Rename(LPCWSTR pszwDuplicateName);
+
+        DECLARE_NOT_AGGREGATABLE(CNetConnection)
+        DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+        BEGIN_COM_MAP(CNetConnection)
+            COM_INTERFACE_ENTRY_IID(IID_INetConnection, INetConnection)
+        END_COM_MAP()
+};
+
+BOOL GetAdapterIndexFromNetCfgInstanceId(PIP_ADAPTER_INFO pAdapterInfo, LPWSTR szNetCfg, PDWORD pIndex);
+HRESULT WINAPI CNetConnectionManager_CreateInstance(REFIID riid, LPVOID * ppv);
+