ReactOS 0.4.16-dev-1946-g52006dd
netcfg_iface.c File Reference
#include "precomp.h"
Include dependency graph for netcfg_iface.c:

Go to the source code of this file.

Functions

static __inline INetCfgImplimpl_from_INetCfgLock (INetCfgLock *iface)
 
static __inline INetCfgImplimpl_from_INetCfgPnpReconfigCallback (INetCfgPnpReconfigCallback *iface)
 
HRESULT WINAPI INetCfgLock_fnQueryInterface (INetCfgLock *iface, REFIID iid, LPVOID *ppvObj)
 
ULONG WINAPI INetCfgLock_fnAddRef (INetCfgLock *iface)
 
ULONG WINAPI INetCfgLock_fnRelease (INetCfgLock *iface)
 
HRESULT WINAPI INetCfgLock_fnAcquireWriteLock (INetCfgLock *iface, DWORD cmsTimeout, LPCWSTR pszwClientDescription, LPWSTR *ppszwClientDescription)
 
HRESULT WINAPI INetCfgLock_fnReleaseWriteLock (INetCfgLock *iface)
 
HRESULT WINAPI INetCfgLock_fnIsWriteLocked (INetCfgLock *iface, LPWSTR *ppszwClientDescription)
 
HRESULT WINAPI INetCfgPnpReconfigCallback_fnQueryInterface (INetCfgPnpReconfigCallback *iface, REFIID iid, LPVOID *ppvObj)
 
ULONG WINAPI INetCfgPnpReconfigCallback_fnAddRef (INetCfgPnpReconfigCallback *iface)
 
ULONG WINAPI INetCfgPnpReconfigCallback_fnRelease (INetCfgPnpReconfigCallback *iface)
 
HRESULT WINAPI INetCfgPnpReconfigCallback_fnSendPnpReconfig (INetCfgPnpReconfigCallback *iface, NCPNP_RECONFIG_LAYER Layer, LPCWSTR pszwUpper, LPCWSTR pszwLower, PVOID pvData, DWORD dwSizeOfData)
 
HRESULT ReadBindingString (NetCfgComponentItem *Item)
 
HRESULT EnumClientServiceProtocol (HKEY hKey, const GUID *pGuid, NetCfgComponentItem **pHead)
 
HRESULT EnumerateNetworkComponent (const GUID *pGuid, NetCfgComponentItem **pHead)
 
HRESULT EnumerateNetworkAdapter (NetCfgComponentItem **pHead)
 
HRESULT FindNetworkComponent (NetCfgComponentItem *pHead, LPCWSTR pszwComponentId, INetCfgComponent **pComponent, INetCfg *iface)
 
HRESULT WINAPI INetCfg_fnQueryInterface (INetCfg *iface, REFIID iid, LPVOID *ppvObj)
 
ULONG WINAPI INetCfg_fnAddRef (INetCfg *iface)
 
ULONG WINAPI INetCfg_fnRelease (INetCfg *iface)
 
HRESULT WINAPI INetCfg_fnInitialize (INetCfg *iface, PVOID pReserved)
 
VOID ApplyOrCancelChanges (NetCfgComponentItem *pHead, const CLSID *lpClassGUID, BOOL bApply)
 
VOID FreeComponentItem (NetCfgComponentItem *pItem)
 
HRESULT WINAPI INetCfg_fnUninitialize (INetCfg *iface)
 
HRESULT WINAPI INetCfg_fnApply (INetCfg *iface)
 
HRESULT WINAPI INetCfg_fnCancel (INetCfg *iface)
 
HRESULT WINAPI INetCfg_fnEnumComponents (INetCfg *iface, const GUID *pguidClass, IEnumNetCfgComponent **ppenumComponent)
 
HRESULT WINAPI INetCfg_fnFindComponent (INetCfg *iface, LPCWSTR pszwComponentId, INetCfgComponent **pComponent)
 
HRESULT WINAPI INetCfg_fnQueryNetCfgClass (INetCfg *iface, const GUID *pguidClass, REFIID riid, void **ppvObject)
 
HRESULT WINAPI INetCfg_Constructor (IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv)
 

Variables

static const INetCfgLockVtbl vt_NetCfgLock
 
static const INetCfgPnpReconfigCallbackVtbl vt_NetCfgPnpReconfigCallback
 
static const INetCfgVtbl vt_NetCfg
 

Function Documentation

◆ ApplyOrCancelChanges()

VOID ApplyOrCancelChanges ( NetCfgComponentItem pHead,
const CLSID lpClassGUID,
BOOL  bApply 
)

Definition at line 628 of file netcfg_iface.c.

632{
633 HKEY hKey;
634 WCHAR szName[200];
635 LPOLESTR pszGuid;
636
637 while(pHead)
638 {
639 if (pHead->bChanged)
640 {
641 if (IsEqualGUID(lpClassGUID, &GUID_DEVCLASS_NET))
642 {
643 if (bApply)
644 {
645 if (StringFromCLSID(&pHead->InstanceId, &pszGuid) == NOERROR)
646 {
647 swprintf(szName, L"SYSTEM\\CurrentControlSet\\Control\\Network\\%s", pszGuid);
648 CoTaskMemFree(pszGuid);
649
651 {
652 RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)pHead->szDisplayName, (wcslen(pHead->szDisplayName)+1) * sizeof(WCHAR));
654 }
655 }
656 }
657 }
658 else if (pHead->pNCCC)
659 {
660 if (bApply)
661 {
663 //FIXME
664 // implement INetCfgPnpReconfigCallback and pass it to
665 //INetCfgComponentControl_ApplyPnpChanges(pHead->pNCCC, NULL);
666 }
667 else
668 {
670 }
671 }
672 }
673 pHead = pHead->pNext;
674 }
675}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
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
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
#define swprintf
Definition: precomp.h:40
#define L(x)
Definition: resources.c:13
FxAutoRegKey hKey
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define REG_SZ
Definition: layer.c:22
static LPOLESTR
Definition: stg_prop.c:27
#define INetCfgComponentControl_ApplyRegistryChanges(p)
Definition: netcfgn.h:52
#define INetCfgComponentControl_CancelChanges(p)
Definition: netcfgn.h:54
#define KEY_READ
Definition: nt_native.h:1026
static const WCHAR szName[]
Definition: powrprof.c:45
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
INetCfgComponentControl * pNCCC
Definition: precomp.h:55
struct tagNetCfgComponentItem * pNext
Definition: precomp.h:54
unsigned char * LPBYTE
Definition: typedefs.h:53
#define NOERROR
Definition: winerror.h:3448
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by INetCfg_fnApply(), and INetCfg_fnCancel().

