From eb312a8fb09a15c6fbff1d1c7be45a255dc9a894 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 15 Aug 2009 13:55:40 +0000 Subject: [PATCH] - Add bcrypt, xmllite and hnetcfg from Wine svn path=/trunk/; revision=42700 --- reactos/baseaddress.rbuild | 1 + reactos/boot/bootdata/packages/reactos.dff | 3 + reactos/dll/win32/bcrypt/bcrypt.rbuild | 10 + reactos/dll/win32/bcrypt/bcrypt.spec | 58 +++ reactos/dll/win32/bcrypt/bcrypt_main.c | 40 ++ reactos/dll/win32/bcrypt/version.rc | 26 + reactos/dll/win32/hnetcfg/apps.c | 500 ++++++++++++++++++++ reactos/dll/win32/hnetcfg/hnetcfg.c | 152 ++++++ reactos/dll/win32/hnetcfg/hnetcfg.rbuild | 18 + reactos/dll/win32/hnetcfg/hnetcfg.spec | 4 + reactos/dll/win32/hnetcfg/hnetcfg_private.h | 23 + reactos/dll/win32/hnetcfg/manager.c | 240 ++++++++++ reactos/dll/win32/hnetcfg/policy.c | 196 ++++++++ reactos/dll/win32/hnetcfg/profile.c | 329 +++++++++++++ reactos/dll/win32/hnetcfg/regsvr.c | 430 +++++++++++++++++ reactos/dll/win32/win32.rbuild | 9 + reactos/dll/win32/xmllite/xmllite.rbuild | 9 + reactos/dll/win32/xmllite/xmllite.spec | 6 + reactos/dll/win32/xmllite/xmllite_main.c | 47 ++ reactos/include/psdk/icftypes.idl | 69 +++ reactos/include/psdk/netfw.idl | 470 ++++++++++++++++++ reactos/include/psdk/psdk.rbuild | 2 + reactos/media/doc/README.WINE | 3 + 23 files changed, 2645 insertions(+) create mode 100644 reactos/dll/win32/bcrypt/bcrypt.rbuild create mode 100644 reactos/dll/win32/bcrypt/bcrypt.spec create mode 100644 reactos/dll/win32/bcrypt/bcrypt_main.c create mode 100644 reactos/dll/win32/bcrypt/version.rc create mode 100644 reactos/dll/win32/hnetcfg/apps.c create mode 100644 reactos/dll/win32/hnetcfg/hnetcfg.c create mode 100644 reactos/dll/win32/hnetcfg/hnetcfg.rbuild create mode 100644 reactos/dll/win32/hnetcfg/hnetcfg.spec create mode 100644 reactos/dll/win32/hnetcfg/hnetcfg_private.h create mode 100644 reactos/dll/win32/hnetcfg/manager.c create mode 100644 reactos/dll/win32/hnetcfg/policy.c create mode 100644 reactos/dll/win32/hnetcfg/profile.c create mode 100644 reactos/dll/win32/hnetcfg/regsvr.c create mode 100644 reactos/dll/win32/xmllite/xmllite.rbuild create mode 100644 reactos/dll/win32/xmllite/xmllite.spec create mode 100644 reactos/dll/win32/xmllite/xmllite_main.c create mode 100644 reactos/include/psdk/icftypes.idl create mode 100644 reactos/include/psdk/netfw.idl diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index c6e6517c9e8..f36856cde5b 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -108,6 +108,7 @@ + diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index 9116a4593f2..36326cf412d 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -257,6 +257,7 @@ dll\win32\atl\atl.dll 1 dll\win32\authz\authz.dll 1 dll\win32\avicap32\avicap32.dll 1 dll\win32\avifil32\avifil32.dll 1 +dll\win32\bcrypt\bcrypt.dll 1 dll\win32\beepmidi\beepmidi.dll 1 dll\win32\browseui\browseui.dll 1 dll\win32\cabinet\cabinet.dll 1 @@ -289,6 +290,7 @@ dll\win32\glu32\glu32.dll 1 dll\win32\hhctrl.ocx\hhctrl.ocx 1 dll\win32\hid\hid.dll 1 dll\win32\hlink\hlink.dll 1 +dll\win32\hnetcfg\hnetcfg.dll 1 dll\win32\httpapi\httpapi.dll 1 dll\win32\iccvid\iccvid.dll 1 dll\win32\icmp\icmp.dll 1 @@ -459,6 +461,7 @@ dll\win32\xinput1_1\xinput1_1.dll 1 dll\win32\xinput1_2\xinput1_2.dll 1 dll\win32\xinput1_3\xinput1_3.dll 1 dll\win32\xinput9_1_0\xinput9_1_0.dll 1 +dll\win32\xmllite\xmllite.dll 1 dll\win32\winmm\midimap\midimap.dll 1 dll\win32\wdmaud.drv\wdmaud.drv 1 diff --git a/reactos/dll/win32/bcrypt/bcrypt.rbuild b/reactos/dll/win32/bcrypt/bcrypt.rbuild new file mode 100644 index 00000000000..5d497336e75 --- /dev/null +++ b/reactos/dll/win32/bcrypt/bcrypt.rbuild @@ -0,0 +1,10 @@ + + + . + include/reactos/wine + + wine + kernel32 + bcrypt_main.c + version.rc + diff --git a/reactos/dll/win32/bcrypt/bcrypt.spec b/reactos/dll/win32/bcrypt/bcrypt.spec new file mode 100644 index 00000000000..7d85e124e08 --- /dev/null +++ b/reactos/dll/win32/bcrypt/bcrypt.spec @@ -0,0 +1,58 @@ +@ stub BCryptAddContextFunction +@ stub BCryptAddContextFunctionProvider +@ stub BCryptCloseAlgorithmProvider +@ stub BCryptConfigureContext +@ stub BCryptConfigureContextFunction +@ stub BCryptCreateContext +@ stub BCryptCreateHash +@ stub BCryptDecrypt +@ stub BCryptDeleteContext +@ stub BCryptDeriveKey +@ stub BCryptDestroyHash +@ stub BCryptDestroyKey +@ stub BCryptDestroySecret +@ stub BCryptDuplicateHash +@ stub BCryptDuplicateKey +@ stub BCryptEncrypt +@ stub BCryptEnumAlgorithms +@ stub BCryptEnumContextFunctionProviders +@ stub BCryptEnumContextFunctions +@ stub BCryptEnumContexts +@ stub BCryptEnumProviders +@ stub BCryptEnumRegisteredProviders +@ stub BCryptExportKey +@ stub BCryptFinalizeKeyPair +@ stub BCryptFinishHash +@ stub BCryptFreeBuffer +@ stub BCryptGenRandom +@ stub BCryptGenerateKeyPair +@ stub BCryptGenerateSymmetricKey +@ stub BCryptGetFipsAlgorithmMode +@ stub BCryptGetProperty +@ stub BCryptHashData +@ stub BCryptImportKey +@ stub BCryptImportKeyPair +@ stub BCryptOpenAlgorithmProvider +@ stub BCryptQueryContextConfiguration +@ stub BCryptQueryContextFunctionConfiguration +@ stub BCryptQueryContextFunctionProperty +@ stub BCryptQueryProviderRegistration +@ stub BCryptRegisterConfigChangeNotify +@ stub BCryptRegisterProvider +@ stub BCryptRemoveContextFunction +@ stub BCryptRemoveContextFunctionProvider +@ stub BCryptResolveProviders +@ stub BCryptSecretAgreement +@ stub BCryptSetAuditingInterface +@ stub BCryptSetContextFunctionProperty +@ stub BCryptSetProperty +@ stub BCryptSignHash +@ stub BCryptUnregisterConfigChangeNotify +@ stub BCryptUnregisterProvider +@ stub BCryptVerifySignature +@ stub GetAsymmetricEncryptionInterface +@ stub GetCipherInterface +@ stub GetHashInterface +@ stub GetRngInterface +@ stub GetSecretAgreementInterface +@ stub GetSignatureInterface diff --git a/reactos/dll/win32/bcrypt/bcrypt_main.c b/reactos/dll/win32/bcrypt/bcrypt_main.c new file mode 100644 index 00000000000..abe97503045 --- /dev/null +++ b/reactos/dll/win32/bcrypt/bcrypt_main.c @@ -0,0 +1,40 @@ +/* + * Copyright 2009 Henri Verbeet for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +#include "config.h" +#include "wine/port.h" +#include "wine/debug.h" + +#include "winbase.h" + +WINE_DEFAULT_DEBUG_CHANNEL(bcrypt); + +BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) +{ + TRACE("fdwReason %u\n", fdwReason); + + switch(fdwReason) + { + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hInstDLL); + break; + } + + return TRUE; +} diff --git a/reactos/dll/win32/bcrypt/version.rc b/reactos/dll/win32/bcrypt/version.rc new file mode 100644 index 00000000000..54253a92bca --- /dev/null +++ b/reactos/dll/win32/bcrypt/version.rc @@ -0,0 +1,26 @@ +/* + * Copyright 2009 Henri Verbeet for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define WINE_FILEDESCRIPTION_STR "Wine Crypto Library" +#define WINE_FILENAME_STR "bcrypt.dll" +#define WINE_FILEVERSION 6,0,6000,16386 +#define WINE_FILEVERSION_STR "6.0.6000.16386" +#define WINE_PRODUCTVERSION 6,0,6000,16386 +#define WINE_PRODUCTVERSION_STR "6.0.6000.16386" + +#include "wine/wine_common_ver.rc" diff --git a/reactos/dll/win32/hnetcfg/apps.c b/reactos/dll/win32/hnetcfg/apps.c new file mode 100644 index 00000000000..fbd603cd610 --- /dev/null +++ b/reactos/dll/win32/hnetcfg/apps.c @@ -0,0 +1,500 @@ +/* + * Copyright 2009 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" +#include "netfw.h" + +#include "wine/debug.h" +#include "wine/unicode.h" +#include "hnetcfg_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg); + +typedef struct fw_app +{ + const INetFwAuthorizedApplicationVtbl *vtbl; + LONG refs; +} fw_app; + +static inline fw_app *impl_from_INetFwAuthorizedApplication( INetFwAuthorizedApplication *iface ) +{ + return (fw_app *)((char *)iface - FIELD_OFFSET( fw_app, vtbl )); +} + +static ULONG WINAPI fw_app_AddRef( + INetFwAuthorizedApplication *iface ) +{ + fw_app *fw_app = impl_from_INetFwAuthorizedApplication( iface ); + return InterlockedIncrement( &fw_app->refs ); +} + +static ULONG WINAPI fw_app_Release( + INetFwAuthorizedApplication *iface ) +{ + fw_app *fw_app = impl_from_INetFwAuthorizedApplication( iface ); + LONG refs = InterlockedDecrement( &fw_app->refs ); + if (!refs) + { + TRACE("destroying %p\n", fw_app); + HeapFree( GetProcessHeap(), 0, fw_app ); + } + return refs; +} + +static HRESULT WINAPI fw_app_QueryInterface( + INetFwAuthorizedApplication *iface, + REFIID riid, + void **ppvObject ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + if ( IsEqualGUID( riid, &IID_INetFwAuthorizedApplication ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwAuthorizedApplication_AddRef( iface ); + return S_OK; +} + +static HRESULT WINAPI fw_app_GetTypeInfoCount( + INetFwAuthorizedApplication *iface, + UINT *pctinfo ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p %p\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_GetTypeInfo( + INetFwAuthorizedApplication *iface, + UINT iTInfo, + LCID lcid, + ITypeInfo **ppTInfo ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_GetIDsOfNames( + INetFwAuthorizedApplication *iface, + REFIID riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_Invoke( + INetFwAuthorizedApplication *iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_get_Name( + INetFwAuthorizedApplication *iface, + BSTR *name ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %p\n", This, name); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_put_Name( + INetFwAuthorizedApplication *iface, + BSTR name ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %s\n", This, debugstr_w(name)); + return S_OK; +} + +static HRESULT WINAPI fw_app_get_ProcessImageFileName( + INetFwAuthorizedApplication *iface, + BSTR *imageFileName ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %p\n", This, imageFileName); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_put_ProcessImageFileName( + INetFwAuthorizedApplication *iface, + BSTR imageFileName ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %s\n", This, debugstr_w(imageFileName)); + return S_OK; +} + +static HRESULT WINAPI fw_app_get_IpVersion( + INetFwAuthorizedApplication *iface, + NET_FW_IP_VERSION *ipVersion ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %p\n", This, ipVersion); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_put_IpVersion( + INetFwAuthorizedApplication *iface, + NET_FW_IP_VERSION ipVersion ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %u\n", This, ipVersion); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_get_Scope( + INetFwAuthorizedApplication *iface, + NET_FW_SCOPE *scope ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %p\n", This, scope); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_put_Scope( + INetFwAuthorizedApplication *iface, + NET_FW_SCOPE scope ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %u\n", This, scope); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_get_RemoteAddresses( + INetFwAuthorizedApplication *iface, + BSTR *remoteAddrs ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %p\n", This, remoteAddrs); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_put_RemoteAddresses( + INetFwAuthorizedApplication *iface, + BSTR remoteAddrs ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %s\n", This, debugstr_w(remoteAddrs)); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_app_get_Enabled( + INetFwAuthorizedApplication *iface, + VARIANT_BOOL *enabled ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %p\n", This, enabled); + + *enabled = VARIANT_FALSE; + return S_OK; +} + +static HRESULT WINAPI fw_app_put_Enabled( + INetFwAuthorizedApplication *iface, + VARIANT_BOOL enabled ) +{ + fw_app *This = impl_from_INetFwAuthorizedApplication( iface ); + + FIXME("%p, %d\n", This, enabled); + return E_NOTIMPL; +} + +static const struct INetFwAuthorizedApplicationVtbl fw_app_vtbl = +{ + fw_app_QueryInterface, + fw_app_AddRef, + fw_app_Release, + fw_app_GetTypeInfoCount, + fw_app_GetTypeInfo, + fw_app_GetIDsOfNames, + fw_app_Invoke, + fw_app_get_Name, + fw_app_put_Name, + fw_app_get_ProcessImageFileName, + fw_app_put_ProcessImageFileName, + fw_app_get_IpVersion, + fw_app_put_IpVersion, + fw_app_get_Scope, + fw_app_put_Scope, + fw_app_get_RemoteAddresses, + fw_app_put_RemoteAddresses, + fw_app_get_Enabled, + fw_app_put_Enabled +}; + +HRESULT NetFwAuthorizedApplication_create( IUnknown *pUnkOuter, LPVOID *ppObj ) +{ + fw_app *fa; + + TRACE("(%p,%p)\n", pUnkOuter, ppObj); + + fa = HeapAlloc( GetProcessHeap(), 0, sizeof(*fa) ); + if (!fa) return E_OUTOFMEMORY; + + fa->vtbl = &fw_app_vtbl; + fa->refs = 1; + + *ppObj = &fa->vtbl; + + TRACE("returning iface %p\n", *ppObj); + return S_OK; +} +typedef struct fw_apps +{ + const INetFwAuthorizedApplicationsVtbl *vtbl; + LONG refs; +} fw_apps; + +static inline fw_apps *impl_from_INetFwAuthorizedApplications( INetFwAuthorizedApplications *iface ) +{ + return (fw_apps *)((char *)iface - FIELD_OFFSET( fw_apps, vtbl )); +} + +static ULONG WINAPI fw_apps_AddRef( + INetFwAuthorizedApplications *iface ) +{ + fw_apps *fw_apps = impl_from_INetFwAuthorizedApplications( iface ); + return InterlockedIncrement( &fw_apps->refs ); +} + +static ULONG WINAPI fw_apps_Release( + INetFwAuthorizedApplications *iface ) +{ + fw_apps *fw_apps = impl_from_INetFwAuthorizedApplications( iface ); + LONG refs = InterlockedDecrement( &fw_apps->refs ); + if (!refs) + { + TRACE("destroying %p\n", fw_apps); + HeapFree( GetProcessHeap(), 0, fw_apps ); + } + return refs; +} + +static HRESULT WINAPI fw_apps_QueryInterface( + INetFwAuthorizedApplications *iface, + REFIID riid, + void **ppvObject ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + if ( IsEqualGUID( riid, &IID_INetFwAuthorizedApplications ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwAuthorizedApplications_AddRef( iface ); + return S_OK; +} + +static HRESULT WINAPI fw_apps_GetTypeInfoCount( + INetFwAuthorizedApplications *iface, + UINT *pctinfo ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p %p\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_apps_GetTypeInfo( + INetFwAuthorizedApplications *iface, + UINT iTInfo, + LCID lcid, + ITypeInfo **ppTInfo ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_apps_GetIDsOfNames( + INetFwAuthorizedApplications *iface, + REFIID riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_apps_Invoke( + INetFwAuthorizedApplications *iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_apps_get_Count( + INetFwAuthorizedApplications *iface, + LONG *count ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p, %p\n", This, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_apps_Add( + INetFwAuthorizedApplications *iface, + INetFwAuthorizedApplication *app ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p, %p\n", This, app); + return S_OK; +} + +static HRESULT WINAPI fw_apps_Remove( + INetFwAuthorizedApplications *iface, + BSTR imageFileName ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p, %s\n", This, debugstr_w(imageFileName)); + return S_OK; +} + +static HRESULT WINAPI fw_apps_Item( + INetFwAuthorizedApplications *iface, + BSTR imageFileName, + INetFwAuthorizedApplication **app ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + TRACE("%p, %s, %p\n", This, debugstr_w(imageFileName), app); + return NetFwAuthorizedApplication_create( NULL, (void **)app ); +} + +static HRESULT WINAPI fw_apps_get__NewEnum( + INetFwAuthorizedApplications *iface, + IUnknown **newEnum ) +{ + fw_apps *This = impl_from_INetFwAuthorizedApplications( iface ); + + FIXME("%p, %p\n", This, newEnum); + return E_NOTIMPL; +} + +static const struct INetFwAuthorizedApplicationsVtbl fw_apps_vtbl = +{ + fw_apps_QueryInterface, + fw_apps_AddRef, + fw_apps_Release, + fw_apps_GetTypeInfoCount, + fw_apps_GetTypeInfo, + fw_apps_GetIDsOfNames, + fw_apps_Invoke, + fw_apps_get_Count, + fw_apps_Add, + fw_apps_Remove, + fw_apps_Item, + fw_apps_get__NewEnum +}; + +HRESULT NetFwAuthorizedApplications_create( IUnknown *pUnkOuter, LPVOID *ppObj ) +{ + fw_apps *fa; + + TRACE("(%p,%p)\n", pUnkOuter, ppObj); + + fa = HeapAlloc( GetProcessHeap(), 0, sizeof(*fa) ); + if (!fa) return E_OUTOFMEMORY; + + fa->vtbl = &fw_apps_vtbl; + fa->refs = 1; + + *ppObj = &fa->vtbl; + + TRACE("returning iface %p\n", *ppObj); + return S_OK; +} diff --git a/reactos/dll/win32/hnetcfg/hnetcfg.c b/reactos/dll/win32/hnetcfg/hnetcfg.c new file mode 100644 index 00000000000..72336f91210 --- /dev/null +++ b/reactos/dll/win32/hnetcfg/hnetcfg.c @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2007 Jeff Latimer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "objbase.h" +#include "netfw.h" + +#include "wine/debug.h" +#include "hnetcfg_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg); + +typedef HRESULT (*fnCreateInstance)( IUnknown *pUnkOuter, LPVOID *ppObj ); + +typedef struct +{ + const struct IClassFactoryVtbl *vtbl; + fnCreateInstance pfnCreateInstance; +} hnetcfg_cf; + +static inline hnetcfg_cf *impl_from_IClassFactory( IClassFactory *iface ) +{ + return (hnetcfg_cf *)((char *)iface - FIELD_OFFSET( hnetcfg_cf, vtbl )); +} + +static HRESULT WINAPI hnetcfg_cf_QueryInterface( IClassFactory *iface, REFIID riid, LPVOID *ppobj ) +{ + if (IsEqualGUID(riid, &IID_IUnknown) || + IsEqualGUID(riid, &IID_IClassFactory)) + { + IClassFactory_AddRef( iface ); + *ppobj = iface; + return S_OK; + } + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI hnetcfg_cf_AddRef( IClassFactory *iface ) +{ + return 2; +} + +static ULONG WINAPI hnetcfg_cf_Release( IClassFactory *iface ) +{ + return 1; +} + +static HRESULT WINAPI hnetcfg_cf_CreateInstance( IClassFactory *iface, LPUNKNOWN pOuter, + REFIID riid, LPVOID *ppobj ) +{ + hnetcfg_cf *This = impl_from_IClassFactory( iface ); + HRESULT r; + IUnknown *punk; + + TRACE("%p %s %p\n", pOuter, debugstr_guid(riid), ppobj); + + *ppobj = NULL; + + if (pOuter) + return CLASS_E_NOAGGREGATION; + + r = This->pfnCreateInstance( pOuter, (LPVOID *)&punk ); + if (FAILED(r)) + return r; + + r = IUnknown_QueryInterface( punk, riid, ppobj ); + if (FAILED(r)) + return r; + + IUnknown_Release( punk ); + return r; +} + +static HRESULT WINAPI hnetcfg_cf_LockServer( IClassFactory *iface, BOOL dolock ) +{ + FIXME("(%p)->(%d)\n", iface, dolock); + return S_OK; +} + +static const struct IClassFactoryVtbl hnetcfg_cf_vtbl = +{ + hnetcfg_cf_QueryInterface, + hnetcfg_cf_AddRef, + hnetcfg_cf_Release, + hnetcfg_cf_CreateInstance, + hnetcfg_cf_LockServer +}; + +static hnetcfg_cf fw_manager_cf = { &hnetcfg_cf_vtbl, NetFwMgr_create }; +static hnetcfg_cf fw_app_cf = { &hnetcfg_cf_vtbl, NetFwAuthorizedApplication_create }; + +BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + TRACE("(0x%p, %d, %p)\n",hInstDLL,fdwReason,lpvReserved); + + switch(fdwReason) { + case DLL_WINE_PREATTACH: + return FALSE; + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hInstDLL); + break; + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID iid, LPVOID *ppv ) +{ + IClassFactory *cf = NULL; + + TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv); + + if (IsEqualGUID( rclsid, &CLSID_NetFwMgr )) + { + cf = (IClassFactory *)&fw_manager_cf.vtbl; + } + else if (IsEqualGUID( rclsid, &CLSID_NetFwAuthorizedApplication )) + { + cf = (IClassFactory *)&fw_app_cf.vtbl; + } + + if (!cf) return CLASS_E_CLASSNOTAVAILABLE; + return IClassFactory_QueryInterface( cf, iid, ppv ); +} + +HRESULT WINAPI DllCanUnloadNow( void ) +{ + FIXME("\n"); + return S_FALSE; +} diff --git a/reactos/dll/win32/hnetcfg/hnetcfg.rbuild b/reactos/dll/win32/hnetcfg/hnetcfg.rbuild new file mode 100644 index 00000000000..37cd7ac6b2e --- /dev/null +++ b/reactos/dll/win32/hnetcfg/hnetcfg.rbuild @@ -0,0 +1,18 @@ + + + + . + include/reactos/wine + 0x600 + + wine + ole32 + advapi32 + kernel32 + apps.c + hnetcfg.c + manager.c + policy.c + profile.c + regsvr.c + diff --git a/reactos/dll/win32/hnetcfg/hnetcfg.spec b/reactos/dll/win32/hnetcfg/hnetcfg.spec new file mode 100644 index 00000000000..be44a5930c1 --- /dev/null +++ b/reactos/dll/win32/hnetcfg/hnetcfg.spec @@ -0,0 +1,4 @@ +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject( ptr ptr ptr ) +@ stdcall -private DllRegisterServer() +@ stdcall -private DllUnregisterServer() diff --git a/reactos/dll/win32/hnetcfg/hnetcfg_private.h b/reactos/dll/win32/hnetcfg/hnetcfg_private.h new file mode 100644 index 00000000000..933782950bb --- /dev/null +++ b/reactos/dll/win32/hnetcfg/hnetcfg_private.h @@ -0,0 +1,23 @@ +/* + * Copyright 2009 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +HRESULT NetFwMgr_create(IUnknown *, LPVOID *); +HRESULT NetFwPolicy_create(IUnknown *, LPVOID *); +HRESULT NetFwProfile_create(IUnknown *, LPVOID *); +HRESULT NetFwAuthorizedApplication_create(IUnknown *, LPVOID *); +HRESULT NetFwAuthorizedApplications_create(IUnknown *, LPVOID *); diff --git a/reactos/dll/win32/hnetcfg/manager.c b/reactos/dll/win32/hnetcfg/manager.c new file mode 100644 index 00000000000..7d6a7a5f492 --- /dev/null +++ b/reactos/dll/win32/hnetcfg/manager.c @@ -0,0 +1,240 @@ +/* + * Copyright 2009 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "initguid.h" +#include "ole2.h" +#include "netfw.h" + +#include "wine/debug.h" +#include "wine/unicode.h" +#include "hnetcfg_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg); + +typedef struct fw_manager +{ + const INetFwMgrVtbl *vtbl; + LONG refs; +} fw_manager; + +static inline fw_manager *impl_from_INetFwMgr( INetFwMgr *iface ) +{ + return (fw_manager *)((char *)iface - FIELD_OFFSET( fw_manager, vtbl )); +} + +static ULONG WINAPI fw_manager_AddRef( + INetFwMgr *iface ) +{ + fw_manager *fw_manager = impl_from_INetFwMgr( iface ); + return InterlockedIncrement( &fw_manager->refs ); +} + +static ULONG WINAPI fw_manager_Release( + INetFwMgr *iface ) +{ + fw_manager *fw_manager = impl_from_INetFwMgr( iface ); + LONG refs = InterlockedDecrement( &fw_manager->refs ); + if (!refs) + { + TRACE("destroying %p\n", fw_manager); + HeapFree( GetProcessHeap(), 0, fw_manager ); + } + return refs; +} + +static HRESULT WINAPI fw_manager_QueryInterface( + INetFwMgr *iface, + REFIID riid, + void **ppvObject ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + if ( IsEqualGUID( riid, &IID_INetFwMgr ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwMgr_AddRef( iface ); + return S_OK; +} + +static HRESULT WINAPI fw_manager_GetTypeInfoCount( + INetFwMgr *iface, + UINT *pctinfo ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p %p\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_GetTypeInfo( + INetFwMgr *iface, + UINT iTInfo, + LCID lcid, + ITypeInfo **ppTInfo ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_GetIDsOfNames( + INetFwMgr *iface, + REFIID riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_Invoke( + INetFwMgr *iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_get_LocalPolicy( + INetFwMgr *iface, + INetFwPolicy **localPolicy ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + TRACE("%p, %p\n", This, localPolicy); + return NetFwPolicy_create( NULL, (void **)localPolicy ); +} + +static HRESULT WINAPI fw_manager_get_CurrentProfileType( + INetFwMgr *iface, + NET_FW_PROFILE_TYPE *profileType ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p, %p\n", This, profileType); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_RestoreDefaults( + INetFwMgr *iface ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_IsPortAllowed( + INetFwMgr *iface, + BSTR imageFileName, + NET_FW_IP_VERSION ipVersion, + LONG portNumber, + BSTR localAddress, + NET_FW_IP_PROTOCOL ipProtocol, + VARIANT *allowed, + VARIANT *restricted ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p, %s, %u, %d, %s, %u, %p, %p\n", This, debugstr_w(imageFileName), + ipVersion, portNumber, debugstr_w(localAddress), ipProtocol, allowed, restricted); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_manager_IsIcmpTypeAllowed( + INetFwMgr *iface, + NET_FW_IP_VERSION ipVersion, + BSTR localAddress, + BYTE type, + VARIANT *allowed, + VARIANT *restricted ) +{ + fw_manager *This = impl_from_INetFwMgr( iface ); + + FIXME("%p, %u, %s, %u, %p, %p\n", This, ipVersion, debugstr_w(localAddress), + type, allowed, restricted); + return E_NOTIMPL; +} + +static const struct INetFwMgrVtbl fw_manager_vtbl = +{ + fw_manager_QueryInterface, + fw_manager_AddRef, + fw_manager_Release, + fw_manager_GetTypeInfoCount, + fw_manager_GetTypeInfo, + fw_manager_GetIDsOfNames, + fw_manager_Invoke, + fw_manager_get_LocalPolicy, + fw_manager_get_CurrentProfileType, + fw_manager_RestoreDefaults, + fw_manager_IsPortAllowed, + fw_manager_IsIcmpTypeAllowed +}; + +HRESULT NetFwMgr_create( IUnknown *pUnkOuter, LPVOID *ppObj ) +{ + fw_manager *fm; + + TRACE("(%p,%p)\n", pUnkOuter, ppObj); + + fm = HeapAlloc( GetProcessHeap(), 0, sizeof(*fm) ); + if (!fm) return E_OUTOFMEMORY; + + fm->vtbl = &fw_manager_vtbl; + fm->refs = 1; + + *ppObj = &fm->vtbl; + + TRACE("returning iface %p\n", *ppObj); + return S_OK; +} diff --git a/reactos/dll/win32/hnetcfg/policy.c b/reactos/dll/win32/hnetcfg/policy.c new file mode 100644 index 00000000000..cff89730b36 --- /dev/null +++ b/reactos/dll/win32/hnetcfg/policy.c @@ -0,0 +1,196 @@ +/* + * Copyright 2009 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" +#include "netfw.h" + +#include "wine/debug.h" +#include "wine/unicode.h" +#include "hnetcfg_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg); + +typedef struct fw_policy +{ + const INetFwPolicyVtbl *vtbl; + LONG refs; +} fw_policy; + +static inline fw_policy *impl_from_INetFwPolicy( INetFwPolicy *iface ) +{ + return (fw_policy *)((char *)iface - FIELD_OFFSET( fw_policy, vtbl )); +} + +static ULONG WINAPI fw_policy_AddRef( + INetFwPolicy *iface ) +{ + fw_policy *fw_policy = impl_from_INetFwPolicy( iface ); + return InterlockedIncrement( &fw_policy->refs ); +} + +static ULONG WINAPI fw_policy_Release( + INetFwPolicy *iface ) +{ + fw_policy *fw_policy = impl_from_INetFwPolicy( 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 fw_policy_QueryInterface( + INetFwPolicy *iface, + REFIID riid, + void **ppvObject ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + if ( IsEqualGUID( riid, &IID_INetFwPolicy ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwPolicy_AddRef( iface ); + return S_OK; +} + +static HRESULT WINAPI fw_policy_GetTypeInfoCount( + INetFwPolicy *iface, + UINT *pctinfo ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + FIXME("%p %p\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_policy_GetTypeInfo( + INetFwPolicy *iface, + UINT iTInfo, + LCID lcid, + ITypeInfo **ppTInfo ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + FIXME("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_policy_GetIDsOfNames( + INetFwPolicy *iface, + REFIID riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + FIXME("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_policy_Invoke( + INetFwPolicy *iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + FIXME("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_policy_get_CurrentProfile( + INetFwPolicy *iface, + INetFwProfile **profile ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + TRACE("%p, %p\n", This, profile); + return NetFwProfile_create( NULL, (void **)profile ); +} + +static HRESULT WINAPI fw_policy_GetProfileByType( + INetFwPolicy *iface, + NET_FW_PROFILE_TYPE profileType, + INetFwProfile **profile ) +{ + fw_policy *This = impl_from_INetFwPolicy( iface ); + + FIXME("%p, %u, %p\n", This, profileType, profile); + return E_NOTIMPL; +} + +static const struct INetFwPolicyVtbl fw_policy_vtbl = +{ + fw_policy_QueryInterface, + fw_policy_AddRef, + fw_policy_Release, + fw_policy_GetTypeInfoCount, + fw_policy_GetTypeInfo, + fw_policy_GetIDsOfNames, + fw_policy_Invoke, + fw_policy_get_CurrentProfile, + fw_policy_GetProfileByType +}; + +HRESULT NetFwPolicy_create( IUnknown *pUnkOuter, LPVOID *ppObj ) +{ + fw_policy *fp; + + TRACE("(%p,%p)\n", pUnkOuter, ppObj); + + fp = HeapAlloc( GetProcessHeap(), 0, sizeof(*fp) ); + if (!fp) return E_OUTOFMEMORY; + + fp->vtbl = &fw_policy_vtbl; + fp->refs = 1; + + *ppObj = &fp->vtbl; + + TRACE("returning iface %p\n", *ppObj); + return S_OK; +} diff --git a/reactos/dll/win32/hnetcfg/profile.c b/reactos/dll/win32/hnetcfg/profile.c new file mode 100644 index 00000000000..91c73afbf21 --- /dev/null +++ b/reactos/dll/win32/hnetcfg/profile.c @@ -0,0 +1,329 @@ +/* + * Copyright 2009 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" +#include "netfw.h" + +#include "wine/debug.h" +#include "wine/unicode.h" +#include "hnetcfg_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg); + +typedef struct fw_profile +{ + const INetFwProfileVtbl *vtbl; + LONG refs; +} fw_profile; + +static inline fw_profile *impl_from_INetFwProfile( INetFwProfile *iface ) +{ + return (fw_profile *)((char *)iface - FIELD_OFFSET( fw_profile, vtbl )); +} + +static ULONG WINAPI fw_profile_AddRef( + INetFwProfile *iface ) +{ + fw_profile *fw_profile = impl_from_INetFwProfile( iface ); + return InterlockedIncrement( &fw_profile->refs ); +} + +static ULONG WINAPI fw_profile_Release( + INetFwProfile *iface ) +{ + fw_profile *fw_profile = impl_from_INetFwProfile( iface ); + LONG refs = InterlockedDecrement( &fw_profile->refs ); + if (!refs) + { + TRACE("destroying %p\n", fw_profile); + HeapFree( GetProcessHeap(), 0, fw_profile ); + } + return refs; +} + +static HRESULT WINAPI fw_profile_QueryInterface( + INetFwProfile *iface, + REFIID riid, + void **ppvObject ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + if ( IsEqualGUID( riid, &IID_INetFwProfile ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwProfile_AddRef( iface ); + return S_OK; +} + +static HRESULT WINAPI fw_profile_GetTypeInfoCount( + INetFwProfile *iface, + UINT *pctinfo ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p %p\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_GetTypeInfo( + INetFwProfile *iface, + UINT iTInfo, + LCID lcid, + ITypeInfo **ppTInfo ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_GetIDsOfNames( + INetFwProfile *iface, + REFIID riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_Invoke( + INetFwProfile *iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_Type( + INetFwProfile *iface, + NET_FW_PROFILE_TYPE *type ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, type); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_FirewallEnabled( + INetFwProfile *iface, + VARIANT_BOOL *enabled ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, enabled); + + *enabled = VARIANT_FALSE; + return S_OK; +} + +static HRESULT WINAPI fw_profile_put_FirewallEnabled( + INetFwProfile *iface, + VARIANT_BOOL enabled ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %d\n", This, enabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_ExceptionsNotAllowed( + INetFwProfile *iface, + VARIANT_BOOL *notAllowed ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, notAllowed); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_put_ExceptionsNotAllowed( + INetFwProfile *iface, + VARIANT_BOOL notAllowed ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %d\n", This, notAllowed); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_NotificationsDisabled( + INetFwProfile *iface, + VARIANT_BOOL *disabled ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_put_NotificationsDisabled( + INetFwProfile *iface, + VARIANT_BOOL disabled ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %d\n", This, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_UnicastResponsesToMulticastBroadcastDisabled( + INetFwProfile *iface, + VARIANT_BOOL *disabled ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_put_UnicastResponsesToMulticastBroadcastDisabled( + INetFwProfile *iface, + VARIANT_BOOL disabled ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %d\n", This, disabled); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_RemoteAdminSettings( + INetFwProfile *iface, + INetFwRemoteAdminSettings **remoteAdminSettings ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, remoteAdminSettings); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_IcmpSettings( + INetFwProfile *iface, + INetFwIcmpSettings **icmpSettings ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, icmpSettings); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_GloballyOpenPorts( + INetFwProfile *iface, + INetFwOpenPorts **openPorts ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, openPorts); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_Services( + INetFwProfile *iface, + INetFwServices **Services ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + FIXME("%p, %p\n", This, Services); + return E_NOTIMPL; +} + +static HRESULT WINAPI fw_profile_get_AuthorizedApplications( + INetFwProfile *iface, + INetFwAuthorizedApplications **apps ) +{ + fw_profile *This = impl_from_INetFwProfile( iface ); + + TRACE("%p, %p\n", This, apps); + return NetFwAuthorizedApplications_create( NULL, (void **)apps ); +} + +static const struct INetFwProfileVtbl fw_profile_vtbl = +{ + fw_profile_QueryInterface, + fw_profile_AddRef, + fw_profile_Release, + fw_profile_GetTypeInfoCount, + fw_profile_GetTypeInfo, + fw_profile_GetIDsOfNames, + fw_profile_Invoke, + fw_profile_get_Type, + fw_profile_get_FirewallEnabled, + fw_profile_put_FirewallEnabled, + fw_profile_get_ExceptionsNotAllowed, + fw_profile_put_ExceptionsNotAllowed, + fw_profile_get_NotificationsDisabled, + fw_profile_put_NotificationsDisabled, + fw_profile_get_UnicastResponsesToMulticastBroadcastDisabled, + fw_profile_put_UnicastResponsesToMulticastBroadcastDisabled, + fw_profile_get_RemoteAdminSettings, + fw_profile_get_IcmpSettings, + fw_profile_get_GloballyOpenPorts, + fw_profile_get_Services, + fw_profile_get_AuthorizedApplications +}; + +HRESULT NetFwProfile_create( IUnknown *pUnkOuter, LPVOID *ppObj ) +{ + fw_profile *fp; + + TRACE("(%p,%p)\n", pUnkOuter, ppObj); + + fp = HeapAlloc( GetProcessHeap(), 0, sizeof(*fp) ); + if (!fp) return E_OUTOFMEMORY; + + fp->vtbl = &fw_profile_vtbl; + fp->refs = 1; + + *ppObj = &fp->vtbl; + + TRACE("returning iface %p\n", *ppObj); + return S_OK; +} diff --git a/reactos/dll/win32/hnetcfg/regsvr.c b/reactos/dll/win32/hnetcfg/regsvr.c new file mode 100644 index 00000000000..e739cc0b76d --- /dev/null +++ b/reactos/dll/win32/hnetcfg/regsvr.c @@ -0,0 +1,430 @@ +/* + * self-registerable dll functions for hnetcfg.dll + * + * Copyright (C) 2003 John K. Hohm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winreg.h" +#include "winerror.h" +#include "objbase.h" +#include "netfw.h" + +#include "wine/debug.h" +#include "wine/unicode.h" + +WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg); + +/* + * Near the bottom of this file are the exported DllRegisterServer and + * DllUnregisterServer, which make all this worthwhile. + */ + +/*********************************************************************** + * interface for self-registering + */ +struct regsvr_interface +{ + IID const *iid; /* NULL for end of list */ + LPCSTR name; /* can be NULL to omit */ + IID const *base_iid; /* can be NULL to omit */ + int num_methods; /* can be <0 to omit */ + CLSID const *ps_clsid; /* can be NULL to omit */ + CLSID const *ps_clsid32; /* can be NULL to omit */ +}; + +static HRESULT register_interfaces(struct regsvr_interface const *list); +static HRESULT unregister_interfaces(struct regsvr_interface const *list); + +struct regsvr_coclass +{ + CLSID const *clsid; /* NULL for end of list */ + LPCSTR name; /* can be NULL to omit */ + LPCSTR ips; /* can be NULL to omit */ + LPCSTR ips32; /* can be NULL to omit */ + LPCSTR ips32_tmodel; /* can be NULL to omit */ + LPCSTR clsid_str; /* can be NULL to omit */ + LPCSTR progid; /* can be NULL to omit */ +}; + +static HRESULT register_coclasses(struct regsvr_coclass const *list); +static HRESULT unregister_coclasses(struct regsvr_coclass const *list); + +/*********************************************************************** + * static string constants + */ +static WCHAR const interface_keyname[10] = { + 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 }; +static WCHAR const base_ifa_keyname[14] = { + 'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', + 'e', 0 }; +static WCHAR const num_methods_keyname[11] = { + 'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 }; +static WCHAR const ps_clsid_keyname[15] = { + 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', + 'i', 'd', 0 }; +static WCHAR const ps_clsid32_keyname[17] = { + 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', + 'i', 'd', '3', '2', 0 }; +static WCHAR const clsid_keyname[6] = { + 'C', 'L', 'S', 'I', 'D', 0 }; +static WCHAR const ips_keyname[13] = { + 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', + 0 }; +static WCHAR const ips32_keyname[15] = { + 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', + '3', '2', 0 }; +static WCHAR const progid_keyname[7] = { + 'P', 'r', 'o', 'g', 'I', 'D', 0 }; +static char const tmodel_valuename[] = "ThreadingModel"; + +/*********************************************************************** + * static helper functions + */ +static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid); +static LONG register_key_defvalueW(HKEY base, WCHAR const *name, + WCHAR const *value); +static LONG register_key_defvalueA(HKEY base, WCHAR const *name, + char const *value); + +/*********************************************************************** + * register_interfaces + */ +static HRESULT register_interfaces(struct regsvr_interface const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY interface_key; + + res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &interface_key, NULL); + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->iid; ++list) { + WCHAR buf[39]; + HKEY iid_key; + + StringFromGUID2(list->iid, buf, 39); + res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &iid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_interface_key; + + if (list->name) { + res = RegSetValueExA(iid_key, NULL, 0, REG_SZ, + (CONST BYTE*)(list->name), + strlen(list->name) + 1); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->base_iid) { + res = register_key_guid(iid_key, base_ifa_keyname, list->base_iid); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (0 <= list->num_methods) { + static WCHAR const fmt[3] = { '%', 'd', 0 }; + HKEY key; + + res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + + sprintfW(buf, fmt, list->num_methods); + res = RegSetValueExW(key, NULL, 0, REG_SZ, + (CONST BYTE*)buf, + (lstrlenW(buf) + 1) * sizeof(WCHAR)); + RegCloseKey(key); + + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->ps_clsid) { + res = register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->ps_clsid32) { + res = register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + error_close_iid_key: + RegCloseKey(iid_key); + } + +error_close_interface_key: + RegCloseKey(interface_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * unregister_interfaces + */ +static HRESULT unregister_interfaces(struct regsvr_interface const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY interface_key; + + res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, + KEY_READ | KEY_WRITE, &interface_key); + if (res == ERROR_FILE_NOT_FOUND) return S_OK; + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->iid; ++list) { + WCHAR buf[39]; + + StringFromGUID2(list->iid, buf, 39); + res = RegDeleteTreeW(interface_key, buf); + if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; + } + + RegCloseKey(interface_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * register_coclasses + */ +static HRESULT register_coclasses(struct regsvr_coclass const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY coclass_key; + + res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL); + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->clsid; ++list) { + WCHAR buf[39]; + HKEY clsid_key; + + StringFromGUID2(list->clsid, buf, 39); + res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + + if (list->name) { + res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ, + (CONST BYTE*)(list->name), + strlen(list->name) + 1); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->ips) { + res = register_key_defvalueA(clsid_key, ips_keyname, list->ips); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->ips32) { + HKEY ips32_key; + + res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &ips32_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ, + (CONST BYTE*)list->ips32, + lstrlenA(list->ips32) + 1); + if (res == ERROR_SUCCESS && list->ips32_tmodel) + res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ, + (CONST BYTE*)list->ips32_tmodel, + strlen(list->ips32_tmodel) + 1); + RegCloseKey(ips32_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->clsid_str) { + res = register_key_defvalueA(clsid_key, clsid_keyname, + list->clsid_str); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->progid) { + HKEY progid_key; + + res = register_key_defvalueA(clsid_key, progid_keyname, + list->progid); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = RegCreateKeyExA(HKEY_CLASSES_ROOT, list->progid, 0, + NULL, 0, KEY_READ | KEY_WRITE, NULL, + &progid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = register_key_defvalueW(progid_key, clsid_keyname, buf); + RegCloseKey(progid_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + error_close_clsid_key: + RegCloseKey(clsid_key); + } + +error_close_coclass_key: + RegCloseKey(coclass_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * unregister_coclasses + */ +static HRESULT unregister_coclasses(struct regsvr_coclass const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY coclass_key; + + res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, + KEY_READ | KEY_WRITE, &coclass_key); + if (res == ERROR_FILE_NOT_FOUND) return S_OK; + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->clsid; ++list) { + WCHAR buf[39]; + + StringFromGUID2(list->clsid, buf, 39); + res = RegDeleteTreeW(coclass_key, buf); + if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + + if (list->progid) { + res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid); + if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + } + } + +error_close_coclass_key: + RegCloseKey(coclass_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * regsvr_key_guid + */ +static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) +{ + WCHAR buf[39]; + + StringFromGUID2(guid, buf, 39); + return register_key_defvalueW(base, name, buf); +} + +/*********************************************************************** + * regsvr_key_defvalueW + */ +static LONG register_key_defvalueW( + HKEY base, + WCHAR const *name, + WCHAR const *value) +{ + LONG res; + HKEY key; + + res = RegCreateKeyExW(base, name, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) return res; + res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value, + (lstrlenW(value) + 1) * sizeof(WCHAR)); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * regsvr_key_defvalueA + */ +static LONG register_key_defvalueA( + HKEY base, + WCHAR const *name, + char const *value) +{ + LONG res; + HKEY key; + + res = RegCreateKeyExW(base, name, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) return res; + res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value, + lstrlenA(value) + 1); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * coclass list + */ +static struct regsvr_coclass const coclass_list[] = { + { &CLSID_NetFwMgr, + "NetFwMgr", + NULL, + "hnetcfg.dll", + "Both" + }, + { &CLSID_NetFwAuthorizedApplication, + "NetFwAuthorizedApplication", + NULL, + "hnetcfg.dll", + "Both" + }, + { NULL } /* list terminator */ +}; + +/*********************************************************************** + * interface list + */ +static struct regsvr_interface const interface_list[] = { + { NULL } /* list terminator */ +}; + +/*********************************************************************** + * DllRegisterServer (INETCOMM.@) + */ +HRESULT WINAPI DllRegisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + hr = register_coclasses(coclass_list); + if (SUCCEEDED(hr)) + hr = register_interfaces(interface_list); + return hr; +} + +/*********************************************************************** + * DllUnregisterServer (INETCOMM.@) + */ +HRESULT WINAPI DllUnregisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + hr = unregister_coclasses(coclass_list); + if (SUCCEEDED(hr)) + hr = unregister_interfaces(interface_list); + return hr; +} diff --git a/reactos/dll/win32/win32.rbuild b/reactos/dll/win32/win32.rbuild index 7f304fbf68c..44e313c0b62 100644 --- a/reactos/dll/win32/win32.rbuild +++ b/reactos/dll/win32/win32.rbuild @@ -31,6 +31,9 @@ + + + @@ -127,6 +130,9 @@ + + + @@ -643,4 +649,7 @@ + + + diff --git a/reactos/dll/win32/xmllite/xmllite.rbuild b/reactos/dll/win32/xmllite/xmllite.rbuild new file mode 100644 index 00000000000..504dccb6f1e --- /dev/null +++ b/reactos/dll/win32/xmllite/xmllite.rbuild @@ -0,0 +1,9 @@ + + + . + include/reactos/wine + + wine + kernel32 + xmllite_main.c + diff --git a/reactos/dll/win32/xmllite/xmllite.spec b/reactos/dll/win32/xmllite/xmllite.spec new file mode 100644 index 00000000000..cf436372b36 --- /dev/null +++ b/reactos/dll/win32/xmllite/xmllite.spec @@ -0,0 +1,6 @@ +@ stub CreateXmlReader +@ stub CreateXmlReaderInputWithEncodingCodePage +@ stub CreateXmlReaderInputWithEncodingName +@ stub CreateXmlWriter +@ stub CreateXmlWriterOutputWithEncodingCodePage +@ stub CreateXmlWriterOutputWithEncodingName diff --git a/reactos/dll/win32/xmllite/xmllite_main.c b/reactos/dll/win32/xmllite/xmllite_main.c new file mode 100644 index 00000000000..d72903ab3b6 --- /dev/null +++ b/reactos/dll/win32/xmllite/xmllite_main.c @@ -0,0 +1,47 @@ +/* + * XML parsing library + * + * Copyright 2009 Christian Costa + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" + +#include + +#include "windef.h" +#include "winbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(xmllite); + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); + + switch (fdwReason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hinstDLL); + break; + case DLL_PROCESS_DETACH: + break; + } + + return TRUE; +} diff --git a/reactos/include/psdk/icftypes.idl b/reactos/include/psdk/icftypes.idl new file mode 100644 index 00000000000..9cc0b6ad13b --- /dev/null +++ b/reactos/include/psdk/icftypes.idl @@ -0,0 +1,69 @@ +/* + * Types for the ICF api + * + * Copyright 2007 Jeff Latimer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +import "wtypes.idl"; + +typedef enum NET_FW_PROFILE_TYPE_ +{ + NET_FW_PROFILE_DOMAIN, + NET_FW_PROFILE_STANDARD, + NET_FW_PROFILE_CURRENT, + NET_FW_PROFILE_TYPE_MAX +} NET_FW_PROFILE_TYPE; + +typedef enum NET_FW_IP_VERSION_ +{ + NET_FW_IP_VERSION_V4, + NET_FW_IP_VERSION_V6, + NET_FW_IP_VERSION_ANY, + NET_FW_IP_VERSION_MAX +} NET_FW_IP_VERSION; + +typedef enum NET_FW_POLICY_TYPE_ +{ + NET_FW_POLICY_GROUP, + NET_FW_POLICY_LOCAL, + NET_FW_POLICY_EFFECTIVE, + NET_FW_POLICY_TYPE_MAX +} NET_FW_POLICY_TYPE; + +typedef enum NET_FW_SCOPE_ +{ + NET_FW_SCOPE_ALL, + NET_FW_SCOPE_LOCAL_SUBNET, + NET_FW_SCOPE_CUSTOM, + NET_FW_SCOPE_MAX +} NET_FW_SCOPE; + +typedef enum NET_FW_SERVICE_TYPE_ +{ + NET_FW_SERVICE_FILE_AND_PRINT, + NET_FW_SERVICE_UPNP, + NET_FW_SERVICE_REMOTE_DESKTOP, + NET_FW_SERVICE_NONE, + NET_FW_SERVICE_TYPE_MAX +} NET_FW_SERVICE_TYPE; + +typedef enum NET_FW_IP_PROTOCOL_ +{ + NET_FW_IP_PROTOCOL_TCP = 6, + NET_FW_IP_PROTOCOL_UDP = 17 +} NET_FW_IP_PROTOCOL; diff --git a/reactos/include/psdk/netfw.idl b/reactos/include/psdk/netfw.idl new file mode 100644 index 00000000000..9158f8d7f41 --- /dev/null +++ b/reactos/include/psdk/netfw.idl @@ -0,0 +1,470 @@ +/* + * Copyright 2007 Jeff Latimer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + ***************************************************************************** + * + * The firewall management interface + * + */ + +import "icftypes.idl"; +import "oaidl.idl"; + +[ + object, + uuid(A6207B2E-7CDD-426A-951E-5E1CBC5AFEAD), + dual +] +interface INetFwIcmpSettings : IDispatch +{ + [id(1), propget] + HRESULT AllowOutboundDestinationUnreachable([out, retval] VARIANT_BOOL* allow); + + [id(1), propput] + HRESULT AllowOutboundDestinationUnreachable( [in] VARIANT_BOOL allow ); + + [id(2), propget] + HRESULT AllowRedirect( [out, retval] VARIANT_BOOL* allow ); + + [id(2), propput] + HRESULT AllowRedirect( [in] VARIANT_BOOL allow ); + + [id(3), propget] + HRESULT AllowInboundEchoRequest( [out, retval] VARIANT_BOOL* allow ); + + [id(3), propput] + HRESULT AllowInboundEchoRequest( [in] VARIANT_BOOL allow ); + + [id(4), propget] + HRESULT AllowOutboundTimeExceeded( [out, retval] VARIANT_BOOL* allow ); + + [id(4), propput] + HRESULT AllowOutboundTimeExceeded( [in] VARIANT_BOOL allow ); + + [id(5), propget] + HRESULT AllowOutboundParameterProblem( [out, retval] VARIANT_BOOL* allow ); + + [id(5), propput] + HRESULT AllowOutboundParameterProblem( [in] VARIANT_BOOL allow ); + + [id(6), propget] + HRESULT AllowOutboundSourceQuench( [out, retval] VARIANT_BOOL* allow ); + + [id(6), propput] + HRESULT AllowOutboundSourceQuench( [in] VARIANT_BOOL allow ); + + [id(7), propget] + HRESULT AllowInboundRouterRequest( [out, retval] VARIANT_BOOL* allow ); + + [id(7), propput] + HRESULT AllowInboundRouterRequest( [in] VARIANT_BOOL allow ); + + [id(8), propget] + HRESULT AllowInboundTimestampRequest( [out, retval] VARIANT_BOOL* allow ); + + [id(8), propput] + HRESULT AllowInboundTimestampRequest( [in] VARIANT_BOOL allow ); + + [id(9), propget] + HRESULT AllowInboundMaskRequest( [out, retval] VARIANT_BOOL* allow ); + + [id(9), propput] + HRESULT AllowInboundMaskRequest( [in] VARIANT_BOOL allow ); + + [id(10), propget] + HRESULT AllowOutboundPacketTooBig( [out, retval] VARIANT_BOOL* allow ); + + [id(10), propput] + HRESULT AllowOutboundPacketTooBig( [in] VARIANT_BOOL allow ); +} + +[ + object, + uuid(E0483BA0-47FF-4D9C-A6D6-7741D0B195F7), + dual +] +interface INetFwOpenPort : IDispatch +{ + [id(1), propget] + HRESULT Name( [out, retval] BSTR* name ); + + [id(1), propput] + HRESULT Name( [in] BSTR name ); + + [id(2), propget] + HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); + + [id(2), propput] + HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); + + [id(3), propget] + HRESULT Protocol( [out, retval] NET_FW_IP_PROTOCOL* ipProtocol ); + + [id(3), propput] + HRESULT Protocol( [in] NET_FW_IP_PROTOCOL ipProtocol ); + + [id(4), propget] + HRESULT Port( [out, retval] LONG* portNumber ); + + [id(4), propput] + HRESULT Port( [in] LONG portNumber ); + + [id(5), propget] + HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); + + [id(5), propput] + HRESULT Scope( [in] NET_FW_SCOPE scope ); + + [id(6), propget] + HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); + + [id(6), propput] + HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); + + [id(7), propget] + HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); + + [id(7), propput] + HRESULT Enabled( [in] VARIANT_BOOL enabled ); + + [id(8), propget] + HRESULT BuiltIn( [out, retval] VARIANT_BOOL* builtIn ); +} + +[ + object, + uuid(C0E9D7FA-E07E-430A-B19A-090CE82D92E2), + dual +] +interface INetFwOpenPorts : IDispatch +{ + [id(1), propget] + HRESULT Count( [out, retval] long* count ); + + [id(2)] + HRESULT Add( [in] INetFwOpenPort* port ); + + [id(3)] + HRESULT Remove( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol ); + + [id(4)] + HRESULT Item( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol, + [out, retval] INetFwOpenPort** openPort ); + + [id(DISPID_NEWENUM), propget, restricted] + HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); +} + +[ + object, + uuid(79FD57C8-908E-4A36-9888-D5B3F0A444CF), + dual +] +interface INetFwService : IDispatch +{ + [id(1), propget] + HRESULT Name( [out, retval] BSTR* name ); + + [id(2), propget] + HRESULT Type( [out, retval] NET_FW_SERVICE_TYPE* type ); + + [id(3), propget] + HRESULT Customized( [out, retval] VARIANT_BOOL* customized ); + + [id(4), propget] + HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); + + [id(4), propput] + HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); + + [id(5), propget] + HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); + + [id(5), propput] + HRESULT Scope( [in] NET_FW_SCOPE scope ); + + [id(6), propget] + HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); + + [id(6), propput] + HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); + + [id(7), propget] + HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); + + [id(7), propput] + HRESULT Enabled( [in] VARIANT_BOOL enabled ); + + [id(8), propget] + HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts ); +} + +[ + object, + uuid(79649BB4-903E-421B-94C9-79848E79F6EE), + dual +] +interface INetFwServices : IDispatch +{ + [id(1), propget] + HRESULT Count( [out, retval] long* count ); + + [id(2)] + HRESULT Item( [in] NET_FW_SERVICE_TYPE svcType, + [out, retval] INetFwService** service ); + + [id(DISPID_NEWENUM), propget, restricted] + HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); +} + +[ + object, + uuid(B5E64FFA-C2C5-444E-A301-FB5E00018050), + dual +] +interface INetFwAuthorizedApplication : IDispatch +{ + [id(1), propget] + HRESULT Name( [out, retval] BSTR* name ); + + [id(1), propput] + HRESULT Name( [in] BSTR name ); + + [id(2), propget] + HRESULT ProcessImageFileName( [out, retval] BSTR* imageFileName ); + + [id(2), propput] + HRESULT ProcessImageFileName( [in] BSTR imageFileName ); + + [id(3), propget] + HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); + + [id(3), propput] + HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); + + [id(4), propget] + HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); + + [id(4), propput] + HRESULT Scope( [in] NET_FW_SCOPE scope ); + + [id(5), propget] + HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); + + [id(5), propput] + HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); + + [id(6), propget] + HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); + + [id(6), propput] + HRESULT Enabled( [in] VARIANT_BOOL enabled ); +} + +[ + object, + uuid(D4BECDDF-6F73-4A83-B832-9C66874CD20E), + dual +] +interface INetFwRemoteAdminSettings : IDispatch +{ + [id(1), propget] + HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); + + [id(1), propput] + HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); + + [id(2), propget] + HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); + + [id(2), propput] + HRESULT Scope( [in] NET_FW_SCOPE scope ); + + [id(3), propget] + HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); + + [id(3), propput] + HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); + + [id(4), propget] + HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); + + [id(4), propput] + HRESULT Enabled( [in] VARIANT_BOOL enabled ); +} + + +[ + object, + uuid(644EFD52-CCF9-486C-97A2-39F352570B30), + dual +] +interface INetFwAuthorizedApplications : IDispatch +{ + [id(1), propget] + HRESULT Count( [out, retval] long* count ); + + [id(2)] + HRESULT Add( [in] INetFwAuthorizedApplication* app ); + + [id(3)] + HRESULT Remove( [in] BSTR imageFileName ); + + [id(4)] + HRESULT Item( [in] BSTR imageFileName, + [out, retval] INetFwAuthorizedApplication** app ); + + [id(DISPID_NEWENUM), propget, restricted] + HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); +} + +[ + object, + uuid(174A0DDA-E9F9-449D-993B-21AB667CA456), + dual +] +interface INetFwProfile : IDispatch +{ + [id(1), propget] + HRESULT Type( [out, retval] NET_FW_PROFILE_TYPE* type ); + + [id(2), propget] + HRESULT FirewallEnabled( [out, retval] VARIANT_BOOL* enabled ); + + [id(2), propput] + HRESULT FirewallEnabled( [in] VARIANT_BOOL enabled ); + + [id(3), propget] + HRESULT ExceptionsNotAllowed( [out, retval] VARIANT_BOOL* notAllowed ); + + [id(3), propput] + HRESULT ExceptionsNotAllowed( [in] VARIANT_BOOL notAllowed ); + + [id(4), propget] + HRESULT NotificationsDisabled( [out, retval] VARIANT_BOOL* disabled ); + + [id(4), propput] + HRESULT NotificationsDisabled( [in] VARIANT_BOOL disabled ); + + [id(5), propget] + HRESULT UnicastResponsesToMulticastBroadcastDisabled( [out, retval] VARIANT_BOOL* disabled ); + + [id(5), propput] + HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] VARIANT_BOOL disabled ); + + [id(6), propget] + HRESULT RemoteAdminSettings( [out, retval] INetFwRemoteAdminSettings** remoteAdminSettings ); + + [id(7), propget] + HRESULT IcmpSettings( [out, retval] INetFwIcmpSettings** icmpSettings ); + + [id(8), propget] + HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts ); + + [id(9), propget] + HRESULT Services( [out, retval] INetFwServices** services ); + + [id(10), propget] + HRESULT AuthorizedApplications( [out, retval] INetFwAuthorizedApplications** apps ); +} + +[ + object, + uuid(D46D2478-9AC9-4008-9DC7-5563CE5536CC), + dual +] +interface INetFwPolicy : IDispatch +{ + [id(1), propget] + HRESULT CurrentProfile( [out, retval] INetFwProfile** profile ); + + [id(2)] + HRESULT GetProfileByType( [in] NET_FW_PROFILE_TYPE profileType, + [out, retval] INetFwProfile** profile ); +} + +[ + object, + uuid(F7898AF5-CAC4-4632-A2EC-DA06E5111AF2), + dual +] +interface INetFwMgr : IDispatch +{ + [id(1), propget] + HRESULT LocalPolicy( [out, retval] INetFwPolicy** localPolicy ); + + [id(2), propget] + HRESULT CurrentProfileType( [out, retval] NET_FW_PROFILE_TYPE* profileType ); + + [id(3)] + HRESULT RestoreDefaults(); + + [id(4)] + HRESULT IsPortAllowed( [in] BSTR imageFileName, [in] NET_FW_IP_VERSION ipVersion, + [in] LONG portNumber, [in] BSTR localAddress, + [in] NET_FW_IP_PROTOCOL ipProtocol, [out] VARIANT* allowed, + [out] VARIANT* restricted ); + + [id(5)] + HRESULT IsIcmpTypeAllowed( [in] NET_FW_IP_VERSION ipVersion, [in] BSTR localAddress, + [in] BYTE type, [out] VARIANT* allowed, + [out] VARIANT* restricted ); +} + +[ + uuid(DB4F3345-3EF8-45ED-B976-25A6D3B81B71), + version(1.0) +] +library NetFwPublicTypeLib +{ + importlib("stdole2.tlb"); + interface INetFwRemoteAdminSettings; + interface INetFwIcmpSettings; + interface INetFwOpenPort; + interface INetFwOpenPorts; + interface INetFwService; + interface INetFwServices; + interface INetFwAuthorizedApplication; + interface INetFwAuthorizedApplications; + interface INetFwProfile; + interface INetFwPolicy; + interface INetFwMgr; + + [ + uuid(0CA545C6-37AD-4A6C-BF92-9F7610067EF5) + ] + coclass NetFwOpenPort + { + [default] interface INetFwOpenPort; + } + + [ + uuid(EC9846B3-2762-4A6B-A214-6ACB603462D2) + ] + coclass NetFwAuthorizedApplication + { + [default] interface INetFwAuthorizedApplication; + } + + [ + uuid(304CE942-6E39-40D8-943A-B913C40C9CD4) + ] + coclass NetFwMgr + { + [default] interface INetFwMgr; + } +} diff --git a/reactos/include/psdk/psdk.rbuild b/reactos/include/psdk/psdk.rbuild index 3994f20786d..283aeaba9f0 100644 --- a/reactos/include/psdk/psdk.rbuild +++ b/reactos/include/psdk/psdk.rbuild @@ -16,6 +16,7 @@ hlink.idl htiframe.idl iads.idl + icftypes.idl imnact.idl imnxport.idl indexsrv.idl @@ -26,6 +27,7 @@ mstask.idl msxml.idl msxml2.idl + netfw.idl oaidl.idl objidl.idl objsafe.idl diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 20a79664d6b..45f6c928201 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -43,6 +43,7 @@ reactos/dll/directx/quartz # Autosync reactos/dll/win32/advpack # Autosync reactos/dll/win32/atl # Autosync reactos/dll/win32/avifil32 # Autosync +reactos/dll/win32/bcrypt # Autosync reactos/dll/win32/browseui # Out of sync reactos/dll/win32/cabinet # Autosync reactos/dll/win32/clusapi # Autosync @@ -61,6 +62,7 @@ reactos/dll/win32/dciman32 # Synced to Wine-1_0-rc2 reactos/dll/win32/gdiplus # Autosync reactos/dll/win32/hhctrl.ocx # Autosync reactos/dll/win32/hlink # Autosync +reactos/dll/win32/hnetcfg # Autosync reactos/dll/win32/httpapi # Autosync reactos/dll/win32/iccvid # Autosync reactos/dll/win32/icmp # Synced to Wine-0_9_10 @@ -177,6 +179,7 @@ reactos/dll/win32/xinput1_1 # Autosync reactos/dll/win32/xinput1_2 # Autosync reactos/dll/win32/xinput1_3 # Autosync reactos/dll/win32/xinput9_1_0 # Autosync +reactos/dll/win32/xmllite # Autosync ReactOS shares the following programs with Winehq.