ReactOS 0.4.15-dev-7918-g2a2556c
CNetConnection Class Reference

#include <connectmanager.h>

Inheritance diagram for CNetConnection:
Collaboration diagram for CNetConnection:

Public Member Functions

 ~CNetConnection ()
 
HRESULT WINAPI Initialize (PINetConnectionItem pItem)
 
STDMETHOD() Connect () override
 
STDMETHOD() Disconnect () override
 
STDMETHOD() Delete () override
 
STDMETHOD() Duplicate (LPCWSTR pszwDuplicateName, INetConnection **ppCon) override
 
STDMETHOD() GetProperties (NETCON_PROPERTIES **ppProps) override
 
STDMETHOD() GetUiObjectClassId (CLSID *pclsid) override
 
STDMETHOD() Rename (LPCWSTR pszwDuplicateName) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT Connect ()
 
HRESULT Disconnect ()
 
HRESULT Delete ()
 
HRESULT Duplicate ([in, string] LPCWSTR pszwDuplicateName, [out] INetConnection **ppCon)
 
HRESULT GetProperties ([out] NETCON_PROPERTIES **ppProps)
 
HRESULT GetUiObjectClassId ([out, ref] CLSID *pclsid)
 
HRESULT Rename ([in, string] LPCWSTR pszwNewName)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Private Attributes

NETCON_PROPERTIES m_Props
 
DWORD m_dwAdapterIndex
 

Additional Inherited Members

- Public Types inherited from INetConnection
enum  tagNETCON_CHARACTERISTIC_FLAGS {
  NCCF_NONE = 0x0000 , NCCF_ALL_USERS = 0x0001 , NCCF_ALLOW_DUPLICATION = 0x0002 , NCCF_ALLOW_REMOVAL = 0x0004 ,
  NCCF_ALLOW_RENAME = 0x0008 , NCCF_INCOMING_ONLY = 0x0020 , NCCF_OUTGOING_ONLY = 0x0040 , NCCF_BRANDED = 0x0080 ,
  NCCF_SHARED = 0x0100 , NCCF_BRIDGED = 0x0200 , NCCF_FIREWALLED = 0x0400 , NCCF_DEFAULT = 0x0800 ,
  NCCF_HOMENET_CAPABLE = 0x1000 , NCCF_SHARED_PRIVATE = 0x2000 , NCCF_QUARANTINED = 0x4000 , NCCF_RESERVED = 0x8000 ,
  NCCF_BLUETOOTH_MASK = 0x000F0000 , NCCF_LAN_MASK = 0x00F00000
}
 
enum  tagNETCON_STATUS {
  NCS_DISCONNECTED , NCS_CONNECTING , NCS_CONNECTED , NCS_DISCONNECTING ,
  NCS_HARDWARE_NOT_PRESENT , NCS_HARDWARE_DISABLED , NCS_HARDWARE_MALFUNCTION , NCS_MEDIA_DISCONNECTED ,
  NCS_AUTHENTICATING , NCS_AUTHENTICATION_SUCCEEDED , NCS_AUTHENTICATION_FAILED , NCS_INVALID_ADDRESS ,
  NCS_CREDENTIALS_REQUIRED
}
 
enum  tagNETCON_TYPE {
  NCT_DIRECT_CONNECT , NCT_INBOUND , NCT_INTERNET , NCT_LAN ,
  NCT_PHONE , NCT_TUNNEL , NCT_BRIDGE
}
 
enum  tagNETCON_MEDIATYPE {
  NCM_NONE , NCM_DIRECT , NCM_ISDN , NCM_LAN ,
  NCM_PHONE , NCM_TUNNEL , NCM_PPPOE , NCM_BRIDGE ,
  NCM_SHAREDACCESSHOST_LAN , NCM_SHAREDACCESSHOST_RAS
}
 
typedef enum INetConnection::tagNETCON_CHARACTERISTIC_FLAGS NETCON_CHARACTERISTIC_FLAGS
 
typedef enum INetConnection::tagNETCON_STATUS NETCON_STATUS
 
typedef enum INetConnection::tagNETCON_TYPE NETCON_TYPE
 
typedef enum INetConnection::tagNETCON_MEDIATYPE NETCON_MEDIATYPE
 
typedef struct INetConnection::tagNETCON_PROPERTIES NETCON_PROPERTIES
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 44 of file connectmanager.h.

Constructor & Destructor Documentation

◆ ~CNetConnection()

CNetConnection::~CNetConnection ( )

Definition at line 40 of file connectmanager.cpp.

41{
44}
NETCON_PROPERTIES m_Props
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442