◆ EnumClientServiceProtocol()

HRESULT EnumClientServiceProtocol ( HKEY  hKey,
const GUID pGuid,
NetCfgComponentItem **  pHead 
)

ReactOS tcpip guid is not yet generated

Definition at line 251 of file netcfg_iface.c.

252{
253 DWORD dwIndex = 0;
255 DWORD dwType;
256 WCHAR szName[100];
257 WCHAR szText[100];
258 HKEY hSubKey, hNDIKey;
259 NetCfgComponentItem * pLast = NULL, *pCurrent;
260
261 *pHead = NULL;
262 do
263 {
264 szText[0] = L'\0';
265
266 dwSize = sizeof(szName)/sizeof(WCHAR);
267 if (RegEnumKeyExW(hKey, dwIndex++, szName, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
268 {
269 pCurrent = CoTaskMemAlloc(sizeof(NetCfgComponentItem));
270 if (!pCurrent)
271 return E_OUTOFMEMORY;
272
273 ZeroMemory(pCurrent, sizeof(NetCfgComponentItem));
274 CopyMemory(&pCurrent->ClassGUID, pGuid, sizeof(GUID));
275
276 if (FAILED(CLSIDFromString(szName, &pCurrent->InstanceId)))
277 {
279 //CoTaskMemFree(pCurrent);
280 //return E_FAIL;
281 }
282 if (RegOpenKeyExW(hKey, szName, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
283 {
284 /* retrieve Characteristics */
285 dwSize = sizeof(DWORD);
286
287 RegQueryValueExW(hSubKey, L"Characteristics", NULL, &dwType, (LPBYTE)&pCurrent->dwCharacteristics, &dwSize);
288 if (dwType != REG_DWORD)
289 pCurrent->dwCharacteristics = 0;
290
291 /* retrieve ComponentId */
292 dwSize = sizeof(szText);
293 if (RegQueryValueExW(hSubKey, L"ComponentId", NULL, &dwType, (LPBYTE)szText, &dwSize) == ERROR_SUCCESS)
294 {
295 if (dwType == REG_SZ)
296 {
297 szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
298 pCurrent->szId = CoTaskMemAlloc((wcslen(szText)+1)* sizeof(WCHAR));
299 if (pCurrent->szId)
300 wcscpy(pCurrent->szId, szText);
301 }
302 }
303
304 /* retrieve Description */
305 dwSize = sizeof(szText);
306 if (RegQueryValueExW(hSubKey, L"Description", NULL, &dwType, (LPBYTE)szText, &dwSize) == ERROR_SUCCESS)
307 {
308 if (dwType == REG_SZ)
309 {
310 szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
311 pCurrent->szDisplayName = CoTaskMemAlloc((wcslen(szText)+1)* sizeof(WCHAR));
312 if (pCurrent->szDisplayName)
313 wcscpy(pCurrent->szDisplayName, szText);
314 }
315 }
316
317 if (RegOpenKeyExW(hSubKey, L"NDI", 0, KEY_READ, &hNDIKey) == ERROR_SUCCESS)
318 {
319 /* retrieve HelpText */
320 dwSize = sizeof(szText);
321 if (RegQueryValueExW(hNDIKey, L"HelpText", NULL, &dwType, (LPBYTE)szText, &dwSize) == ERROR_SUCCESS)
322 {
323 if (dwType == REG_SZ)
324 {
325 szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
326 pCurrent->szHelpText = CoTaskMemAlloc((wcslen(szText)+1)* sizeof(WCHAR));
327 if (pCurrent->szHelpText)
328 wcscpy(pCurrent->szHelpText, szText);
329 }
330 }
331
332 /* retrieve Service */
333 dwSize = sizeof(szText);
334 if (RegQueryValueExW(hNDIKey, L"Service", NULL, &dwType, (LPBYTE)szText, &dwSize) == ERROR_SUCCESS)
335 {
336 if (dwType == REG_SZ)
337 {
338 szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0';
339 pCurrent->szBindName = CoTaskMemAlloc((wcslen(szText)+1)* sizeof(WCHAR));
340 if (pCurrent->szBindName)
341 wcscpy(pCurrent->szBindName, szText);
342 }
343 }
344 RegCloseKey(hNDIKey);
345 }
346 RegCloseKey(hSubKey);
347
348 ReadBindingString(pCurrent);
349
350 if (!pLast)
351 *pHead = pCurrent;
352 else
353 pLast->pNext = pCurrent;
354
355 pLast = pCurrent;
356 }
357 }
358 else
359 break;
360
361 }while(TRUE);
362 return S_OK;
363}
wcscpy
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRUE
Definition: types.h:120
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
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
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
unsigned long DWORD
Definition: ntddk_ex.h:95
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 ZeroMemory
Definition: minwinbase.h:31
#define CopyMemory
Definition: minwinbase.h:29
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
HRESULT ReadBindingString(NetCfgComponentItem *Item)
Definition: netcfg_iface.c:216
#define DWORD
Definition: nt_native.h:44
#define REG_DWORD
Definition: sdbapi.c:615

Referenced by EnumerateNetworkComponent().

◆ EnumerateNetworkAdapter()

HRESULT EnumerateNetworkAdapter ( NetCfgComponentItem **  pHead)

Definition at line 391 of file netcfg_iface.c.

392{
393 DWORD dwSize, dwIndex;
394 HDEVINFO hInfo;
395 SP_DEVINFO_DATA DevInfo;
396 HKEY hKey;
397 WCHAR szNetCfg[50];
398 WCHAR szAdapterNetCfg[MAX_DEVICE_ID_LEN];
399 WCHAR szDetail[200] = L"SYSTEM\\CurrentControlSet\\Control\\Class\\";
400 WCHAR szName[130] = L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\";
401 NetCfgComponentItem * pLast = NULL, *pCurrent;
402
403 hInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_NET, NULL, NULL, DIGCF_PRESENT );
404 if (!hInfo)
405 {
406 return E_FAIL;
407 }
408
409 dwIndex = 0;
410 do
411 {
412 ZeroMemory(&DevInfo, sizeof(SP_DEVINFO_DATA));
413 DevInfo.cbSize = sizeof(DevInfo);
414
415 /* get device info */
416 if (!SetupDiEnumDeviceInfo(hInfo, dwIndex++, &DevInfo))
417 break;
418
419 /* get device software registry path */
420 if (!SetupDiGetDeviceRegistryPropertyW(hInfo, &DevInfo, SPDRP_DRIVER, NULL, (LPBYTE)&szDetail[39], sizeof(szDetail)/sizeof(WCHAR) - 40, &dwSize))
421 break;
422
423 /* open device registry key */
425 break;
426
427 /* query NetCfgInstanceId for current device */
428 dwSize = sizeof(szNetCfg);
429 if (RegQueryValueExW(hKey, L"NetCfgInstanceId", NULL, NULL, (LPBYTE)szNetCfg, &dwSize) != ERROR_SUCCESS)
430 {
432 break;
433 }
434
435 /* allocate new INetConnectionItem */
436 pCurrent = CoTaskMemAlloc(sizeof(NetCfgComponentItem));
437 if (!pCurrent)
438 break;
439
440 ZeroMemory(pCurrent, sizeof(NetCfgComponentItem));
441 CopyMemory(&pCurrent->ClassGUID, &GUID_DEVCLASS_NET, sizeof(GUID));
442 CLSIDFromString(szNetCfg, &pCurrent->InstanceId); //FIXME
443
444 /* set bind name */
445 pCurrent->szBindName = CoTaskMemAlloc((wcslen(szNetCfg)+1) *sizeof(WCHAR));
446 if (pCurrent->szBindName)
447 wcscpy(pCurrent->szBindName, szNetCfg);
448
449 /* retrieve ComponentId */
450 dwSize = sizeof(szAdapterNetCfg);
451 if (RegQueryValueExW(hKey, L"ComponentId", NULL, NULL, (LPBYTE)szAdapterNetCfg, &dwSize) == ERROR_SUCCESS)
452 {
453 pCurrent->szId = CoTaskMemAlloc((wcslen(szAdapterNetCfg)+1) * sizeof(WCHAR));
454 if (pCurrent->szId)
455 wcscpy(pCurrent->szId, szAdapterNetCfg);
456 }
457 /* set INetCfgComponent::GetDisplayName */
458 dwSize = sizeof(szAdapterNetCfg);
459 if (RegQueryValueExW(hKey, L"DriverDesc", NULL, NULL, (LPBYTE)szAdapterNetCfg, &dwSize) == ERROR_SUCCESS)
460 {
461 pCurrent->szDisplayName = CoTaskMemAlloc((wcslen(szAdapterNetCfg)+1) * sizeof(WCHAR));
462 if (pCurrent->szDisplayName)
463 wcscpy(pCurrent->szDisplayName, szAdapterNetCfg);
464 }
465
467 /* open network connections details */
468 wcscpy(&szName[80], szNetCfg);
469 wcscpy(&szName[118], L"\\Connection");
470
472 {
473 /* retrieve pnp instance id */
474 dwSize = sizeof(szAdapterNetCfg);
475 if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, NULL, (LPBYTE)szAdapterNetCfg, &dwSize) == ERROR_SUCCESS)
476 {
477 pCurrent->szNodeId = CoTaskMemAlloc((wcslen(szAdapterNetCfg)+1) * sizeof(WCHAR));
478 if (pCurrent->szNodeId)
479 wcscpy(pCurrent->szNodeId, szAdapterNetCfg);
480 }
482 }
483
484 if (SetupDiGetDeviceRegistryPropertyW(hInfo, &DevInfo, SPDRP_DEVICEDESC, NULL, (PBYTE)szNetCfg, sizeof(szNetCfg)/sizeof(WCHAR), &dwSize))
485 {
486 szNetCfg[(sizeof(szNetCfg)/sizeof(WCHAR))-1] = L'\0';
487 pCurrent->szDisplayName = CoTaskMemAlloc((wcslen(szNetCfg)+1) * sizeof(WCHAR));
488 if (pCurrent->szDisplayName)
489 wcscpy(pCurrent->szDisplayName, szNetCfg);
490 }
491
492 if (pLast)
493 pLast->pNext = pCurrent;
494 else
495 *pHead = pCurrent;
496
497 pLast = pCurrent;
498
499 }while(TRUE);
500
502 return NOERROR;
503}
#define E_FAIL
Definition: ddrawi.h:102
#define MAX_DEVICE_ID_LEN
Definition: devaction.c:40
BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO devinfo, DWORD index, PSP_DEVINFO_DATA info)
Definition: devinst.c:1787
BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
Definition: devinst.c:3224
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
Definition: devinst.c:2893
BYTE * PBYTE
Definition: pedump.c:66
#define SPDRP_DRIVER
Definition: setupapi.h:517
#define SPDRP_DEVICEDESC
Definition: setupapi.h:508
#define SetupDiGetClassDevs
Definition: setupapi.h:2594
#define DIGCF_PRESENT
Definition: setupapi.h:172

