Author: janderwald
Date: Tue Sep 9 19:13:39 2008
New Revision: 36099
URL:
http://svn.reactos.org/svn/reactos?rev=36099&view=rev
Log:
- Free INetCfgComponent when reference count is zero
- HACK: use {RandomProtocolGUID_TCPIP} for all network notification objects (As soon GUIDs
are automatically generated for network components like TCPIP, this hack can be removed)
- Start implementing TCP/IP Notification Object
- Import TCP/IP Properties dialog from ncpa.cpl
Added:
trunk/reactos/dll/win32/netcfgx/lang/ (with props)
trunk/reactos/dll/win32/netcfgx/lang/de-DE.rc (with props)
trunk/reactos/dll/win32/netcfgx/netcfgx.rc (with props)
trunk/reactos/dll/win32/netcfgx/resource.h (with props)
trunk/reactos/dll/win32/netcfgx/tcpipconf_notify.c (with props)
Modified:
trunk/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c
trunk/reactos/dll/win32/netcfgx/netcfgx.c
trunk/reactos/dll/win32/netcfgx/netcfgx.rbuild
trunk/reactos/dll/win32/netcfgx/precomp.h
Modified: trunk/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/inetcfgc…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c [iso-8859-1] Tue Sep 9 19:13:39
2008
@@ -62,6 +62,10 @@
INetCfgComponentImpl * This = (INetCfgComponentImpl*)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
+ if (!refCount)
+ {
+ CoTaskMemFree(This);
+ }
return refCount;
}
@@ -332,7 +336,8 @@
INetCfgComponentControl * pNCCC;
HRESULT hr;
LONG lRet;
- CLSID ClassGUID, InstanceGUID;
+ CLSID ClassGUID;
+ //CLSID InstanceGUID;
wcscpy(szName,L"SYSTEM\\CurrentControlSet\\Control\\Network\\");
@@ -349,7 +354,8 @@
CoTaskMemFree(pStr);
wcscat(szName, L"\\");
- /* get the Class GUID */
+ /* get the Instance GUID */
+#if 0
hr = INetCfgComponent_GetInstanceGuid(iface, &InstanceGUID);
if (FAILED(hr))
return hr;
@@ -360,6 +366,11 @@
wcscat(szName, pStr);
CoTaskMemFree(pStr);
+#else
+ // HACK HACK HACK HACK HACK
+ wcscat(szName, L"{RandomProtocolGUID_TCPIP}");
+#endif
+
wcscat(szName, L"\\NDI");
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szName, 0, KEY_READ, &hKey) !=
ERROR_SUCCESS)
@@ -433,11 +444,14 @@
hr = CreateNotificationObject(This,iface, pUnk, &This->pProperty);
if (FAILED(hr))
return hr;
- }
-
- dwDefPages = 1;
+ if (dwFlags == NCRP_QUERY_PROPERTY_UI)
+ return S_OK;
+ }
+
+ dwDefPages = 0;
+ Pages = 0;
hr = INetCfgComponentPropertyUi_MergePropPages(This->pProperty, &dwDefPages,
(BYTE**)&hppages, &Pages, hwndParent, NULL);
- if (FAILED(hr))
+ if (FAILED(hr) || !Pages)
{
return hr;
}
@@ -446,6 +460,7 @@
pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW;
pinfo.u3.phpage = hppages;
pinfo.hwndParent = hwndParent;
+ pinfo.nPages = Pages;
pinfo.pszCaption = This->pItem->szDisplayName;
iResult = PropertySheetW(&pinfo);
@@ -669,9 +684,6 @@
IEnumNetCfgComponent_Release((IEnumNetCfgComponent*)This);
return S_OK;
-
-
- return S_OK;
-}
-
-
+}
+
+
Propchange: trunk/reactos/dll/win32/netcfgx/lang/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Tue Sep 9 19:13:39 2008
@@ -1,0 +1,2 @@
+([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))?
+(\d+)
Propchange: trunk/reactos/dll/win32/netcfgx/lang/
------------------------------------------------------------------------------
bugtraq:message = See issue #%BUGID% for more details.
Propchange: trunk/reactos/dll/win32/netcfgx/lang/
------------------------------------------------------------------------------
bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/dll/win32/netcfgx/lang/
------------------------------------------------------------------------------
tsvn:logminsize = 10
Added: trunk/reactos/dll/win32/netcfgx/lang/de-DE.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/lang/de-…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/lang/de-DE.rc (added)
+++ trunk/reactos/dll/win32/netcfgx/lang/de-DE.rc [iso-8859-1] Tue Sep 9 19:13:39 2008
@@ -1,0 +1,26 @@
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+IDD_TCPIP_BASIC_DLG DIALOGEX DISCARDABLE 0, 0, 246, 228
+STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
+CAPTION "Allgemein"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "IP-Einstellungen können automatisch zugewiesen werden, wenn das Netzwerk
diese Funktion unterstützt. Wenden Sie sich andernfalls an den Netzwerkadministrator, um
die geeigneten IP-Einstellungen zu beziehen.", -1, 9, 9, 235, 27
+ CONTROL "I&P-Adresse automatisch beziehen", IDC_USEDHCP,
"BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 43, 210, 12
+ GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX
+ CONTROL "Folgende IP-&Adresse verwenden:", IDC_NODHCP, "BUTTON",
BS_AUTORADIOBUTTON, 14, 59, 120, 12
+ LTEXT "&IP-Adresse:", -1, 14, 75, 135, 8
+ CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP,150,75-2,80,12
+ LTEXT "S&ubnetzmaske:", -1, 14, 90, 135, 8
+ CONTROL
"",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP,150,90-2,80,12
+ LTEXT "&Standardgateway:", -1, 14, 105, 135, 8
+ CONTROL
"",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP,150,105-2,80,12
+ CONTROL "D&NS-Serveradresse automatisch beziehen", IDC_AUTODNS,
"BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 139, 210, 12
+ GROUPBOX "", -1, 9, 157, 228, 47, BS_GROUPBOX
+ CONTROL "Folgende DNS-Serveradressen &verwenden:", IDC_FIXEDDNS,
"BUTTON", BS_AUTORADIOBUTTON, 14, 155, 152, 12
+ LTEXT "&Bevorzugter DNS-Server:", -1, 14, 171, 135, 8
+ CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP,150,171-2,80,12
+ LTEXT "A<ernativer DNS-Server:", -1, 14, 186, 135, 8
+ CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP,150,186-2,80,12
+ PUSHBUTTON "&Erweitert...", IDC_ADVANCED, 186, 209, 50, 14, WS_DISABLED |
WS_TABSTOP
+END
Propchange: trunk/reactos/dll/win32/netcfgx/lang/de-DE.rc
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/win32/netcfgx/netcfgx.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/netcfgx.…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/netcfgx.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netcfgx/netcfgx.c [iso-8859-1] Tue Sep 9 19:13:39 2008
@@ -15,12 +15,20 @@
#include <debug.h>
HINSTANCE netcfgx_hInstance;
+const GUID CLSID_TcpipConfigNotifyObject = {0xA907657F, 0x6FDF, 0x11D0, {0x8E, 0xFB,
0x00, 0xC0, 0x4F, 0xD9, 0x12, 0xB2}};
+
+
+
static INTERFACE_TABLE InterfaceTable[] =
{
{
&CLSID_CNetCfg,
INetCfg_Constructor
+ },
+ {
+ &CLSID_TcpipConfigNotifyObject,
+ TcpipConfigNotify_Constructor
},
{
NULL,
Modified: trunk/reactos/dll/win32/netcfgx/netcfgx.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/netcfgx.…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/netcfgx.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netcfgx/netcfgx.rbuild [iso-8859-1] Tue Sep 9 19:13:39 2008
@@ -19,4 +19,6 @@
<file>classfactory.c</file>
<file>netcfg_iface.c</file>
<file>inetcfgcomp_iface.c</file>
+ <file>tcpipconf_notify.c</file>
+ <file>netcfgx.rc</file>
</module>
Added: trunk/reactos/dll/win32/netcfgx/netcfgx.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/netcfgx.…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/netcfgx.rc (added)
+++ trunk/reactos/dll/win32/netcfgx/netcfgx.rc [iso-8859-1] Tue Sep 9 19:13:39 2008
@@ -1,0 +1,18 @@
+#include <windows.h>
+#include "shlobj.h"
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "Network Configuration API\0"
+#define REACTOS_STR_INTERNAL_NAME "netcfgx.dll\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "netcfgx.dll\0"
+#define REACTOS_STR_PRODUCT_VERSION "5.1.2600.3264\0"
+#define REACTOS_STR_FILE_VERSION "5.1.2600.3264\0"
+
+#include <reactos/version.rc>
+
+
+#include "lang/de-DE.rc"
Propchange: trunk/reactos/dll/win32/netcfgx/netcfgx.rc
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/win32/netcfgx/precomp.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/precomp.…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/precomp.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/netcfgx/precomp.h [iso-8859-1] Tue Sep 9 19:13:39 2008
@@ -12,6 +12,7 @@
#include <iphlpapi.h>
#include <olectl.h>
#include <netcfgn.h>
+#include "resource.h"
typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID*
ppvObject);
typedef struct {
@@ -47,4 +48,9 @@
HRESULT STDCALL INetCfgComponent_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID *
ppv, NetCfgComponentItem * pItem,INetCfg * iface);
HRESULT STDCALL IEnumNetCfgComponent_Constructor (IUnknown * pUnkOuter, REFIID riid,
LPVOID * ppv, NetCfgComponentItem * pItem, INetCfg * iface);
+/* tcpipconf_notify.c */
+HRESULT WINAPI TcpipConfigNotify_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID *
ppv);
+
+extern const GUID CLSID_TcpipConfigNotifyObject;
+
#endif
Added: trunk/reactos/dll/win32/netcfgx/resource.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/resource…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/resource.h (added)
+++ trunk/reactos/dll/win32/netcfgx/resource.h [iso-8859-1] Tue Sep 9 19:13:39 2008
@@ -1,0 +1,21 @@
+#ifndef _RESOURCE_H__
+#define _RESOURCE_H__
+
+/* dialogs */
+#define IDD_TCPIP_BASIC_DLG 100
+
+/* controls */
+#define IDC_USEDHCP 1000
+#define IDC_NODHCP 1001
+#define IDC_IPADDR 1002
+#define IDC_SUBNETMASK 1003
+#define IDC_DEFGATEWAY 1004
+#define IDC_AUTODNS 1005
+#define IDC_FIXEDDNS 1006
+#define IDC_DNS1 1007
+#define IDC_DNS2 1008
+#define IDC_ADVANCED 1009
+
+
+
+#endif
Propchange: trunk/reactos/dll/win32/netcfgx/resource.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/netcfgx/tcpipconf_notify.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netcfgx/tcpipcon…
==============================================================================
--- trunk/reactos/dll/win32/netcfgx/tcpipconf_notify.c (added)
+++ trunk/reactos/dll/win32/netcfgx/tcpipconf_notify.c [iso-8859-1] Tue Sep 9 19:13:39
2008
@@ -1,0 +1,339 @@
+#include "precomp.h"
+
+typedef struct
+{
+ const INetCfgComponentPropertyUi * lpVtbl;
+ const INetCfgComponentControl * lpVtblCompControl;
+ LONG ref;
+ IUnknown * pUnknown;
+ INetCfg * pNCfg;
+ INetCfgComponent * pNComp;
+}TcpipConfNotifyImpl, *LPTcpipConfNotifyImpl;
+
+static LPTcpipConfNotifyImpl __inline
impl_from_INetCfgComponentControl(INetCfgComponentControl *iface)
+{
+ return (TcpipConfNotifyImpl*)((char *)iface - FIELD_OFFSET(TcpipConfNotifyImpl,
lpVtblCompControl));
+}
+
+
+HPROPSHEETPAGE
+InitializePropertySheetPage(LPWSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR
szTitle)
+{
+ PROPSHEETPAGEW ppage;
+
+ memset(&ppage, 0x0, sizeof(PROPSHEETPAGEW));
+ ppage.dwSize = sizeof(PROPSHEETPAGEW);
+ ppage.dwFlags = PSP_DEFAULT;
+ ppage.u.pszTemplate = resname;
+ ppage.pfnDlgProc = dlgproc;
+ ppage.lParam = lParam;
+ ppage.hInstance = netcfgx_hInstance;
+ if (szTitle)
+ {
+ ppage.dwFlags |= PSP_USETITLE;
+ ppage.pszTitle = szTitle;
+ }
+ return CreatePropertySheetPageW(&ppage);
+}
+
+INT_PTR
+CALLBACK
+TcpipBasicDlg(
+ HWND hwndDlg,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam
+)
+{
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ return TRUE;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+/***************************************************************
+ * INetCfgComponentPropertyUi interface
+ */
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnQueryInterface(
+ INetCfgComponentPropertyUi * iface,
+ REFIID iid,
+ LPVOID * ppvObj)
+{
+ //LPOLESTR pStr;
+ TcpipConfNotifyImpl * This = (TcpipConfNotifyImpl*)iface;
+
+ *ppvObj = NULL;
+
+
+ if (IsEqualIID (iid, &IID_IUnknown) ||
+ IsEqualIID (iid, &IID_INetCfgComponentPropertyUi))
+ {
+ *ppvObj = This;
+ INetCfgComponentPropertyUi_AddRef(iface);
+ return S_OK;
+ }
+ else if (IsEqualIID(iid, &IID_INetCfgComponentControl))
+ {
+ *ppvObj = (LPVOID*)&This->lpVtblCompControl;
+ INetCfgComponentPropertyUi_AddRef(iface);
+ return S_OK;
+ }
+
+ //StringFromCLSID(iid, &pStr);
+ //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface",
MB_OK);
+ //CoTaskMemFree(pStr);
+
+ return E_NOINTERFACE;
+}
+
+
+ULONG
+STDCALL
+INetCfgComponentPropertyUi_fnAddRef(
+ INetCfgComponentPropertyUi * iface)
+{
+ TcpipConfNotifyImpl * This = (TcpipConfNotifyImpl*)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
+
+ return refCount;
+}
+
+ULONG
+STDCALL
+INetCfgComponentPropertyUi_fnRelease(
+ INetCfgComponentPropertyUi * iface)
+{
+ TcpipConfNotifyImpl * This = (TcpipConfNotifyImpl*)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
+
+ if (!refCount)
+ {
+ CoTaskMemFree(This);
+ }
+ return refCount;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnQueryPropertyUi(
+ INetCfgComponentPropertyUi * iface,
+ IUnknown *pUnkReserved)
+{
+ INetLanConnectionUiInfo * pLanInfo;
+ HRESULT hr;
+
+ hr = IUnknown_QueryInterface(pUnkReserved, &IID_INetLanConnectionUiInfo,
(LPVOID*)&pLanInfo);
+ if (FAILED(hr))
+ return hr;
+
+ //FIXME
+ // check if tcpip is enabled on that binding */
+ IUnknown_Release(pUnkReserved);
+ return S_OK;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnSetContext(
+ INetCfgComponentPropertyUi * iface,
+ IUnknown *pUnkReserved)
+{
+ TcpipConfNotifyImpl * This = (TcpipConfNotifyImpl*)iface;
+
+ if (!iface || !pUnkReserved)
+ return E_POINTER;
+
+ This->pUnknown = pUnkReserved;
+ return S_OK;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnMergePropPages(
+ INetCfgComponentPropertyUi * iface,
+ DWORD *pdwDefPages,
+ BYTE **pahpspPrivate,
+ UINT *pcPages,
+ HWND hwndParent,
+ LPCWSTR *pszStartPage)
+{
+ HPROPSHEETPAGE * hppages;
+ TcpipConfNotifyImpl * This = (TcpipConfNotifyImpl*)iface;
+
+ hppages = (HPROPSHEETPAGE*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE));
+ if (!hppages)
+ return E_FAIL;
+
+ hppages[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG),
TcpipBasicDlg, (LPARAM)This, NULL);
+ if (!hppages[0])
+ {
+ CoTaskMemFree(hppages);
+ return E_FAIL;
+ }
+
+ *pahpspPrivate = (BYTE*)hppages;
+ *pcPages = 1;
+
+ return S_OK;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnValidateProperties(
+ INetCfgComponentPropertyUi * iface,
+ HWND hwndSheet)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnApplyProperties(
+ INetCfgComponentPropertyUi * iface)
+{
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDCALL
+INetCfgComponentPropertyUi_fnCancelProperties(
+ INetCfgComponentPropertyUi * iface)
+{
+ return E_NOTIMPL;
+}
+
+static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi =
+{
+ INetCfgComponentPropertyUi_fnQueryInterface,
+ INetCfgComponentPropertyUi_fnAddRef,
+ INetCfgComponentPropertyUi_fnRelease,
+ INetCfgComponentPropertyUi_fnQueryPropertyUi,
+ INetCfgComponentPropertyUi_fnSetContext,
+ INetCfgComponentPropertyUi_fnMergePropPages,
+ INetCfgComponentPropertyUi_fnValidateProperties,
+ INetCfgComponentPropertyUi_fnApplyProperties,
+ INetCfgComponentPropertyUi_fnCancelProperties
+};
+
+/***************************************************************
+ * INetCfgComponentControl interface
+ */
+
+HRESULT
+STDCALL
+INetCfgComponentControl_fnQueryInterface(
+ INetCfgComponentControl * iface,
+ REFIID iid,
+ LPVOID * ppvObj)
+{
+ TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
+ return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi*)This,
iid, ppvObj);
+}
+
+ULONG
+STDCALL
+INetCfgComponentControl_fnAddRef(
+ INetCfgComponentControl * iface)
+{
+ TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
+ return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi*)This);
+}
+
+ULONG
+STDCALL
+INetCfgComponentControl_fnRelease(
+ INetCfgComponentControl * iface)
+{
+ TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
+ return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi*)This);
+}
+
+HRESULT
+STDCALL
+INetCfgComponentControl_fnInitialize(
+ INetCfgComponentControl * iface,
+ INetCfgComponent *pIComp,
+ INetCfg *pINetCfg,
+ BOOL fInstalling)
+{
+ TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
+
+ This->pNCfg = pINetCfg;
+ This->pNComp = pIComp;
+
+ return S_OK;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentControl_fnApplyRegistryChanges(
+ INetCfgComponentControl * iface)
+{
+ return S_OK;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentControl_fnApplyPnpChanges(
+ INetCfgComponentControl * iface,
+ INetCfgPnpReconfigCallback *pICallback)
+{
+ return S_OK;
+}
+
+HRESULT
+STDCALL
+INetCfgComponentControl_fnCancelChanges(
+ INetCfgComponentControl * iface)
+{
+ return S_OK;
+}
+
+static const INetCfgComponentControlVtbl vt_NetCfgComponentControl =
+{
+ INetCfgComponentControl_fnQueryInterface,
+ INetCfgComponentControl_fnAddRef,
+ INetCfgComponentControl_fnRelease,
+ INetCfgComponentControl_fnInitialize,
+ INetCfgComponentControl_fnApplyRegistryChanges,
+ INetCfgComponentControl_fnApplyPnpChanges,
+ INetCfgComponentControl_fnCancelChanges
+};
+
+HRESULT
+STDCALL
+TcpipConfigNotify_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
+{
+ TcpipConfNotifyImpl *This;
+
+ if (!ppv)
+ return E_POINTER;
+
+ This = (TcpipConfNotifyImpl *) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl));
+ if (!This)
+ return E_OUTOFMEMORY;
+
+ This->ref = 1;
+ This->lpVtbl = (const
INetCfgComponentPropertyUi*)&vt_NetCfgComponentPropertyUi;
+ This->lpVtblCompControl = (const
INetCfgComponentControl*)&vt_NetCfgComponentControl;
+ This->pNCfg = NULL;
+ This->pUnknown = NULL;
+ This->pNComp = NULL;
+
+ if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface
((INetCfgComponentPropertyUi*)This, riid, ppv)))
+ {
+ INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi*)This);
+ return E_NOINTERFACE;
+ }
+
+ INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi*)This);
+ return S_OK;
+}
Propchange: trunk/reactos/dll/win32/netcfgx/tcpipconf_notify.c
------------------------------------------------------------------------------
svn:eol-style = native