Member Function Documentation

◆ Connect()

HRESULT WINAPI CNetConnection::Connect ( )
override

Implements INetConnection.

Definition at line 48 of file connectmanager.cpp.

49{
50 return E_NOTIMPL;
51}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ Delete()

HRESULT WINAPI CNetConnection::Delete ( )
override

Implements INetConnection.

Definition at line 192 of file connectmanager.cpp.

193{
194 return E_NOTIMPL;
195}

◆ Disconnect()

HRESULT WINAPI CNetConnection::Disconnect ( )
override

Implements INetConnection.

Definition at line 98 of file connectmanager.cpp.

99{
100 HKEY hKey;
101 NETCON_PROPERTIES * pProperties;
102 LPOLESTR pDisplayName;
103 WCHAR szPath[200];
104 DWORD dwSize, dwType;
105 LPWSTR pPnp;
106 HDEVINFO hInfo;
107 SP_DEVINFO_DATA DevInfo;
108 SP_PROPCHANGE_PARAMS PropChangeParams;
109 HRESULT hr;
110
111 hr = GetProperties(&pProperties);
113 return hr;
114
115 hInfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_NET, NULL, NULL, DIGCF_PRESENT );
116 if (!hInfo)
117 {
118 NcFreeNetconProperties(pProperties);
119 return E_FAIL;
120 }
121
122 if (FAILED(StringFromCLSID((CLSID)pProperties->guidId, &pDisplayName)))
123 {
124 NcFreeNetconProperties(pProperties);
126 return E_FAIL;
127 }
128 NcFreeNetconProperties(pProperties);
129
130 if (FindNetworkAdapter(hInfo, &DevInfo, pDisplayName))
131 {
132 PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
134 PropChangeParams.StateChange = DICS_DISABLE;
135 PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC;
136 PropChangeParams.HwProfile = 0;
137
138 if (!SetupDiSetClassInstallParams(hInfo, &DevInfo, &PropChangeParams.ClassInstallHeader, sizeof(SP_PROPCHANGE_PARAMS)) ||
140 {
142 }
143 }
145
146 swprintf(szPath, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", pDisplayName);
147 CoTaskMemFree(pDisplayName);
148
150 return hr;
151
153 return E_FAIL;
154
155 dwSize = 0;
156 if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS || dwType != REG_SZ)
157 {
159 return E_FAIL;
160 }
161
162 pPnp = static_cast<PWSTR>(CoTaskMemAlloc(dwSize));
163 if (!pPnp)
164 {
166 return E_FAIL;
167 }
168
169 if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, (LPBYTE)pPnp, &dwSize) != ERROR_SUCCESS)
170 {
171 CoTaskMemFree(pPnp);
173 return E_FAIL;
174 }
176
177 swprintf(szPath, L"System\\CurrentControlSet\\Hardware Profiles\\Current\\System\\CurrentControlSet\\Enum\\%s", pPnp);
178 CoTaskMemFree(pPnp);
179
181 return E_FAIL;
182
183 dwSize = 1; /* enable = 0, disable = 1 */
184 RegSetValueExW(hKey, L"CSConfigFlags", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD));
186
187 return S_OK;
188}
#define RegCloseKey(hKey)
Definition: registry.h:49
STDMETHOD() GetProperties(NETCON_PROPERTIES **ppProps) override
BOOL FindNetworkAdapter(HDEVINFO hInfo, SP_DEVINFO_DATA *pDevInfo, LPWSTR pGuid)
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION InstallFunction, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
Definition: devinst.c:4024
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *class, LPCWSTR enumstr, HWND parent, DWORD flags)
Definition: devinst.c:2292
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
Definition: devinst.c:2893
#define swprintf
Definition: precomp.h:40
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define REG_SZ
Definition: layer.c:22
LPCWSTR szPath
Definition: env.c:37
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static LPOLESTR
Definition: stg_prop.c:27
VOID WINAPI NcFreeNetconProperties(NETCON_PROPERTIES *pProps)
Definition: netshell.cpp:119
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_WRITE
Definition: nt_native.h:1031
#define L(x)
Definition: ntvdm.h:50
#define REG_DWORD
Definition: sdbapi.c:596
struct _SP_CLASSINSTALL_HEADER SP_CLASSINSTALL_HEADER
#define SetupDiSetClassInstallParams
Definition: setupapi.h:2617
#define DICS_DISABLE
Definition: setupapi.h:114
#define DICS_FLAG_CONFIGSPECIFIC
Definition: setupapi.h:115
#define DIGCF_PRESENT
Definition: setupapi.h:171
#define DIF_PROPERTYCHANGE
Definition: setupapi.h:137
HRESULT hr
Definition: shlfolder.c:183
DI_FUNCTION InstallFunction
Definition: setupapi.h:904
SP_CLASSINSTALL_HEADER ClassInstallHeader
Definition: setupapi.h:916
uint16_t * PWSTR
Definition: typedefs.h:56
unsigned char * LPBYTE
Definition: typedefs.h:53
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ Duplicate()

