xref: /reactos/dll/shellext/netshell/netshell.cpp (revision f7cab5a1)
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 
10 HMODULE g_hModule = NULL;
11 
12 HINSTANCE netshell_hInstance;
13 
14 class CNetshellModule : public CComModule
15 {
16 public:
17 };
18 
19 BEGIN_OBJECT_MAP(ObjectMap)
20     OBJECT_ENTRY(CLSID_ConnectionFolder, CNetworkConnections)
21     OBJECT_ENTRY(CLSID_ConnectionManager, CNetConnectionManager)
22     OBJECT_ENTRY(CLSID_LanConnectionUi, CNetConnectionPropertyUi)
23     OBJECT_ENTRY(CLSID_ConnectionTray, CLanStatus)
24 END_OBJECT_MAP()
25 
26 CNetshellModule gModule;
27 
28 HPROPSHEETPAGE
29 InitializePropertySheetPage(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 
48 extern "C"
49 {
50 
51 BOOL
52 WINAPI
53 DllMain(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 
69 HRESULT
70 WINAPI
71 DllCanUnloadNow(void)
72 {
73     return S_FALSE;
74 }
75 
76 STDAPI
77 DllRegisterServer(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 
92 STDAPI
93 DllUnregisterServer(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 
108 STDAPI
109 DllGetClassObject(
110   REFCLSID rclsid,
111   REFIID riid,
112   LPVOID *ppv)
113 {
114     return gModule.DllGetClassObject(rclsid, riid, ppv);
115 }
116 
117 VOID
118 WINAPI
119 NcFreeNetconProperties(NETCON_PROPERTIES *pProps)
120 {
121     CoTaskMemFree(pProps->pszwName);
122     CoTaskMemFree(pProps->pszwDeviceName);
123     CoTaskMemFree(pProps);
124 }
125 
126 BOOL
127 WINAPI
128 NcIsValidConnectionName(_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"
160