Referenced by INetCfg_fnInitialize().

◆ EnumerateNetworkComponent()

HRESULT EnumerateNetworkComponent ( const GUID pGuid,
NetCfgComponentItem **  pHead 
)

Definition at line 368 of file netcfg_iface.c.

370{
371 HKEY hKey;
372 LPOLESTR pszGuid;
373 HRESULT hr;
374 WCHAR szName[150];
375
376 hr = StringFromCLSID(pGuid, &pszGuid);
377 if (SUCCEEDED(hr))
378 {
379 swprintf(szName, L"SYSTEM\\CurrentControlSet\\Control\\Network\\%s", pszGuid);
381 {
382 hr = EnumClientServiceProtocol(hKey, pGuid, pHead);
384 }
385 CoTaskMemFree(pszGuid);
386 }
387 return hr;
388}
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT EnumClientServiceProtocol(HKEY hKey, const GUID *pGuid, NetCfgComponentItem **pHead)
Definition: netcfg_iface.c:251
HRESULT hr
Definition: shlfolder.c:183

Referenced by INetCfg_fnInitialize().

◆ FindNetworkComponent()

HRESULT FindNetworkComponent ( NetCfgComponentItem pHead,
LPCWSTR  pszwComponentId,
INetCfgComponent **  pComponent,
INetCfg *  iface 
)

Definition at line 507 of file netcfg_iface.c.

512{
513 while(pHead)
514 {
515 if (!_wcsicmp(pHead->szId, pszwComponentId))
516 {
517 return INetCfgComponent_Constructor(NULL, &IID_INetCfgComponent, (LPVOID*)pComponent, pHead, iface);
518 }
519 pHead = pHead->pNext;
520 }
521 return S_FALSE;
522}
HRESULT WINAPI INetCfgComponent_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv, NetCfgComponentItem *pItem, INetCfg *pNCfg)
EXTERN_C const IID IID_INetCfgComponent
Definition: netcfgx.h:77
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define S_FALSE
Definition: winerror.h:3451

Referenced by INetCfg_fnFindComponent().

◆ FreeComponentItem()

VOID FreeComponentItem ( NetCfgComponentItem pItem)

Definition at line 678 of file netcfg_iface.c.

679{
682 CoTaskMemFree(pItem->szId);
684 CoTaskMemFree(pItem->szNodeId);
686 CoTaskMemFree(pItem);
687}

Referenced by INetCfg_fnUninitialize().

◆ impl_from_INetCfgLock()

static __inline INetCfgImpl * impl_from_INetCfgLock ( INetCfgLock *  iface)
static

Definition at line 3 of file netcfg_iface.c.

4{
5 return (INetCfgImpl*)((char *)iface - FIELD_OFFSET(INetCfgImpl, lpVtblLock));
6}
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

Referenced by INetCfgLock_fnAcquireWriteLock(), INetCfgLock_fnAddRef(), INetCfgLock_fnQueryInterface(), INetCfgLock_fnRelease(), and INetCfgLock_fnReleaseWriteLock().

◆ impl_from_INetCfgPnpReconfigCallback()

static __inline INetCfgImpl * impl_from_INetCfgPnpReconfigCallback ( INetCfgPnpReconfigCallback *  iface)
static

Definition at line 8 of file netcfg_iface.c.

9{
10 return (INetCfgImpl*)((char *)iface - FIELD_OFFSET(INetCfgImpl, lpVtblPnpReconfigCallback));
11}

Referenced by INetCfgPnpReconfigCallback_fnAddRef(), INetCfgPnpReconfigCallback_fnQueryInterface(), and INetCfgPnpReconfigCallback_fnRelease().

◆ INetCfg_Constructor()

HRESULT WINAPI INetCfg_Constructor ( IUnknown pUnkOuter,
REFIID  riid,
LPVOID ppv 
)

Definition at line 851 of file netcfg_iface.c.

852{
854
855 if (!ppv)
856 return E_POINTER;
857
859 if (!This)
860 return E_OUTOFMEMORY;
861
862 This->ref = 1;
863 This->lpVtbl = (const INetCfg*)&vt_NetCfg;
864 This->lpVtblLock = (const INetCfgLock*)&vt_NetCfgLock;
865 This->lpVtblPnpReconfigCallback = (const INetCfgPnpReconfigCallback*)&vt_NetCfgPnpReconfigCallback;
866 This->hMutex = NULL;
867 This->bInitialized = FALSE;
868 This->pNet = NULL;
869 This->pClient = NULL;
870 This->pService = NULL;
871 This->pProtocol = NULL;
872
873 if (!SUCCEEDED (INetCfg_QueryInterface ((INetCfg*)This, riid, ppv)))
874 {
875 INetCfg_Release((INetCfg*)This);
876 return E_NOINTERFACE;
877 }
878
879 INetCfg_Release((INetCfg*)This);
880 return S_OK;
881}
#define FALSE
Definition: types.h:117
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
static const INetCfgPnpReconfigCallbackVtbl vt_NetCfgPnpReconfigCallback
Definition: netcfg_iface.c:202
static const INetCfgLockVtbl vt_NetCfgLock
Definition: netcfg_iface.c:144
static const INetCfgVtbl vt_NetCfg
Definition: netcfg_iface.c:837
#define INetCfg_Release(p)
Definition: netcfgx.h:289
#define INetCfg_QueryInterface(p, a, b)
Definition: netcfgx.h:287
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480

◆ INetCfg_fnAddRef()

ULONG WINAPI INetCfg_fnAddRef ( INetCfg *  iface)

Definition at line 569 of file netcfg_iface.c.

571{
572 INetCfgImpl * This = (INetCfgImpl*)iface;
573 ULONG refCount = InterlockedIncrement(&This->ref);
574
575 return refCount;
576}
#define InterlockedIncrement
Definition: armddk.h:53
uint32_t ULONG
Definition: typedefs.h:59

◆ INetCfg_fnApply()

HRESULT WINAPI INetCfg_fnApply ( INetCfg *  iface)

Definition at line 740 of file netcfg_iface.c.

742{
743 INetCfgImpl *This = (INetCfgImpl *)iface;
744
745 if (!This->bInitialized)
747
748 ApplyOrCancelChanges(This->pNet, &GUID_DEVCLASS_NET, TRUE);
749 ApplyOrCancelChanges(This->pClient, &GUID_DEVCLASS_NETCLIENT, TRUE);
750 ApplyOrCancelChanges(This->pService, &GUID_DEVCLASS_NETSERVICE, TRUE);
751 ApplyOrCancelChanges(This->pProtocol, &GUID_DEVCLASS_NETTRANS, TRUE);
752
753 return S_OK;
754}
VOID ApplyOrCancelChanges(NetCfgComponentItem *pHead, const CLSID *lpClassGUID, BOOL bApply)
Definition: netcfg_iface.c:628
#define NETCFG_E_NOT_INITIALIZED
Definition: netcfgx.h:303

◆ INetCfg_fnCancel()

HRESULT WINAPI INetCfg_fnCancel ( INetCfg *  iface)

Definition at line 758 of file netcfg_iface.c.

760{
761 INetCfgImpl *This = (INetCfgImpl *)iface;
762
763 if (!This->bInitialized)
765
766 ApplyOrCancelChanges(This->pClient, &GUID_DEVCLASS_NETCLIENT, FALSE);
767 ApplyOrCancelChanges(This->pService, &GUID_DEVCLASS_NETSERVICE, FALSE);
768 ApplyOrCancelChanges(This->pProtocol, &GUID_DEVCLASS_NETTRANS, FALSE);
769
770 return S_OK;
771}

◆ INetCfg_fnEnumComponents()

HRESULT WINAPI INetCfg_fnEnumComponents ( INetCfg *  iface,
const GUID pguidClass,
IEnumNetCfgComponent **  ppenumComponent 
)

Definition at line 775 of file netcfg_iface.c.

779{
780 INetCfgImpl *This = (INetCfgImpl *)iface;
781
782 if (!This->bInitialized)
784
785 if (IsEqualGUID(&GUID_DEVCLASS_NET, pguidClass))
786 return IEnumNetCfgComponent_Constructor (NULL, &IID_IEnumNetCfgComponent, (LPVOID*)ppenumComponent, This->pNet, iface);
787 else if (IsEqualGUID(&GUID_DEVCLASS_NETCLIENT, pguidClass))
788 return IEnumNetCfgComponent_Constructor (NULL, &IID_IEnumNetCfgComponent, (LPVOID*)ppenumComponent, This->pClient, iface);
789 else if (IsEqualGUID(&GUID_DEVCLASS_NETSERVICE, pguidClass))
790 return IEnumNetCfgComponent_Constructor (NULL, &IID_IEnumNetCfgComponent, (LPVOID*)ppenumComponent, This->pService, iface);
791 else if (IsEqualGUID(&GUID_DEVCLASS_NETTRANS, pguidClass))
792 return IEnumNetCfgComponent_Constructor (NULL, &IID_IEnumNetCfgComponent, (LPVOID*)ppenumComponent, This->pProtocol, iface);
793 else
794 return E_NOINTERFACE;
795}
HRESULT WINAPI IEnumNetCfgComponent_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv, NetCfgComponentItem *pItem, INetCfg *pNCfg)
EXTERN_C const IID IID_IEnumNetCfgComponent
Definition: netcfgx.h:266

◆ INetCfg_fnFindComponent()

HRESULT WINAPI INetCfg_fnFindComponent ( INetCfg *  iface,
LPCWSTR  pszwComponentId,
INetCfgComponent **  pComponent 
)

Definition at line 800 of file netcfg_iface.c.

804{
805 HRESULT hr;
806 INetCfgImpl *This = (INetCfgImpl *)iface;
807
808 if (!This->bInitialized)
810
811 hr = FindNetworkComponent(This->pClient, pszwComponentId, pComponent, iface);
812 if (hr == S_OK)
813 return hr;
814
815 hr = FindNetworkComponent(This->pService, pszwComponentId, pComponent, iface);
816 if (hr == S_OK)
817 return hr;
818
819 hr = FindNetworkComponent(This->pProtocol, pszwComponentId, pComponent, iface);
820 if (hr == S_OK)
821 return hr;
822
823 return S_FALSE;
824}
HRESULT FindNetworkComponent(NetCfgComponentItem *pHead, LPCWSTR pszwComponentId, INetCfgComponent **pComponent, INetCfg *iface)
Definition: netcfg_iface.c:507

◆ INetCfg_fnInitialize()

HRESULT WINAPI INetCfg_fnInitialize ( INetCfg *  iface,
PVOID  pReserved 
)

Definition at line 595 of file netcfg_iface.c.