HRESULT WINAPI CNetConnection::Duplicate ( LPCWSTR  pszwDuplicateName,
INetConnection **  ppCon 
)
override

Implements INetConnection.

Definition at line 199 of file connectmanager.cpp.

202{
203 return E_NOTIMPL;
204}

◆ GetProperties()

HRESULT WINAPI CNetConnection::GetProperties ( NETCON_PROPERTIES **  ppProps)
override

Implements INetConnection.

Definition at line 208 of file connectmanager.cpp.

209{
210 MIB_IFROW IfEntry;
211 HKEY hKey;
212 LPOLESTR pStr;
213 WCHAR szName[140];
214 DWORD dwShowIcon, dwNotifyDisconnect, dwType, dwSize;
215 NETCON_PROPERTIES * pProperties;
216 HRESULT hr;
217
218 if (!ppProps)
219 return E_POINTER;
220
221 pProperties = static_cast<NETCON_PROPERTIES*>(CoTaskMemAlloc(sizeof(NETCON_PROPERTIES)));
222 if (!pProperties)
223 return E_OUTOFMEMORY;
224
225 CopyMemory(pProperties, &m_Props, sizeof(NETCON_PROPERTIES));
226 pProperties->pszwName = NULL;
227
229 {
230 pProperties->pszwDeviceName = static_cast<LPWSTR>(CoTaskMemAlloc((wcslen(m_Props.pszwDeviceName)+1)*sizeof(WCHAR)));
231 if (pProperties->pszwDeviceName)
233 }
234
235 *ppProps = pProperties;
236
237 /* get updated adapter characteristics */
238 ZeroMemory(&IfEntry, sizeof(IfEntry));
239 IfEntry.dwIndex = m_dwAdapterIndex;
240 if (GetIfEntry(&IfEntry) != NO_ERROR)
241 return NOERROR;
242
243 NormalizeOperStatus(&IfEntry, pProperties);
244
245
247 if (SUCCEEDED(hr))
248 {
249 wcscpy(szName, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\");
250 wcscat(szName, pStr);
251 wcscat(szName, L"\\Connection");
252
254 {
255 dwSize = sizeof(dwShowIcon);
256 if (RegQueryValueExW(hKey, L"ShowIcon", NULL, &dwType, (LPBYTE)&dwShowIcon, &dwSize) == ERROR_SUCCESS && dwType == REG_DWORD)
257 {
258 if (dwShowIcon)
259 pProperties->dwCharacter |= NCCF_SHOW_ICON;
260 else
261 pProperties->dwCharacter &= ~NCCF_SHOW_ICON;
262 }
263
264 dwSize = sizeof(dwNotifyDisconnect);
265 if (RegQueryValueExW(hKey, L"IpCheckingEnabled", NULL, &dwType, (LPBYTE)&dwNotifyDisconnect, &dwSize) == ERROR_SUCCESS && dwType == REG_DWORD)
266 {
267 if (dwNotifyDisconnect)
269 else
270 pProperties->dwCharacter &= ~NCCF_NOTIFY_DISCONNECTED;
271 }
272
273 dwSize = sizeof(szName);
274 if (RegQueryValueExW(hKey, L"Name", NULL, &dwType, (LPBYTE)szName, &dwSize) == ERROR_SUCCESS)
275 {
276 /* use updated name */
277 dwSize = wcslen(szName) + 1;
278 pProperties->pszwName = static_cast<PWSTR>(CoTaskMemAlloc(dwSize * sizeof(WCHAR)));
279 if (pProperties->pszwName)
280 CopyMemory(pProperties->pszwName, szName, dwSize * sizeof(WCHAR));
281 }
282 else
283 {
284 /* use cached name */
285 if (m_Props.pszwName)
286 {
287 pProperties->pszwName = static_cast<PWSTR>(CoTaskMemAlloc((wcslen(m_Props.pszwName)+1)*sizeof(WCHAR)));
288 if (pProperties->pszwName)
289 wcscpy(pProperties->pszwName, m_Props.pszwName);
290 }
291 }
293 }
294 CoTaskMemFree(pStr);
295 }
296
297 /* Enable 'Rename' and 'Delete' for Adminstrators only */
298 if (IsUserAdmin())
299 {
300 pProperties->dwCharacter |= NCCF_ALLOW_RENAME;
301
302 /* Virtual network interfaces can be deleted */
303 if (IfEntry.dwType == IF_TYPE_TUNNEL)
304 {
305 pProperties->dwCharacter |= NCCF_ALLOW_REMOVAL;
306 }
307 }
308 else
309 {
311 }
312
313 return S_OK;
314}
DWORD m_dwAdapterIndex
VOID NormalizeOperStatus(MIB_IFROW *IfEntry, NETCON_PROPERTIES *Props)
#define NO_ERROR
Definition: dderror.h:5
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NCCF_NOTIFY_DISCONNECTED
Definition: precomp.h:76
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
@ NCCF_ALLOW_REMOVAL
Definition: netcon.idl:40
@ NCCF_ALLOW_RENAME
Definition: netcon.idl:41
#define SUCCEEDED(hr)
Definition: intsafe.h:50
DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow)
#define IF_TYPE_TUNNEL
Definition: ipifcons.h:151
@ NCCF_SHOW_ICON
Definition: netcon.h:20
static BOOL IsUserAdmin(VOID)
Definition: netid.c:163
static const WCHAR szName[]
Definition: powrprof.c:45
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
DWORD dwType
Definition: ifmib.h:39
DWORD dwIndex
Definition: ifmib.h:38
LPWSTR pszwDeviceName
Definition: netcon.h:85
#define ZeroMemory
Definition: winbase.h:1712
#define CopyMemory
Definition: winbase.h:1710
#define NOERROR
Definition: winerror.h:2354
#define E_POINTER
Definition: winerror.h:2365

