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