598{
599 HRESULT hr;
600 INetCfgImpl *This = (INetCfgImpl *)iface;
601
602 if (This->bInitialized)
604
606 if (FAILED(hr))
607 return hr;
608
609
610 hr = EnumerateNetworkComponent(&GUID_DEVCLASS_NETCLIENT, &This->pClient);
611 if (FAILED(hr))
612 return hr;
613
614 hr = EnumerateNetworkComponent(&GUID_DEVCLASS_NETSERVICE, &This->pService);
615 if (FAILED(hr))
616 return hr;
617
618
619 hr = EnumerateNetworkComponent(&GUID_DEVCLASS_NETTRANS, &This->pProtocol);
620 if (FAILED(hr))
621 return hr;
622
623 This->bInitialized = TRUE;
624 return S_OK;
625}
HRESULT EnumerateNetworkAdapter(NetCfgComponentItem **pHead)
Definition: netcfg_iface.c:391
HRESULT EnumerateNetworkComponent(const GUID *pGuid, NetCfgComponentItem **pHead)
Definition: netcfg_iface.c:368
#define NETCFG_E_ALREADY_INITIALIZED
Definition: netcfgx.h:302

◆ INetCfg_fnQueryInterface()

HRESULT WINAPI INetCfg_fnQueryInterface ( INetCfg *  iface,
REFIID  iid,
LPVOID ppvObj 
)

Definition at line 528 of file netcfg_iface.c.

532{
533 INetCfgImpl * This = (INetCfgImpl*)iface;
534 *ppvObj = NULL;
535
536 if (IsEqualIID (iid, &IID_IUnknown) ||
537 IsEqualIID (iid, &IID_INetCfg))
538 {
539 *ppvObj = This;
540 INetCfg_AddRef(iface);
541 return S_OK;
542 }
543 else if (IsEqualIID (iid, &IID_INetCfgLock))
544 {
545 if (This->bInitialized)
547
548 *ppvObj = (LPVOID)&This->lpVtblLock;
549 This->hMutex = CreateMutexW(NULL, FALSE, L"NetCfgLock");
550
551 INetCfgLock_AddRef(iface);
552 return S_OK;
553 }
555 {
556 if (This->bInitialized)
558
559 *ppvObj = (LPVOID)&This->lpVtblPnpReconfigCallback;
561 return S_OK;
562 }
563
564 return E_NOINTERFACE;
565}
const GUID IID_IUnknown
EXTERN_C const IID IID_INetCfgPnpReconfigCallback
Definition: netcfgn.h:29
#define INetCfgPnpReconfigCallback_AddRef(p)
Definition: netcfgn.h:24
EXTERN_C const IID IID_INetCfgLock
Definition: netcfgx.h:17
#define INetCfgLock_AddRef(p)
Definition: netcfgx.h:22
#define INetCfg_AddRef(p)
Definition: netcfgx.h:288
EXTERN_C const IID IID_INetCfg
Definition: netcfgx.h:300
#define LPVOID
Definition: nt_native.h:45
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:576

◆ INetCfg_fnQueryNetCfgClass()

HRESULT WINAPI INetCfg_fnQueryNetCfgClass ( INetCfg *  iface,
const GUID pguidClass,
REFIID  riid,
void **  ppvObject 
)

Definition at line 828 of file netcfg_iface.c.

833{
834 return INetCfgClass_Constructor((IUnknown *)iface, riid, ppvObject, pguidClass, iface);
835}
HRESULT WINAPI INetCfgClass_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv, const GUID *pguidClass, INetCfg *pNetCfg)

◆ INetCfg_fnRelease()

ULONG WINAPI INetCfg_fnRelease ( INetCfg *  iface)

Definition at line 580 of file netcfg_iface.c.

582{
583 INetCfgImpl * This = (INetCfgImpl*)iface;
584 ULONG refCount = InterlockedDecrement(&This->ref);
585
586 if (!refCount)
587 {
589 }
590 return refCount;
591}
#define InterlockedDecrement
Definition: armddk.h:52

◆ INetCfg_fnUninitialize()

HRESULT WINAPI INetCfg_fnUninitialize ( INetCfg *  iface)

Definition at line 691 of file netcfg_iface.c.

693{
694 INetCfgImpl *This = (INetCfgImpl *)iface;
695 NetCfgComponentItem *pItem;
696
697 if (!This->bInitialized)
699
700 /* Free the services */
701 while (This->pService != NULL)
702 {
703 pItem = This->pService;
704 This->pService = pItem->pNext;
705 FreeComponentItem(pItem);
706 }
707
708 /* Free the clients */
709 while (This->pClient != NULL)
710 {
711 pItem = This->pClient;
712 This->pClient = pItem->pNext;
713 FreeComponentItem(pItem);
714 }
715
716 /* Free the protocols */
717 while (This->pProtocol != NULL)
718 {
719 pItem = This->pProtocol;
720 This->pProtocol = pItem->pNext;
721 FreeComponentItem(pItem);
722 }
723
724 /* Free the adapters */
725 while (This->pNet != NULL)
726 {
727 pItem = This->pNet;
728 This->pNet = pItem->pNext;
729 FreeComponentItem(pItem);
730 }
731
732 This->bInitialized = FALSE;
733
734 return S_OK;
735}
VOID FreeComponentItem(NetCfgComponentItem *pItem)
Definition: netcfg_iface.c:678

◆ INetCfgLock_fnAcquireWriteLock()

HRESULT WINAPI INetCfgLock_fnAcquireWriteLock ( INetCfgLock *  iface,
DWORD  cmsTimeout,
LPCWSTR  pszwClientDescription,
LPWSTR ppszwClientDescription 
)

Definition at line 47 of file netcfg_iface.c.

52{
53 DWORD dwResult;
54 HKEY hKey;
55 WCHAR szValue[100];
57
58 if (This->bInitialized)
60
61 dwResult = WaitForSingleObject(This->hMutex, cmsTimeout);
62 if (dwResult == WAIT_TIMEOUT)
63 {
64 if (ppszwClientDescription)
65 {
66 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\Network\\NetCfgLockHolder", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
67 {
68 dwResult = sizeof(szValue);
69 if (RegQueryValueExW(hKey, NULL, NULL, NULL, (LPBYTE)szValue, &dwResult) == ERROR_SUCCESS)
70 {
71 szValue[(sizeof(szValue)/sizeof(WCHAR))-1] = L'\0';
72 *ppszwClientDescription = CoTaskMemAlloc((wcslen(szValue)+1) * sizeof(WCHAR));
73 if (*ppszwClientDescription)
74 wcscpy(*ppszwClientDescription, szValue);
75 }
77 }
78 }
79 return S_FALSE;
80 }
81 else if (dwResult == WAIT_OBJECT_0)
82 {
83 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\Network\\NetCfgLockHolder", 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
84 {
85 RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)pszwClientDescription, (wcslen(pszwClientDescription)+1) * sizeof(WCHAR));
87 }
88 return S_OK;
89 }
90
91 return E_FAIL;
92}
#define WAIT_TIMEOUT
Definition: dderror.h:14
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
static __inline INetCfgImpl * impl_from_INetCfgLock(INetCfgLock *iface)
Definition: netcfg_iface.c:3
#define KEY_WRITE
Definition: nt_native.h:1034
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
#define WAIT_OBJECT_0
Definition: winbase.h:383

◆ INetCfgLock_fnAddRef()

ULONG WINAPI INetCfgLock_fnAddRef ( INetCfgLock *  iface)

Definition at line 28 of file netcfg_iface.c.

30{
32
33 return INetCfg_AddRef((INetCfg*)This);
34}

◆ INetCfgLock_fnIsWriteLocked()

HRESULT WINAPI INetCfgLock_fnIsWriteLocked ( INetCfgLock *  iface,
LPWSTR ppszwClientDescription 
)

Definition at line 113 of file netcfg_iface.c.

116{
117 HKEY hKey;
118 WCHAR szValue[100];
119 DWORD dwSize, dwType;
120 HRESULT hr;
121
122 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\Network\\NetCfgLockHolder", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
123 return S_FALSE;
124
125 dwSize = sizeof(szValue);
126 if (RegQueryValueExW(hKey, NULL, NULL, &dwType, (LPBYTE)szValue, &dwSize) == ERROR_SUCCESS && dwType == REG_SZ)
127 {
128 hr = S_OK;
129 szValue[(sizeof(szValue)/sizeof(WCHAR))-1] = L'\0';
130 *ppszwClientDescription = CoTaskMemAlloc((wcslen(szValue)+1) * sizeof(WCHAR));
131 if (*ppszwClientDescription)
132 wcscpy(*ppszwClientDescription, szValue);
133 else
135 }
136 else
137 {
138 hr = E_FAIL;
139 }
141 return hr;
142}

◆ INetCfgLock_fnQueryInterface()

HRESULT WINAPI INetCfgLock_fnQueryInterface ( INetCfgLock *  iface,
REFIID  iid,
LPVOID ppvObj 
)

Definition at line 16 of file netcfg_iface.c.

20{
22 return INetCfg_QueryInterface((INetCfg*)This, iid, ppvObj);
23}

◆ INetCfgLock_fnRelease()

ULONG WINAPI INetCfgLock_fnRelease ( INetCfgLock *  iface)

Definition at line 38 of file netcfg_iface.c.

40{
42 return INetCfg_Release((INetCfg*)This);
43}

◆ INetCfgLock_fnReleaseWriteLock()

HRESULT WINAPI INetCfgLock_fnReleaseWriteLock ( INetCfgLock *  iface)

Definition at line 96 of file netcfg_iface.c.

98{
100
101 if (This->bInitialized)
103
104
105 if (ReleaseMutex(This->hMutex))
106 return S_OK;
107 else
108 return S_FALSE;
109}
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(IN HANDLE hMutex)
Definition: synch.c:618

◆ INetCfgPnpReconfigCallback_fnAddRef()

ULONG WINAPI INetCfgPnpReconfigCallback_fnAddRef ( INetCfgPnpReconfigCallback *  iface)

Definition at line 171 of file netcfg_iface.c.

173{
175
176 return INetCfg_AddRef((INetCfg*)This);
177}
static __inline INetCfgImpl * impl_from_INetCfgPnpReconfigCallback(INetCfgPnpReconfigCallback *iface)
Definition: netcfg_iface.c:8

◆ INetCfgPnpReconfigCallback_fnQueryInterface()

HRESULT WINAPI INetCfgPnpReconfigCallback_fnQueryInterface ( INetCfgPnpReconfigCallback *  iface,
REFIID  iid,
LPVOID ppvObj 
)

Definition at line 160 of file netcfg_iface.c.

164{
166 return INetCfg_QueryInterface((INetCfg*)This, iid, ppvObj);
167}

◆ INetCfgPnpReconfigCallback_fnRelease()

ULONG WINAPI INetCfgPnpReconfigCallback_fnRelease ( INetCfgPnpReconfigCallback *  iface)

Definition at line 181 of file netcfg_iface.c.

183{
185 return INetCfg_Release((INetCfg*)This);
186}

◆ INetCfgPnpReconfigCallback_fnSendPnpReconfig()