Referenced by Disconnect().

◆ GetUiObjectClassId()

HRESULT WINAPI CNetConnection::GetUiObjectClassId ( CLSID pclsid)
override

Implements INetConnection.

Definition at line 318 of file connectmanager.cpp.

319{
321 {
322 CopyMemory(pclsid, &CLSID_LanConnectionUi, sizeof(CLSID));
323 return S_OK;
324 }
325
326 return E_NOTIMPL;
327}

◆ Initialize()

HRESULT WINAPI CNetConnection::Initialize ( PINetConnectionItem  pItem)

Definition at line 18 of file connectmanager.cpp.

19{
20 m_Props = pItem->Props;
22
23 if (pItem->Props.pszwName)
24 {
25 m_Props.pszwName = static_cast<PWSTR>(CoTaskMemAlloc((wcslen(pItem->Props.pszwName)+1)*sizeof(WCHAR)));
26 if (m_Props.pszwName)
28 }
29
30 if (pItem->Props.pszwDeviceName)
31 {
32 m_Props.pszwDeviceName = static_cast<PWSTR>(CoTaskMemAlloc((wcslen(pItem->Props.pszwDeviceName)+1)*sizeof(WCHAR)));
35 }
36
37 return S_OK;
38}
NETCON_PROPERTIES Props
Definition: connectmanager.h:6

◆ Rename()

HRESULT WINAPI CNetConnection::Rename ( LPCWSTR  pszwDuplicateName)
override

Implements INetConnection.

Definition at line 331 of file connectmanager.cpp.

332{
333 WCHAR szName[140];
334 LPOLESTR pStr;
336 HKEY hKey;
337 HRESULT hr;
338
339 if (pszwDuplicateName == NULL || wcslen(pszwDuplicateName) == 0)
340 return S_OK;
341
342 if (m_Props.pszwName)
343 {
346 }
347
348 dwSize = (wcslen(pszwDuplicateName) + 1) * sizeof(WCHAR);
349 m_Props.pszwName = static_cast<PWSTR>(CoTaskMemAlloc(dwSize));
350 if (m_Props.pszwName == NULL)
351 return E_OUTOFMEMORY;
352
353 wcscpy(m_Props.pszwName, pszwDuplicateName);
354
356 if (SUCCEEDED(hr))
357 {
358 wcscpy(szName, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\");
359 wcscat(szName, pStr);
360 wcscat(szName, L"\\Connection");
361
363 {
366 }
367
368 CoTaskMemFree(pStr);
369 }
370
371 return hr;
372}

Member Data Documentation

◆ m_dwAdapterIndex

DWORD CNetConnection::m_dwAdapterIndex
private

Definition at line 50 of file connectmanager.h.

Referenced by GetProperties(), and Initialize().

◆ m_Props

NETCON_PROPERTIES CNetConnection::m_Props
private

The documentation for this class was generated from the following files: