From fa041e04addc9d29a3042dd39998d4ce4060beac Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 19 Aug 2016 09:55:53 +0000 Subject: [PATCH] [HNETCFG] Sync with Wine Staging 1.9.16. CORE-11866 svn path=/trunk/; revision=72363 --- reactos/dll/win32/hnetcfg/apps.c | 1 + reactos/dll/win32/hnetcfg/hnetcfg.c | 5 + reactos/dll/win32/hnetcfg/hnetcfg.idl | 8 + reactos/dll/win32/hnetcfg/hnetcfg.rgs | 9 + reactos/dll/win32/hnetcfg/hnetcfg_private.h | 2 + reactos/dll/win32/hnetcfg/policy.c | 331 ++++++++++++++++++++ reactos/media/doc/README.WINE | 2 +- 7 files changed, 357 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/hnetcfg/apps.c b/reactos/dll/win32/hnetcfg/apps.c index 33e2c2dfabc..dca2622226e 100644 --- a/reactos/dll/win32/hnetcfg/apps.c +++ b/reactos/dll/win32/hnetcfg/apps.c @@ -100,6 +100,7 @@ static REFIID tid_id[] = &IID_INetFwOpenPort, &IID_INetFwOpenPorts, &IID_INetFwPolicy, + &IID_INetFwPolicy2, &IID_INetFwProfile }; diff --git a/reactos/dll/win32/hnetcfg/hnetcfg.c b/reactos/dll/win32/hnetcfg/hnetcfg.c index 11b1bf57a5c..5473838dbd6 100644 --- a/reactos/dll/win32/hnetcfg/hnetcfg.c +++ b/reactos/dll/win32/hnetcfg/hnetcfg.c @@ -102,6 +102,7 @@ static const struct IClassFactoryVtbl hnetcfg_cf_vtbl = static hnetcfg_cf fw_manager_cf = { { &hnetcfg_cf_vtbl }, NetFwMgr_create }; static hnetcfg_cf fw_app_cf = { { &hnetcfg_cf_vtbl }, NetFwAuthorizedApplication_create }; static hnetcfg_cf fw_openport_cf = { { &hnetcfg_cf_vtbl }, NetFwOpenPort_create }; +static hnetcfg_cf fw_policy2_cf = { { &hnetcfg_cf_vtbl }, NetFwPolicy2_create }; BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID reserved) { @@ -140,6 +141,10 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID iid, LPVOID *ppv ) { cf = &fw_openport_cf.IClassFactory_iface; } + else if (IsEqualGUID( rclsid, &CLSID_NetFwPolicy2 )) + { + cf = &fw_policy2_cf.IClassFactory_iface; + } if (!cf) return CLASS_E_CLASSNOTAVAILABLE; return IClassFactory_QueryInterface( cf, iid, ppv ); diff --git a/reactos/dll/win32/hnetcfg/hnetcfg.idl b/reactos/dll/win32/hnetcfg/hnetcfg.idl index 9934f6ac4b9..763529a83b9 100644 --- a/reactos/dll/win32/hnetcfg/hnetcfg.idl +++ b/reactos/dll/win32/hnetcfg/hnetcfg.idl @@ -43,3 +43,11 @@ coclass NetFwAuthorizedApplication { interface INetFwAuthorizedApplications; } uuid(0ca545c6-37ad-4a6c-bf92-9f7610067ef5) ] coclass NetFwOpenPort { interface INetFwOpenPort; } + +[ + helpstring("HNetCfg.FwPolicy2"), + progid("HNetCfg.FwPolicy2"), + threading(both), + uuid(e2b3c97f-6ae1-41ac-817a-f6f92166d7dd) +] +coclass NetFwPolicy2 { interface INetFwPolicy2; } diff --git a/reactos/dll/win32/hnetcfg/hnetcfg.rgs b/reactos/dll/win32/hnetcfg/hnetcfg.rgs index e74b8a2c9c9..eb7f5266fca 100644 --- a/reactos/dll/win32/hnetcfg/hnetcfg.rgs +++ b/reactos/dll/win32/hnetcfg/hnetcfg.rgs @@ -20,6 +20,11 @@ HKCR InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } ProgId = s 'HNetCfg.FwOpenPort' } + '{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD}' = s 'HNetCfg.FwPolicy2' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } + ProgId = s 'HNetCfg.FwPolicy2' + } } 'HNetCfg.FwMgr' = s 'HNetCfg.FwMgr' { @@ -33,4 +38,8 @@ HKCR { CLSID = s '{0CA545C6-37AD-4A6C-BF92-9F7610067EF5}' } + 'HNetCfg.FwPolicy2' = s 'HNetCfg.FwPolicy2' + { + CLSID = s '{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD}' + } } diff --git a/reactos/dll/win32/hnetcfg/hnetcfg_private.h b/reactos/dll/win32/hnetcfg/hnetcfg_private.h index 1f9092a36f2..94751a18b60 100644 --- a/reactos/dll/win32/hnetcfg/hnetcfg_private.h +++ b/reactos/dll/win32/hnetcfg/hnetcfg_private.h @@ -45,6 +45,7 @@ enum type_id INetFwOpenPort_tid, INetFwOpenPorts_tid, INetFwPolicy_tid, + INetFwPolicy2_tid, INetFwProfile_tid, last_tid }; @@ -54,6 +55,7 @@ void release_typelib(void) DECLSPEC_HIDDEN; HRESULT NetFwMgr_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN; HRESULT NetFwPolicy_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN; +HRESULT NetFwPolicy2_create(IUnknown *, void **) DECLSPEC_HIDDEN; HRESULT NetFwProfile_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN; HRESULT NetFwAuthorizedApplication_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN; HRESULT NetFwAuthorizedApplications_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN; diff --git a/reactos/dll/win32/hnetcfg/policy.c b/reactos/dll/win32/hnetcfg/policy.c index 4f909786f57..f41800dd3e3 100644 --- a/reactos/dll/win32/hnetcfg/policy.c +++ b/reactos/dll/win32/hnetcfg/policy.c @@ -29,6 +29,17 @@ static inline fw_policy *impl_from_INetFwPolicy( INetFwPolicy *iface ) return CONTAINING_RECORD(iface, fw_policy, INetFwPolicy_iface); } +typedef struct fw_policy2 +{ + INetFwPolicy2 INetFwPolicy2_iface; + LONG refs; +} fw_policy2; + +static inline fw_policy2 *impl_from_INetFwPolicy2( INetFwPolicy2 *iface ) +{ + return CONTAINING_RECORD(iface, fw_policy2, INetFwPolicy2_iface); +} + static ULONG WINAPI fw_policy_AddRef( INetFwPolicy *iface ) { @@ -198,3 +209,323 @@ HRESULT NetFwPolicy_create( IUnknown *pUnkOuter, LPVOID *ppObj ) TRACE("returning iface %p\n", *ppObj); return S_OK; } + +static HRESULT WINAPI fwpolicy2_QueryInterface(INetFwPolicy2 *iface, REFIID riid, void **out) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), out ); + + if ( IsEqualGUID( riid, &IID_INetFwPolicy2 ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *out = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwPolicy2_AddRef( iface ); + return S_OK; +} + +static ULONG WINAPI fwpolicy2_AddRef(INetFwPolicy2 *iface) +{ + fw_policy2 *fw_policy = impl_from_INetFwPolicy2( iface ); + return InterlockedIncrement( &fw_policy->refs ); +} + +static ULONG WINAPI fwpolicy2_Release(INetFwPolicy2 *iface) +{ + fw_policy2 *fw_policy = impl_from_INetFwPolicy2( iface ); + LONG refs = InterlockedDecrement( &fw_policy->refs ); + if (!refs) + { + TRACE("destroying %p\n", fw_policy); + HeapFree( GetProcessHeap(), 0, fw_policy ); + } + return refs; +} + +static HRESULT WINAPI fwpolicy2_GetTypeInfoCount(INetFwPolicy2 *iface, UINT *pctinfo) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + TRACE("%p %p\n", This, pctinfo); + *pctinfo = 1; + return S_OK; +} + +static HRESULT WINAPI fwpolicy2_GetTypeInfo(INetFwPolicy2 *iface, UINT iTInfo, LCID lcid, ITypeInfo **info) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + TRACE("%p %u %u %p\n", This, iTInfo, lcid, info); + return get_typeinfo( INetFwPolicy2_tid, info ); +} + +static HRESULT WINAPI fwpolicy2_GetIDsOfNames(INetFwPolicy2 *iface, REFIID riid, LPOLESTR *rgszNames, + UINT cNames, LCID lcid, DISPID *rgDispId) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + ITypeInfo *typeinfo; + HRESULT hr; + + TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + + hr = get_typeinfo( INetFwPolicy2_tid, &typeinfo ); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId ); + ITypeInfo_Release( typeinfo ); + } + return hr; +} + +static HRESULT WINAPI fwpolicy2_Invoke(INetFwPolicy2 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, + WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + ITypeInfo *typeinfo; + HRESULT hr; + + TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + hr = get_typeinfo( INetFwPolicy2_tid, &typeinfo ); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_Invoke( typeinfo, &This->INetFwPolicy2_iface, dispIdMember, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr ); + ITypeInfo_Release( typeinfo ); + } + return hr; +} + +static HRESULT WINAPI fwpolicy2_get_CurrentProfileTypes(INetFwPolicy2 *iface, LONG *profile) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %p\n", This, profile); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_FirewallEnabled(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL *enabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, enabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_FirewallEnabled(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL enabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %d\n", This, profileType, enabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_ExcludedInterfaces(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT *interfaces) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, interfaces); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_ExcludedInterfaces(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT interfaces) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + FIXME("%p %d\n", This, profileType); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_BlockAllInboundTraffic(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL *block) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, block); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_BlockAllInboundTraffic(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL block) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %d\n", This, profileType, block); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_NotificationsDisabled(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL *disabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_NotificationsDisabled(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL disabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %d\n", This, profileType, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_UnicastResponsesToMulticastBroadcastDisabled(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL *disabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_UnicastResponsesToMulticastBroadcastDisabled(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, VARIANT_BOOL disabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %d\n", This, profileType, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_Rules(INetFwPolicy2 *iface, INetFwRules **rules) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %p\n", This, rules); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_ServiceRestriction(INetFwPolicy2 *iface, INetFwServiceRestriction **ServiceRestriction) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %p\n", This, ServiceRestriction); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_EnableRuleGroup(INetFwPolicy2 *iface, LONG bitmask, BSTR group, VARIANT_BOOL enable) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %s %d\n", This, bitmask, debugstr_w(group), enable); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_IsRuleGroupEnabled(INetFwPolicy2 *iface, LONG bitmask, BSTR group, VARIANT_BOOL *enabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %s %p\n", This, bitmask, debugstr_w(group), enabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_RestoreLocalFirewallDefaults(INetFwPolicy2 *iface) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_DefaultInboundAction(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, NET_FW_ACTION *action) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, action); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_DefaultInboundAction(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, NET_FW_ACTION action) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %d\n", This, profileType, action); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_DefaultOutboundAction(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, NET_FW_ACTION *action) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %p\n", This, profileType, action); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_put_DefaultOutboundAction(INetFwPolicy2 *iface, NET_FW_PROFILE_TYPE2 profileType, NET_FW_ACTION action) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %d %d\n", This, profileType, action); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_IsRuleGroupCurrentlyEnabled(INetFwPolicy2 *iface, BSTR group, VARIANT_BOOL *enabled) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %s %p\n", This, debugstr_w(group), enabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fwpolicy2_get_LocalPolicyModifyState(INetFwPolicy2 *iface, NET_FW_MODIFY_STATE *modifyState) +{ + fw_policy2 *This = impl_from_INetFwPolicy2( iface ); + + FIXME("%p %p\n", This, modifyState); + return E_NOTIMPL; +} + +static const struct INetFwPolicy2Vtbl fw_policy2_vtbl = +{ + fwpolicy2_QueryInterface, + fwpolicy2_AddRef, + fwpolicy2_Release, + fwpolicy2_GetTypeInfoCount, + fwpolicy2_GetTypeInfo, + fwpolicy2_GetIDsOfNames, + fwpolicy2_Invoke, + fwpolicy2_get_CurrentProfileTypes, + fwpolicy2_get_FirewallEnabled, + fwpolicy2_put_FirewallEnabled, + fwpolicy2_get_ExcludedInterfaces, + fwpolicy2_put_ExcludedInterfaces, + fwpolicy2_get_BlockAllInboundTraffic, + fwpolicy2_put_BlockAllInboundTraffic, + fwpolicy2_get_NotificationsDisabled, + fwpolicy2_put_NotificationsDisabled, + fwpolicy2_get_UnicastResponsesToMulticastBroadcastDisabled, + fwpolicy2_put_UnicastResponsesToMulticastBroadcastDisabled, + fwpolicy2_get_Rules, + fwpolicy2_get_ServiceRestriction, + fwpolicy2_EnableRuleGroup, + fwpolicy2_IsRuleGroupEnabled, + fwpolicy2_RestoreLocalFirewallDefaults, + fwpolicy2_get_DefaultInboundAction, + fwpolicy2_put_DefaultInboundAction, + fwpolicy2_get_DefaultOutboundAction, + fwpolicy2_put_DefaultOutboundAction, + fwpolicy2_get_IsRuleGroupCurrentlyEnabled, + fwpolicy2_get_LocalPolicyModifyState +}; + +HRESULT NetFwPolicy2_create( IUnknown *outer, void **obj ) +{ + fw_policy2 *fp; + + TRACE("(%p,%p)\n", outer, obj); + + fp = HeapAlloc( GetProcessHeap(), 0, sizeof(*fp) ); + if (!fp) return E_OUTOFMEMORY; + + fp->INetFwPolicy2_iface.lpVtbl = &fw_policy2_vtbl; + fp->refs = 1; + + *obj = &fp->INetFwPolicy2_iface; + + TRACE("returning iface %p\n", *obj); + return S_OK; +} diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 2e813171cd6..f87cf7d0d29 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -71,7 +71,7 @@ reactos/dll/win32/fusion # Synced to WineStaging-1.9.11 reactos/dll/win32/gdiplus # Synced to WineStaging-1.9.16 reactos/dll/win32/hhctrl.ocx # Synced to WineStaging-1.9.16 reactos/dll/win32/hlink # Synced to WineStaging-1.9.16 -reactos/dll/win32/hnetcfg # Synced to WineStaging-1.9.11 +reactos/dll/win32/hnetcfg # Synced to WineStaging-1.9.16 reactos/dll/win32/httpapi # Synced to WineStaging-1.9.11 reactos/dll/win32/iccvid # Synced to WineStaging-1.9.11 reactos/dll/win32/ieframe # Synced to WineStaging-1.9.16