HRESULT WINAPI INetCfgPnpReconfigCallback_fnSendPnpReconfig ( INetCfgPnpReconfigCallback *  iface,
NCPNP_RECONFIG_LAYER  Layer,
LPCWSTR  pszwUpper,
LPCWSTR  pszwLower,
PVOID  pvData,
DWORD  dwSizeOfData 
)

Definition at line 190 of file netcfg_iface.c.

197{
198 /* FIXME */
199 return E_NOTIMPL;
200}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ReadBindingString()

HRESULT ReadBindingString ( NetCfgComponentItem Item)

Definition at line 216 of file netcfg_iface.c.

218{
219 WCHAR szBuffer[200];
220 HKEY hKey;
221 DWORD dwType, dwSize;
222
223 if (Item == NULL || Item->szBindName == NULL)
224 return S_OK;
225
226 wcscpy(szBuffer, L"SYSTEM\\CurrentControlSet\\Services\\");
227 wcscat(szBuffer, Item->szBindName);
228 wcscat(szBuffer, L"\\Linkage");
229
231 {
232 dwSize = 0;
233 RegQueryValueExW(hKey, L"Bind", NULL, &dwType, NULL, &dwSize);
234
235 if (dwSize != 0)
236 {
237 Item->pszBinding = CoTaskMemAlloc(dwSize);
238 if (Item->pszBinding == NULL)
239 return E_OUTOFMEMORY;
240
241 RegQueryValueExW(hKey, L"Bind", NULL, &dwType, (LPBYTE)Item->pszBinding, &dwSize);
242 }
243
245 }
246
247 return S_OK;
248}
wcscat
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

Referenced by EnumClientServiceProtocol().

Variable Documentation

◆ vt_NetCfg

const INetCfgVtbl vt_NetCfg
static
Initial value:
=
{
}
HRESULT WINAPI INetCfg_fnApply(INetCfg *iface)
Definition: netcfg_iface.c:740
HRESULT WINAPI INetCfg_fnCancel(INetCfg *iface)
Definition: netcfg_iface.c:758
HRESULT WINAPI INetCfg_fnEnumComponents(INetCfg *iface, const GUID *pguidClass, IEnumNetCfgComponent **ppenumComponent)
Definition: netcfg_iface.c:775
HRESULT WINAPI INetCfg_fnInitialize(INetCfg *iface, PVOID pReserved)
Definition: netcfg_iface.c:595
HRESULT WINAPI INetCfg_fnUninitialize(INetCfg *iface)
Definition: netcfg_iface.c:691
HRESULT WINAPI INetCfg_fnQueryNetCfgClass(INetCfg *iface, const GUID *pguidClass, REFIID riid, void **ppvObject)
Definition: netcfg_iface.c:828
HRESULT WINAPI INetCfg_fnQueryInterface(INetCfg *iface, REFIID iid, LPVOID *ppvObj)
Definition: netcfg_iface.c:528
ULONG WINAPI INetCfg_fnRelease(INetCfg *iface)
Definition: netcfg_iface.c:580
HRESULT WINAPI INetCfg_fnFindComponent(INetCfg *iface, LPCWSTR pszwComponentId, INetCfgComponent **pComponent)
Definition: netcfg_iface.c:800
ULONG WINAPI INetCfg_fnAddRef(INetCfg *iface)
Definition: netcfg_iface.c:569

Definition at line 837 of file netcfg_iface.c.

Referenced by INetCfg_Constructor().

◆ vt_NetCfgLock

const INetCfgLockVtbl vt_NetCfgLock
static
Initial value:
=
{
}
ULONG WINAPI INetCfgLock_fnAddRef(INetCfgLock *iface)
Definition: netcfg_iface.c:28
HRESULT WINAPI INetCfgLock_fnAcquireWriteLock(INetCfgLock *iface, DWORD cmsTimeout, LPCWSTR pszwClientDescription, LPWSTR *ppszwClientDescription)
Definition: netcfg_iface.c:47
HRESULT WINAPI INetCfgLock_fnReleaseWriteLock(INetCfgLock *iface)
Definition: netcfg_iface.c:96
ULONG WINAPI INetCfgLock_fnRelease(INetCfgLock *iface)
Definition: netcfg_iface.c:38
HRESULT WINAPI INetCfgLock_fnIsWriteLocked(INetCfgLock *iface, LPWSTR *ppszwClientDescription)
Definition: netcfg_iface.c:113
HRESULT WINAPI INetCfgLock_fnQueryInterface(INetCfgLock *iface, REFIID iid, LPVOID *ppvObj)
Definition: netcfg_iface.c:16

Definition at line 144 of file netcfg_iface.c.

Referenced by INetCfg_Constructor().

◆ vt_NetCfgPnpReconfigCallback

const INetCfgPnpReconfigCallbackVtbl vt_NetCfgPnpReconfigCallback
static
Initial value:
=
{
}
HRESULT WINAPI INetCfgPnpReconfigCallback_fnSendPnpReconfig(INetCfgPnpReconfigCallback *iface, NCPNP_RECONFIG_LAYER Layer, LPCWSTR pszwUpper, LPCWSTR pszwLower, PVOID pvData, DWORD dwSizeOfData)
Definition: netcfg_iface.c:190
ULONG WINAPI INetCfgPnpReconfigCallback_fnAddRef(INetCfgPnpReconfigCallback *iface)
Definition: netcfg_iface.c:171
HRESULT WINAPI INetCfgPnpReconfigCallback_fnQueryInterface(INetCfgPnpReconfigCallback *iface, REFIID iid, LPVOID *ppvObj)
Definition: netcfg_iface.c:160
ULONG WINAPI INetCfgPnpReconfigCallback_fnRelease(INetCfgPnpReconfigCallback *iface)
Definition: netcfg_iface.c:181

Definition at line 202 of file netcfg_iface.c.

Referenced by INetCfg_Constructor().