Reactos
1/*
2 * PROJECT: ReactOS Shell
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: ReactOS Networking Configuration
5 * COPYRIGHT: Copyright 2008 Johannes Anderwald (johannes.anderwald@reactos.org)
6 */
7
8#include "precomp.h"
9
10HMODULE g_hModule = NULL;
11
12HINSTANCE netshell_hInstance;
13
14class CNetshellModule : public CComModule
15{
16public:
17};
18
19BEGIN_OBJECT_MAP(ObjectMap)
20 OBJECT_ENTRY(CLSID_NetworkConnections, CNetworkConnections)
21 OBJECT_ENTRY(CLSID_ConnectionManager, CNetConnectionManager)
22 OBJECT_ENTRY(CLSID_LanConnectionUi, CNetConnectionPropertyUi)
23 OBJECT_ENTRY(CLSID_ConnectionTray, CLanStatus)
24END_OBJECT_MAP()
25
26CNetshellModule gModule;
27
28HPROPSHEETPAGE
29InitializePropertySheetPage(LPWSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle)
30{
31 PROPSHEETPAGEW ppage;
32
33 memset(&ppage, 0x0, sizeof(PROPSHEETPAGEW));
34 ppage.dwSize = sizeof(PROPSHEETPAGEW);
35 ppage.dwFlags = PSP_DEFAULT;
36 ppage.pszTemplate = resname;
37 ppage.pfnDlgProc = dlgproc;
38 ppage.lParam = lParam;
39 ppage.hInstance = netshell_hInstance;
40 if (szTitle)
41 {
42 ppage.dwFlags |= PSP_USETITLE;
43 ppage.pszTitle = szTitle;
44 }
45 return CreatePropertySheetPageW(&ppage);
46}
47
48extern "C"
49{
50
51BOOL
52WINAPI
53DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
54{
55 switch (fdwReason)
56 {
57 case DLL_PROCESS_ATTACH:
58 netshell_hInstance = hinstDLL;
59 DisableThreadLibraryCalls(netshell_hInstance);
60 gModule.Init(ObjectMap, netshell_hInstance, NULL);
61 break;
62 default:
63 break;
64 }
65
66 return TRUE;
67}
68
69HRESULT
70WINAPI
71DllCanUnloadNow(void)
72{
73 return S_FALSE;
74}
75
76STDAPI
77DllRegisterServer(void)
78{
79 HRESULT hr;
80
81 hr = gModule.DllRegisterServer(FALSE);
82 if (FAILED_UNEXPECTEDLY(hr))
83 return hr;
84
85 hr = gModule.UpdateRegistryFromResource(IDR_NETSHELL, TRUE, NULL);
86 if (FAILED_UNEXPECTEDLY(hr))
87 return hr;
88
89 return S_OK;
90}
91
92STDAPI
93DllUnregisterServer(void)
94{
95 HRESULT hr;
96
97 hr = gModule.DllUnregisterServer(FALSE);
98 if (FAILED_UNEXPECTEDLY(hr))
99 return hr;
100
101 hr = gModule.UpdateRegistryFromResource(IDR_NETSHELL, FALSE, NULL);
102 if (FAILED_UNEXPECTEDLY(hr))
103 return hr;
104
105 return S_OK;
106}
107
108STDAPI
109DllGetClassObject(
110 REFCLSID rclsid,
111 REFIID riid,
112 LPVOID *ppv)
113{
114 return gModule.DllGetClassObject(rclsid, riid, ppv);
115}
116
117VOID
118WINAPI
119NcFreeNetconProperties(NETCON_PROPERTIES *pProps)
120{
121 CoTaskMemFree(pProps->pszwName);
122 CoTaskMemFree(pProps->pszwDeviceName);
123 CoTaskMemFree(pProps);
124}
125
126BOOL
127WINAPI
128NcIsValidConnectionName(_In_ PCWSTR pszwName)
129{
130 if (!pszwName)
131 return FALSE;
132
133 BOOL nonSpace = FALSE;
134 while (*pszwName)
135 {
136 switch(*(pszwName++))
137 {
138 case L'\\':
139 case L'/':
140 case L':':
141 case L'*':
142 case L'\t':
143 case L'?':
144 case L'<':
145 case L'>':
146 case L'|':
147 case L'\"':
148 return FALSE;
149 case L' ':
150 break;
151 default:
152 nonSpace = TRUE;
153 break;
154 }
155 }
156 return nonSpace;
157}
158
159} // extern "C"