From: Rémi Bernon rbernon@codeweavers.com
--- configure.ac | 1 + dlls/winegstreamer/main.c | 36 +---- dlls/winegstreamer/mfplat.c | 37 ----- dlls/winegstreamer/winegstreamer_classes.idl | 4 +- dlls/wmvdecod/Makefile.in | 7 + dlls/wmvdecod/video_decoder.c | 42 ++++++ dlls/wmvdecod/video_decoder.h | 50 +++++++ dlls/wmvdecod/wmvdecod.c | 144 +++++++++++++++++++ dlls/wmvdecod/wmvdecod.idl | 25 ++++ dlls/wmvdecod/wmvdecod.spec | 4 + loader/wine.inf.in | 1 + 11 files changed, 278 insertions(+), 73 deletions(-) create mode 100644 dlls/wmvdecod/Makefile.in create mode 100644 dlls/wmvdecod/video_decoder.c create mode 100644 dlls/wmvdecod/video_decoder.h create mode 100644 dlls/wmvdecod/wmvdecod.c create mode 100644 dlls/wmvdecod/wmvdecod.idl create mode 100644 dlls/wmvdecod/wmvdecod.spec
diff --git a/configure.ac b/configure.ac index fc05179a940..5d31816bd2a 100644 --- a/configure.ac +++ b/configure.ac @@ -3345,6 +3345,7 @@ WINE_CONFIG_MAKEFILE(dlls/wmp/tests) WINE_CONFIG_MAKEFILE(dlls/wmphoto) WINE_CONFIG_MAKEFILE(dlls/wmvcore) WINE_CONFIG_MAKEFILE(dlls/wmvcore/tests) +WINE_CONFIG_MAKEFILE(dlls/wmvdecod) WINE_CONFIG_MAKEFILE(dlls/wnaspi32) WINE_CONFIG_MAKEFILE(dlls/wofutil) WINE_CONFIG_MAKEFILE(dlls/wow32,enable_win16) diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index fbe5274f14a..a49573ecdd2 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -996,6 +996,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) static const GUID CLSID_wg_mpeg4_sink_factory = {0x5d5407d9,0xc6ca,0x4770,{0xa7,0xcc,0x27,0xc0,0xcb,0x8a,0x76,0x27}}; static const GUID CLSID_wg_resampler = {0x92f35e78,0x15a5,0x486b,{0x88,0x8e,0x57,0x5f,0x99,0x65,0x1c,0xe2}}; static const GUID CLSID_wg_wma_decoder = {0x5b4d4e54,0x0620,0x4cf9,{0x94,0xae,0x78,0x23,0x96,0x5c,0x28,0xb6}}; + static const GUID CLSID_wg_wmv_decoder = {0x62ee5ddb,0x4f52,0x48e2,{0x89,0x28,0x78,0x7b,0x02,0x53,0xa0,0xbc}}; struct class_factory *factory; HRESULT hr;
@@ -1023,7 +1024,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) factory = &wave_parser_cf; else if (IsEqualGUID(clsid, &CLSID_wg_wma_decoder)) factory = &wma_decoder_cf; - else if (IsEqualGUID(clsid, &CLSID_WMVDecoderMFT)) + else if (IsEqualGUID(clsid, &CLSID_wg_wmv_decoder)) factory = &wmv_decoder_cf; else if (IsEqualGUID(clsid, &CLSID_wg_resampler)) factory = &resampler_cf; @@ -1299,32 +1300,6 @@ static const REGFILTER2 reg_decodebin_parser =
HRESULT WINAPI DllRegisterServer(void) { - DMO_PARTIAL_MEDIATYPE wmv_decoder_output[11] = - { - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_YV12}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_YUY2}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_UYVY}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_YVYU}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_NV11}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_NV12}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB32}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB24}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB565}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB555}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB8}, - }; - DMO_PARTIAL_MEDIATYPE wmv_decoder_input[8] = - { - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMV1}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMV2}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMV3}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMVA}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WVC1}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMVP}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WVP2}, - {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_VC1S}, - }; - IFilterMapper2 *mapper; HRESULT hr;
@@ -1352,10 +1327,6 @@ HRESULT WINAPI DllRegisterServer(void)
IFilterMapper2_Release(mapper);
- if (FAILED(hr = DMORegister(L"WMVideo Decoder DMO", &CLSID_WMVDecoderMFT, &DMOCATEGORY_VIDEO_DECODER, - 0, ARRAY_SIZE(wmv_decoder_input), wmv_decoder_input, ARRAY_SIZE(wmv_decoder_output), wmv_decoder_output))) - return hr; - return mfplat_DllRegisterServer(); }
@@ -1383,8 +1354,5 @@ HRESULT WINAPI DllUnregisterServer(void)
IFilterMapper2_Release(mapper);
- if (FAILED(hr = DMOUnregister(&CLSID_WMVDecoderMFT, &DMOCATEGORY_VIDEO_DECODER))) - return hr; - return S_OK; } diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 785c11c7ebb..0e3aed20efa 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -192,33 +192,6 @@ HRESULT mfplat_DllRegisterServer(void) {MFMediaType_Video, MFVideoFormat_H264}, };
- MFT_REGISTER_TYPE_INFO wmv_decoder_input_types[] = - { - {MFMediaType_Video, MFVideoFormat_WMV1}, - {MFMediaType_Video, MFVideoFormat_WMV2}, - {MFMediaType_Video, MFVideoFormat_WMV3}, - {MFMediaType_Video, MEDIASUBTYPE_WMVP}, - {MFMediaType_Video, MEDIASUBTYPE_WVP2}, - {MFMediaType_Video, MEDIASUBTYPE_WMVR}, - {MFMediaType_Video, MEDIASUBTYPE_WMVA}, - {MFMediaType_Video, MFVideoFormat_WVC1}, - {MFMediaType_Video, MFVideoFormat_VC1S}, - }; - MFT_REGISTER_TYPE_INFO wmv_decoder_output_types[] = - { - {MFMediaType_Video, MFVideoFormat_YV12}, - {MFMediaType_Video, MFVideoFormat_YUY2}, - {MFMediaType_Video, MFVideoFormat_UYVY}, - {MFMediaType_Video, MFVideoFormat_YVYU}, - {MFMediaType_Video, MFVideoFormat_NV11}, - {MFMediaType_Video, MFVideoFormat_NV12}, - {MFMediaType_Video, DMOVideoFormat_RGB32}, - {MFMediaType_Video, DMOVideoFormat_RGB24}, - {MFMediaType_Video, DMOVideoFormat_RGB565}, - {MFMediaType_Video, DMOVideoFormat_RGB555}, - {MFMediaType_Video, DMOVideoFormat_RGB8}, - }; - struct mft { GUID clsid; @@ -252,16 +225,6 @@ HRESULT mfplat_DllRegisterServer(void) ARRAY_SIZE(h264_encoder_output_types), h264_encoder_output_types, }, - { - CLSID_WMVDecoderMFT, - MFT_CATEGORY_VIDEO_DECODER, - L"WMVideo Decoder MFT", - MFT_ENUM_FLAG_SYNCMFT, - ARRAY_SIZE(wmv_decoder_input_types), - wmv_decoder_input_types, - ARRAY_SIZE(wmv_decoder_output_types), - wmv_decoder_output_types, - }, };
unsigned int i; diff --git a/dlls/winegstreamer/winegstreamer_classes.idl b/dlls/winegstreamer/winegstreamer_classes.idl index 79e382c9300..ba848b5a837 100644 --- a/dlls/winegstreamer/winegstreamer_classes.idl +++ b/dlls/winegstreamer/winegstreamer_classes.idl @@ -97,9 +97,9 @@ coclass wg_aac_decoder {}
[ threading(both), - uuid(82d353df-90bd-4382-8bc2-3f6192b76e34) + uuid(62ee5ddb-4f52-48e2-8928-787b0253a0bc) ] -coclass CWMVDecMediaObject {} +coclass wg_wmv_decoder {}
[ threading(both), diff --git a/dlls/wmvdecod/Makefile.in b/dlls/wmvdecod/Makefile.in new file mode 100644 index 00000000000..3946bad65de --- /dev/null +++ b/dlls/wmvdecod/Makefile.in @@ -0,0 +1,7 @@ +MODULE = wmvdecod.dll +IMPORTS = combase mfplat msdmo mfuuid dmoguids strmiids wmcodecdspuuid uuid + +SOURCES = \ + video_decoder.c \ + wmvdecod.c \ + wmvdecod.idl diff --git a/dlls/wmvdecod/video_decoder.c b/dlls/wmvdecod/video_decoder.c new file mode 100644 index 00000000000..1b0ba9d972a --- /dev/null +++ b/dlls/wmvdecod/video_decoder.c @@ -0,0 +1,42 @@ +/* + * Copyright 2024 Rémi Bernon 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 "video_decoder.h" + +#include "initguid.h" + +DEFINE_MEDIATYPE_GUID(MEDIASUBTYPE_VC1S,MAKEFOURCC('V','C','1','S')); +DEFINE_GUID(MEDIASUBTYPE_WMV_Unknown, 0x7ce12ca9,0xbfbf,0x43d9,0x9d,0x00,0x82,0xb8,0xed,0x54,0x31,0x6b); + +static HRESULT WINAPI wmv_decoder_factory_CreateInstance(IClassFactory *iface, IUnknown *outer, + REFIID riid, void **out) +{ + static const GUID CLSID_wg_wmv_decoder = {0x62ee5ddb,0x4f52,0x48e2,{0x89,0x28,0x78,0x7b,0x02,0x53,0xa0,0xbc}}; + return CoCreateInstance(&CLSID_wg_wmv_decoder, outer, CLSCTX_INPROC_SERVER, riid, out); +} + +static const IClassFactoryVtbl wmv_decoder_factory_vtbl = +{ + class_factory_QueryInterface, + class_factory_AddRef, + class_factory_Release, + wmv_decoder_factory_CreateInstance, + class_factory_LockServer, +}; + +IClassFactory wmv_decoder_factory = {&wmv_decoder_factory_vtbl}; diff --git a/dlls/wmvdecod/video_decoder.h b/dlls/wmvdecod/video_decoder.h new file mode 100644 index 00000000000..bd426de3600 --- /dev/null +++ b/dlls/wmvdecod/video_decoder.h @@ -0,0 +1,50 @@ +/* + * Copyright 2024 Rémi Bernon 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 <stddef.h> +#include <stdarg.h> + +#define COBJMACROS +#include "windef.h" +#include "winbase.h" + +#include "d3d9.h" +#include "dshow.h" +#include "mfapi.h" +#include "mfidl.h" +#include "wmcodecdsp.h" + +extern IClassFactory wmv_decoder_factory; + +static inline HRESULT WINAPI class_factory_QueryInterface(IClassFactory *iface, REFIID riid, void **out) +{ + *out = IsEqualGUID(riid, &IID_IClassFactory) || IsEqualGUID(riid, &IID_IUnknown) ? iface : NULL; + return *out ? S_OK : E_NOINTERFACE; +} +static inline ULONG WINAPI class_factory_AddRef(IClassFactory *iface) +{ + return 2; +} +static inline ULONG WINAPI class_factory_Release(IClassFactory *iface) +{ + return 1; +} +static inline HRESULT WINAPI class_factory_LockServer(IClassFactory *iface, BOOL dolock) +{ + return S_OK; +} diff --git a/dlls/wmvdecod/wmvdecod.c b/dlls/wmvdecod/wmvdecod.c new file mode 100644 index 00000000000..3a4e49b89de --- /dev/null +++ b/dlls/wmvdecod/wmvdecod.c @@ -0,0 +1,144 @@ +/* + * Copyright 2024 Rémi Bernon 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 "video_decoder.h" + +#include "dmoreg.h" +#include "rpcproxy.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmo); + +extern GUID MEDIASUBTYPE_WMV_Unknown; +extern GUID MEDIASUBTYPE_VC1S; + +#include "initguid.h" + +DEFINE_GUID(DMOVideoFormat_RGB32,D3DFMT_X8R8G8B8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); +DEFINE_GUID(DMOVideoFormat_RGB24,D3DFMT_R8G8B8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); +DEFINE_GUID(DMOVideoFormat_RGB565,D3DFMT_R5G6B5,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); +DEFINE_GUID(DMOVideoFormat_RGB555,D3DFMT_X1R5G5B5,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); +DEFINE_GUID(DMOVideoFormat_RGB8,D3DFMT_P8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); + +/*********************************************************************** + * DllGetClassObject (wmvdecod.@) + */ +HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void **out) +{ + if (IsEqualGUID(clsid, &CLSID_WMVDecoderMFT)) + return IClassFactory_QueryInterface(&wmv_decoder_factory, riid, out); + + *out = NULL; + FIXME("Unknown clsid %s.\n", debugstr_guid(clsid)); + return CLASS_E_CLASSNOTAVAILABLE; +} + +/*********************************************************************** + * DllRegisterServer (wmvdecod.@) + */ +HRESULT WINAPI DllRegisterServer(void) +{ + MFT_REGISTER_TYPE_INFO wmv_decoder_mft_inputs[] = + { + {MFMediaType_Video, MFVideoFormat_WMV1}, + {MFMediaType_Video, MFVideoFormat_WMV2}, + {MFMediaType_Video, MFVideoFormat_WMV3}, + {MFMediaType_Video, MEDIASUBTYPE_WMVP}, + {MFMediaType_Video, MEDIASUBTYPE_WVP2}, + {MFMediaType_Video, MEDIASUBTYPE_WMVR}, + {MFMediaType_Video, MEDIASUBTYPE_WMVA}, + {MFMediaType_Video, MFVideoFormat_WVC1}, + {MFMediaType_Video, MEDIASUBTYPE_VC1S}, + }; + MFT_REGISTER_TYPE_INFO wmv_decoder_mft_outputs[] = + { + {MFMediaType_Video, MFVideoFormat_YV12}, + {MFMediaType_Video, MFVideoFormat_YUY2}, + {MFMediaType_Video, MFVideoFormat_UYVY}, + {MFMediaType_Video, MFVideoFormat_YVYU}, + {MFMediaType_Video, MFVideoFormat_NV11}, + {MFMediaType_Video, MFVideoFormat_NV12}, + {MFMediaType_Video, DMOVideoFormat_RGB32}, + {MFMediaType_Video, DMOVideoFormat_RGB24}, + {MFMediaType_Video, DMOVideoFormat_RGB565}, + {MFMediaType_Video, DMOVideoFormat_RGB555}, + {MFMediaType_Video, DMOVideoFormat_RGB8}, + }; + DMO_PARTIAL_MEDIATYPE wmv_decoder_dmo_outputs[] = + { + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_YV12}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_YUY2}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_UYVY}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_YVYU}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_NV11}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_NV12}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB32}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB24}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB565}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB555}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_RGB8}, + }; + DMO_PARTIAL_MEDIATYPE wmv_decoder_dmo_inputs[] = + { + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMV1}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMV2}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMV3}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMVA}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WVC1}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WMVP}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_WVP2}, + {.type = MEDIATYPE_Video, .subtype = MEDIASUBTYPE_VC1S}, + }; + HRESULT hr; + + TRACE("\n"); + + if (FAILED(hr = __wine_register_resources())) + return hr; + if (FAILED(hr = MFTRegister(CLSID_WMVDecoderMFT, MFT_CATEGORY_VIDEO_DECODER, + (WCHAR *)L"WMVideo Decoder MFT", MFT_ENUM_FLAG_SYNCMFT, + ARRAY_SIZE(wmv_decoder_mft_inputs), wmv_decoder_mft_inputs, + ARRAY_SIZE(wmv_decoder_mft_outputs), wmv_decoder_mft_outputs, NULL))) + return hr; + if (FAILED(hr = DMORegister(L"WMVideo Decoder DMO", &CLSID_WMVDecoderMFT, &DMOCATEGORY_VIDEO_DECODER, 0, + ARRAY_SIZE(wmv_decoder_dmo_inputs), wmv_decoder_dmo_inputs, + ARRAY_SIZE(wmv_decoder_dmo_outputs), wmv_decoder_dmo_outputs))) + return hr; + + return S_OK; +} + +/*********************************************************************** + * DllUnregisterServer (wmvdecod.@) + */ +HRESULT WINAPI DllUnregisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + if (FAILED(hr = __wine_unregister_resources())) + return hr; + if (FAILED(hr = MFTUnregister(CLSID_WMVDecoderMFT))) + return hr; + if (FAILED(hr = DMOUnregister(&CLSID_WMVDecoderMFT, &DMOCATEGORY_VIDEO_DECODER))) + return hr; + + return S_OK; +} diff --git a/dlls/wmvdecod/wmvdecod.idl b/dlls/wmvdecod/wmvdecod.idl new file mode 100644 index 00000000000..8d1984ee475 --- /dev/null +++ b/dlls/wmvdecod/wmvdecod.idl @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Rémi Bernon 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 + */ + +#pragma makedep register + +[ + threading(both), + uuid(82d353df-90bd-4382-8bc2-3f6192b76e34) +] +coclass CWMVDecMediaObject {} diff --git a/dlls/wmvdecod/wmvdecod.spec b/dlls/wmvdecod/wmvdecod.spec new file mode 100644 index 00000000000..b16365d0c9f --- /dev/null +++ b/dlls/wmvdecod/wmvdecod.spec @@ -0,0 +1,4 @@ +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject(ptr ptr ptr) +@ stdcall -private DllRegisterServer() +@ stdcall -private DllUnregisterServer() diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 9c56ea430da..1777c17ac77 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -2126,6 +2126,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G" 55,,winprint.dll,1 11,,wintrust.dll,1 11,,wmadmod.dll,1 +11,,wmvdecod.dll,1 11,,iexplore.exe,1
; 32bit-only fake dlls