[DEVENUM]
authorAmine Khaldi <amine.khaldi@reactos.org>
Tue, 1 Oct 2013 22:07:54 +0000 (22:07 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Tue, 1 Oct 2013 22:07:54 +0000 (22:07 +0000)
* Sync with Wine 1.7.1.
CORE-7469

svn path=/trunk/; revision=60507

12 files changed:
reactos/dll/directx/wine/devenum/CMakeLists.txt
reactos/dll/directx/wine/devenum/Makefile.in [deleted file]
reactos/dll/directx/wine/devenum/createdevenum.c
reactos/dll/directx/wine/devenum/devenum.rc
reactos/dll/directx/wine/devenum/devenum_classes.idl [new file with mode: 0644]
reactos/dll/directx/wine/devenum/devenum_classes.rgs [new file with mode: 0644]
reactos/dll/directx/wine/devenum/devenum_main.c
reactos/dll/directx/wine/devenum/devenum_private.h
reactos/dll/directx/wine/devenum/factory.c
reactos/dll/directx/wine/devenum/mediacatenum.c
reactos/dll/directx/wine/devenum/parsedisplayname.c
reactos/media/doc/README.WINE

index 7337355..2c1aa60 100644 (file)
@@ -2,22 +2,22 @@
 remove_definitions(-D_WIN32_WINNT=0x502)
 add_definitions(-D_WIN32_WINNT=0x600)
 
+add_definitions(-D__WINESRC__)
 include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine)
-
 spec2def(devenum.dll devenum.spec)
 
-add_library(devenum SHARED
+list(APPEND SOURCE
     createdevenum.c
     devenum_main.c
     factory.c
     mediacatenum.c
     parsedisplayname.c
-    devenum.rc
     ${CMAKE_CURRENT_BINARY_DIR}/devenum.def)
 
+add_library(devenum SHARED ${SOURCE} devenum.rc)
+set_source_files_properties(devenum.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/devenum_classes.rgs)
 set_module_type(devenum win32dll UNICODE)
 target_link_libraries(devenum strmiids uuid wine)
 add_importlibs(devenum advapi32 ole32 oleaut32 winmm user32 avicap32 msvcrt kernel32 ntdll)
 add_pch(devenum devenum_private.h)
-add_dependencies(devenum dxsdk)
 add_cd_file(TARGET devenum DESTINATION reactos/system32 FOR all)
diff --git a/reactos/dll/directx/wine/devenum/Makefile.in b/reactos/dll/directx/wine/devenum/Makefile.in
deleted file mode 100644 (file)
index 8653126..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-TOPSRCDIR = @top_srcdir@
-TOPOBJDIR = ../..
-SRCDIR    = @srcdir@
-VPATH     = @srcdir@
-MODULE    = devenum.dll
-IMPORTS   = ole32 oleaut32 winmm user32 advapi32 kernel32
-EXTRALIBS = -lstrmiids -luuid
-
-C_SRCS = \
-       createdevenum.c \
-       devenum_main.c \
-       factory.c \
-       mediacatenum.c \
-       parsedisplayname.c
-
-RC_SRCS = devenum.rc
-
-@MAKE_DLL_RULES@
-
-### Dependencies:
index bbe9352..b0a9301 100644 (file)
@@ -52,6 +52,9 @@ static const WCHAR wszAllowedZero[] = {'A','l','l','o','w','e','d','Z','e','r','
 static const WCHAR wszDirection[] = {'D','i','r','e','c','t','i','o','n',0};
 static const WCHAR wszIsRendered[] = {'I','s','R','e','n','d','e','r','e','d',0};
 static const WCHAR wszTypes[] = {'T','y','p','e','s',0};
+static const WCHAR wszFriendlyName[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0};
+static const WCHAR wszWaveInID[] = {'W','a','v','e','I','n','I','D',0};
+static const WCHAR wszWaveOutID[] = {'W','a','v','e','O','u','t','I','D',0};
 
 static ULONG WINAPI DEVENUM_ICreateDevEnum_AddRef(ICreateDevEnum * iface);
 static HRESULT DEVENUM_CreateSpecialCategories(void);
@@ -59,24 +62,24 @@ static HRESULT DEVENUM_CreateSpecialCategories(void);
 /**********************************************************************
  * DEVENUM_ICreateDevEnum_QueryInterface (also IUnknown)
  */
-static HRESULT WINAPI DEVENUM_ICreateDevEnum_QueryInterface(
-    ICreateDevEnum * iface,
-    REFIID riid,
-    LPVOID *ppvObj)
+static HRESULT WINAPI DEVENUM_ICreateDevEnum_QueryInterface(ICreateDevEnum *iface, REFIID riid,
+        void **ppv)
 {
-    TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppv);
 
-    if (ppvObj == NULL) return E_POINTER;
+    if (!ppv)
+        return E_POINTER;
 
     if (IsEqualGUID(riid, &IID_IUnknown) ||
        IsEqualGUID(riid, &IID_ICreateDevEnum))
     {
-        *ppvObj = iface;
+        *ppv = iface;
        DEVENUM_ICreateDevEnum_AddRef(iface);
        return S_OK;
     }
 
     FIXME("- no interface IID: %s\n", debugstr_guid(riid));
+    *ppv = NULL;
     return E_NOINTERFACE;
 }
 
@@ -171,10 +174,10 @@ static void DEVENUM_ReadPinTypes(HKEY hkeyPinKey, REGFILTERPINS *rgPin)
         for (i1 = 0; i1 < dwMinorTypes; i1++)
         {
             WCHAR wszMinorTypeName[64];
-            DWORD cName = sizeof(wszMinorTypeName) / sizeof(WCHAR);
             CLSID *clsMajorType = NULL, *clsMinorType = NULL;
             HRESULT hr;
 
+            cName = sizeof(wszMinorTypeName) / sizeof(WCHAR);
             if (RegEnumKeyExW(hkeyMajorType, i1, wszMinorTypeName, &cName, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) continue;
 
             clsMinorType = CoTaskMemAlloc(sizeof(CLSID));
@@ -349,7 +352,6 @@ static HRESULT DEVENUM_RegisterLegacyAmFilters(void)
             HKEY hkeyCategoryBaseKey;
             WCHAR wszRegKey[MAX_PATH];
             HKEY hkeyInstance = NULL;
-            HRESULT hr;
 
             if (RegEnumKeyExW(hkeyFilter, i, wszFilterSubkeyName, &cName, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) continue;
 
@@ -463,9 +465,8 @@ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
     HKEY hkey;
     HKEY hbasekey;
     HRESULT hr;
-    CreateDevEnumImpl *This = (CreateDevEnumImpl *)iface;
 
-    TRACE("(%p)->(%s, %p, %x)\n\tDeviceClass:\t%s\n", This, debugstr_guid(clsidDeviceClass), ppEnumMoniker, dwFlags, debugstr_guid(clsidDeviceClass));
+    TRACE("(%p)->(%s, %p, %x)\n", iface, debugstr_guid(clsidDeviceClass), ppEnumMoniker, dwFlags);
 
     if (!ppEnumMoniker)
         return E_POINTER;
@@ -519,7 +520,7 @@ static const ICreateDevEnumVtbl ICreateDevEnum_Vtbl =
 /**********************************************************************
  * static CreateDevEnum instance
  */
-CreateDevEnumImpl DEVENUM_CreateDevEnum = { &ICreateDevEnum_Vtbl };
+ICreateDevEnum DEVENUM_CreateDevEnum = { &ICreateDevEnum_Vtbl };
 
 /**********************************************************************
  * DEVENUM_CreateAMCategoryKey (INTERNAL)
@@ -631,6 +632,7 @@ static HRESULT DEVENUM_CreateSpecialCategories(void)
        WAVEINCAPSW wicaps;
         MIDIOUTCAPSW mocaps;
         REGPINTYPES * pTypes;
+        IPropertyBag * pPropBag = NULL;
 
        numDevs = waveOutGetNumDevs();
 
@@ -668,10 +670,27 @@ static HRESULT DEVENUM_CreateSpecialCategories(void)
                                              wocaps.szPname,
                                              &rf2);
 
-                /* FIXME: do additional stuff with IMoniker here, depending on what RegisterFilter does */
-
-               if (pMoniker)
-                   IMoniker_Release(pMoniker);
+                if (pMoniker)
+                {
+                    VARIANT var;
+
+                    V_VT(&var) = VT_I4;
+                    V_UNION(&var, ulVal) = i;
+                    res = IMoniker_BindToStorage(pMoniker, NULL, NULL, &IID_IPropertyBag, (LPVOID)&pPropBag);
+                    if (SUCCEEDED(res))
+                        res = IPropertyBag_Write(pPropBag, wszWaveOutID, &var);
+                    else
+                        pPropBag = NULL;
+
+                    V_VT(&var) = VT_LPWSTR;
+                    V_UNION(&var, bstrVal) = wocaps.szPname;
+                    if (SUCCEEDED(res))
+                        res = IPropertyBag_Write(pPropBag, wszFriendlyName, &var);
+                    if (pPropBag)
+                        IPropertyBag_Release(pPropBag);
+                    IMoniker_Release(pMoniker);
+                    pMoniker = NULL;
+                }
 
                wsprintfW(szDSoundName, szDSoundNameFormat, wocaps.szPname);
                res = IFilterMapper2_RegisterFilter(pMapper,
@@ -724,7 +743,7 @@ static HRESULT DEVENUM_CreateSpecialCategories(void)
 
                 rfp2.lpMediaType = pTypes;
 
-               res = IFilterMapper2_RegisterFilter(pMapper,
+                res = IFilterMapper2_RegisterFilter(pMapper,
                                              &CLSID_AudioRecord,
                                              wicaps.szPname,
                                              &pMoniker,
@@ -732,10 +751,27 @@ static HRESULT DEVENUM_CreateSpecialCategories(void)
                                              wicaps.szPname,
                                              &rf2);
 
-                /* FIXME: do additional stuff with IMoniker here, depending on what RegisterFilter does */
 
-               if (pMoniker)
-                   IMoniker_Release(pMoniker);
+                if (pMoniker) {
+                    VARIANT var;
+
+                    V_VT(&var) = VT_I4;
+                    V_UNION(&var, ulVal) = i;
+                    res = IMoniker_BindToStorage(pMoniker, NULL, NULL, &IID_IPropertyBag, (LPVOID)&pPropBag);
+                    if (SUCCEEDED(res))
+                        res = IPropertyBag_Write(pPropBag, wszWaveInID, &var);
+                    else
+                        pPropBag = NULL;
+
+                    V_VT(&var) = VT_LPWSTR;
+                    V_UNION(&var, bstrVal) = wicaps.szPname;
+                    if (SUCCEEDED(res))
+                        res = IPropertyBag_Write(pPropBag, wszFriendlyName, &var);
+
+                    if (pPropBag)
+                        IPropertyBag_Release(pPropBag);
+                    IMoniker_Release(pMoniker);
+                }
 
                 CoTaskMemFree(pTypes);
            }
@@ -802,7 +838,6 @@ static HRESULT DEVENUM_CreateSpecialCategories(void)
                                               szDeviceVersion, sizeof(szDeviceVersion)/sizeof(WCHAR)))
                 {
                     IMoniker * pMoniker = NULL;
-                    IPropertyBag * pPropBag = NULL;
                     WCHAR dprintf[] = { 'v','i','d','e','o','%','d',0 };
                     snprintfW(szDevicePath, sizeof(szDevicePath)/sizeof(WCHAR), dprintf, i);
                     /* The above code prevents 1 device with a different ID overwriting another */
@@ -833,8 +868,10 @@ static HRESULT DEVENUM_CreateSpecialCategories(void)
                        V_VT(&var) = VT_I4;
                        V_UNION(&var, ulVal) = i;
                        res = IMoniker_BindToStorage(pMoniker, NULL, NULL, &IID_IPropertyBag, (LPVOID)&pPropBag);
-                       if (SUCCEEDED(res))
-                          res = IPropertyBag_Write(pPropBag, wszVfwIndex, &var);
+                       if (SUCCEEDED(res)) {
+                           res = IPropertyBag_Write(pPropBag, wszVfwIndex, &var);
+                           IPropertyBag_Release(pPropBag);
+                       }
                        IMoniker_Release(pMoniker);
                     }
 
index af706a3..c958b40 100644 (file)
 
 #pragma code_page(65001)
 
-#include "windef.h"
+//#include "windef.h"
 //#include "winbase.h"
 //#include "winnls.h"
+#include "devenum_private.h"
+
+LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+{
+    IDS_DEVENUM_DSDEFAULT  "Default DirectSound"
+    IDS_DEVENUM_DS         "DirectSound: %s"
+    IDS_DEVENUM_WODEFAULT  "Default WaveOut Device"
+    IDS_DEVENUM_MIDEFAULT  "Default MidiOut Device"
+}
 
 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 
@@ -33,4 +44,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 #define WINE_PRODUCTVERSION 6,5,1,902
 #define WINE_PRODUCTVERSION_STR "6.5"
 
-#include "wine/wine_common_ver.rc"
+#include <wine/wine_common_ver.rc>
+
+1 WINE_REGISTRY devenum_classes.rgs
diff --git a/reactos/dll/directx/wine/devenum/devenum_classes.idl b/reactos/dll/directx/wine/devenum/devenum_classes.idl
new file mode 100644 (file)
index 0000000..8722910
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * COM Classes for devenum
+ *
+ * Copyright 2010 Alexandre Julliard
+ *
+ * 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
+ */
+
+[
+    helpstring("System Device Enum"),
+    threading(both),
+    uuid(62be5d10-60eb-11d0-bd3b-00a0c911ce86)
+]
+coclass SystemDeviceEnum { interface ICreateDevEnum; }
+
+[
+    threading(both),
+    progid("device.1"),
+    vi_progid("device"),
+    uuid(4315d437-5b8c-11d0-bd3b-00a0c911ce86)
+]
+coclass DeviceMoniker { interface IParseDisplayName; }
+
+[
+    helpstring("ACM Class Manager"),
+    threading(both),
+    uuid(33d9a761-90c8-11d0-bd43-00a0c911ce86)
+]
+coclass AudioCompressorCategory { }
+
+[
+    helpstring("ICM Class Manager"),
+    threading(both),
+    uuid(33d9a760-90c8-11d0-bd43-00a0c911ce86)
+]
+coclass VideoCompressorCategory { }
+
+[
+    helpstring("ActiveMovie Filter Class Manager"),
+    threading(both),
+    uuid(083863f1-70de-11d0-bd40-00a0c911ce86)
+]
+coclass LegacyAmFilterCategory { }
+
+[
+    helpstring("VFW Capture Class Manager"),
+    threading(both),
+    uuid(860bb310-5d01-11d0-bd3b-00a0c911ce86)
+]
+coclass VideoInputDeviceCategory { }
+
+[
+    helpstring("WaveIn Class Manager"),
+    threading(both),
+    uuid(33d9a762-90c8-11d0-bd43-00a0c911ce86)
+]
+coclass AudioInputDeviceCategory { }
+
+[
+    helpstring("WaveOut and DSound Class Manager"),
+    threading(both),
+    uuid(e0f158e1-cb04-11d0-bd4e-00a0c911ce86)
+]
+coclass AudioRendererCategory { }
+
+[
+    helpstring("MidiOut Class Manager"),
+    threading(both),
+    uuid(4efe2452-168a-11d1-bc76-00c04fb9453b)
+]
+coclass MidiRendererCategory { }
+
+[
+    helpstring("ActiveMovie Filter Categories"),
+    threading(both),
+    uuid(da4e3da0-d07d-11d0-bd50-00a0c911ce86)
+]
+coclass ActiveMovieCategories { }
diff --git a/reactos/dll/directx/wine/devenum/devenum_classes.rgs b/reactos/dll/directx/wine/devenum/devenum_classes.rgs
new file mode 100644 (file)
index 0000000..85ca69e
--- /dev/null
@@ -0,0 +1,60 @@
+HKCR
+{
+    NoRemove Interface
+    {
+    }
+    NoRemove CLSID
+    {
+        '{62BE5D10-60EB-11D0-BD3B-00A0C911CE86}' = s 'System Device Enum'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{4315D437-5B8C-11D0-BD3B-00A0C911CE86}' = s 'DeviceMoniker'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+            ProgId = s 'device.1'
+            VersionIndependentProgId = s 'device'
+        }
+        '{33D9A761-90C8-11D0-BD43-00A0C911CE86}' = s 'ACM Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{33D9A760-90C8-11D0-BD43-00A0C911CE86}' = s 'ICM Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{083863F1-70DE-11D0-BD40-00A0C911CE86}' = s 'ActiveMovie Filter Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{860BB310-5D01-11D0-BD3B-00A0C911CE86}' = s 'VFW Capture Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{33D9A762-90C8-11D0-BD43-00A0C911CE86}' = s 'WaveIn Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{E0F158E1-CB04-11D0-BD4E-00A0C911CE86}' = s 'WaveOut and DSound Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{4EFE2452-168A-11D1-BC76-00C04FB9453B}' = s 'MidiOut Class Manager'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+        '{DA4E3DA0-D07D-11D0-BD50-00A0C911CE86}' = s 'ActiveMovie Filter Categories'
+        {
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+        }
+    }
+    'device.1' = s 'DeviceMoniker'
+    {
+        CLSID = s '{4315D437-5B8C-11D0-BD3B-00A0C911CE86}'
+    }
+    'device' = s 'DeviceMoniker'
+    {
+        CLSID = s '{4315D437-5B8C-11D0-BD3B-00A0C911CE86}'
+        CurVer = s 'device.1'
+    }
+}
index d4d2948..45314a7 100644 (file)
  */
 
 #include "devenum_private.h"
+#include <rpcproxy.h>
 #include <wine/debug.h>
-//#include "winreg.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(devenum);
 
-LONG dll_refs;
-HINSTANCE DEVENUM_hInstance;
+DECLSPEC_HIDDEN LONG dll_refs;
+DECLSPEC_HIDDEN HINSTANCE DEVENUM_hInstance;
 
 typedef struct
 {
@@ -35,7 +35,6 @@ typedef struct
     BOOL instance;
 } register_info;
 
-static HRESULT register_clsids(int count, const register_info * pRegInfo, LPCWSTR pszThreadingModel);
 static void DEVENUM_RegisterQuartz(void);
 
 /***********************************************************************
@@ -55,10 +54,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
         DEVENUM_hInstance = hinstDLL;
         DisableThreadLibraryCalls(hinstDLL);
        break;
-
-    case DLL_PROCESS_DETACH:
-        DEVENUM_hInstance = 0;
-       break;
     }
     return TRUE;
 }
@@ -76,7 +71,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
      * Oh well - works just fine as it is */
     if (IsEqualGUID(rclsid, &CLSID_SystemDeviceEnum) ||
         IsEqualGUID(rclsid, &CLSID_CDeviceMoniker))
-        return IClassFactory_QueryInterface((IClassFactory*)&DEVENUM_ClassFactory, iid, ppv);
+        return IClassFactory_QueryInterface(&DEVENUM_ClassFactory.IClassFactory_iface, iid, ppv);
 
     FIXME("CLSID: %s, IID: %s\n", debugstr_guid(rclsid), debugstr_guid(iid));
     return CLASS_E_CLASSNOTAVAILABLE;
@@ -96,42 +91,12 @@ HRESULT WINAPI DllCanUnloadNow(void)
 HRESULT WINAPI DllRegisterServer(void)
 {
     HRESULT res;
-    HKEY hkeyClsid = NULL;
-    HKEY hkey1 = NULL;
-    HKEY hkey2 = NULL;
-    LPOLESTR pszClsidDevMon = NULL;
     IFilterMapper2 * pMapper = NULL;
     LPVOID mapvptr;
-    static const WCHAR threadingModel[] = {'B','o','t','h',0};
-    static const WCHAR sysdevenum[] = {'S','y','s','t','e','m',' ','D','e','v','i','c','e',' ','E','n','u','m',0};
-    static const WCHAR devmon[] = {'D','e','v','i','c','e','M','o','n','i','k','e','r',0};
-    static const WCHAR acmcat[] = {'A','C','M',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r',0};
-    static const WCHAR vidcat[] = {'I','C','M',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r',0};
-    static const WCHAR filtcat[] = {'A','c','t','i','v','e','M','o','v','i','e',' ','F','i','l','t','e','r',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r',0};
-    static const WCHAR vfwcat[] = {'V','F','W',' ','C','a','p','t','u','r','e',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r',0};
-    static const WCHAR wavein[] = {'W','a','v','e','I','n',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r', 0};
-    static const WCHAR waveout[] = {'W','a','v','e','O','u','t',' ','a','n','d',' ','D','S','o','u','n','d',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r',0};
-    static const WCHAR midiout[] = {'M','i','d','i','O','u','t',' ','C','l','a','s','s',' ','M','a','n','a','g','e','r',0};
-    static const WCHAR amcat[] = {'A','c','t','i','v','e','M','o','v','i','e',' ','F','i','l','t','e','r',' ','C','a','t','e','g','o','r','i','e','s',0};
-    static const WCHAR device[] = {'d','e','v','i','c','e',0};
-    static const WCHAR device_1[] = {'d','e','v','i','c','e','.','1',0};
-    static const register_info ri[] =
-    {
-        {&CLSID_SystemDeviceEnum, sysdevenum, FALSE},
-       {&CLSID_CDeviceMoniker, devmon, FALSE},
-       {&CLSID_AudioCompressorCategory, acmcat, TRUE},
-       {&CLSID_VideoCompressorCategory, vidcat, TRUE},
-       {&CLSID_LegacyAmFilterCategory, filtcat, TRUE},
-       {&CLSID_VideoInputDeviceCategory, vfwcat, FALSE},
-       {&CLSID_AudioInputDeviceCategory, wavein, FALSE},
-       {&CLSID_AudioRendererCategory, waveout, FALSE},
-       {&CLSID_MidiRendererCategory, midiout, FALSE},
-       {&CLSID_ActiveMovieCategories, amcat, TRUE}
-    };
 
     TRACE("\n");
 
-    res = register_clsids(sizeof(ri) / sizeof(register_info), ri, threadingModel);
+    res = __wine_register_resources( DEVENUM_hInstance );
 
     /* Quartz is needed for IFilterMapper2 */
     DEVENUM_RegisterQuartz();
@@ -169,116 +134,6 @@ HRESULT WINAPI DllRegisterServer(void)
         IFilterMapper2_Release(pMapper);
     }
 
-/*** CDeviceMoniker ***/
-    if (SUCCEEDED(res))
-    {
-       res = StringFromCLSID(&CLSID_CDeviceMoniker, &pszClsidDevMon);
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegOpenKeyW(HKEY_CLASSES_ROOT, clsid_keyname, &hkeyClsid)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegOpenKeyW(hkeyClsid, pszClsidDevMon, &hkey1)
-              == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        static const WCHAR wszProgID[] = {'P','r','o','g','I','D',0};
-        res = RegCreateKeyW(hkey1, wszProgID, &hkey2)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegSetValueW(hkey2, NULL, REG_SZ, device_1, (lstrlenW(device_1) + 1) * sizeof(WCHAR))
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-
-    if (hkey2)
-    {
-        RegCloseKey(hkey2);
-        hkey2 = NULL;
-    }
-
-    if (SUCCEEDED(res))
-    {
-        static const WCHAR wszVProgID[] = {'V','e','r','s','i','o','n','I','n','d','e','p','e','d','e','n','t','P','r','o','g','I','D',0};
-       res = RegCreateKeyW(hkey1, wszVProgID, &hkey2)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegSetValueW(hkey2, NULL, REG_SZ, device, (lstrlenW(device) + 1) * sizeof(WCHAR))
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-
-    if (hkey2)
-    {
-        RegCloseKey(hkey2);
-        hkey2 = NULL;
-    }
-
-    if (hkey1)
-    {
-        RegCloseKey(hkey1);
-        hkey1 = NULL;
-    }
-
-    if (SUCCEEDED(res))
-    {
-        res = RegCreateKeyW(HKEY_CLASSES_ROOT, device, &hkey1)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegCreateKeyW(hkey1, clsid_keyname, &hkey2)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegSetValueW(hkey2, NULL, REG_SZ, pszClsidDevMon, (lstrlenW(pszClsidDevMon) + 1) * sizeof(WCHAR))
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (hkey2)
-    {
-        RegCloseKey(hkey2);
-        hkey2 = NULL;
-    }
-
-    if (hkey1)
-    {
-        RegCloseKey(hkey1);
-        hkey1 = NULL;
-    }
-
-    if (SUCCEEDED(res))
-    {
-        res = RegCreateKeyW(HKEY_CLASSES_ROOT, device_1, &hkey1)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegCreateKeyW(hkey1, clsid_keyname, &hkey2)
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-    if (SUCCEEDED(res))
-    {
-        res = RegSetValueW(hkey2, NULL, REG_SZ, pszClsidDevMon, (lstrlenW(pszClsidDevMon) + 1) * sizeof(WCHAR))
-             == ERROR_SUCCESS ? S_OK : E_FAIL;
-    }
-
-    if (hkey2)
-        RegCloseKey(hkey2);
-
-    if (hkey1)
-        RegCloseKey(hkey1);
-
-    if (hkeyClsid)
-        RegCloseKey(hkeyClsid);
-
-    CoTaskMemFree(pszClsidDevMon);
     CoUninitialize();
 
     return res;
@@ -289,77 +144,8 @@ HRESULT WINAPI DllRegisterServer(void)
  */
 HRESULT WINAPI DllUnregisterServer(void)
 {
-       FIXME("stub!\n");
-       return E_FAIL;
-}
-
-static HRESULT register_clsids(int count, const register_info * pRegInfo, LPCWSTR pszThreadingModel)
-{
-    HRESULT res = S_OK;
-    LPOLESTR clsidString = NULL;
-    HKEY hkeyClsid;
-    HKEY hkeySub;
-    HKEY hkeyInproc32;
-    HKEY hkeyInstance = NULL;
-    int i;
-    static const WCHAR wcszInproc32[] = {'I','n','p','r','o','c','S','e','r','v','e','r','3','2',0};
-    static const WCHAR wcszThreadingModel[] = {'T','h','r','e','a','d','i','n','g','M','o','d','e','l',0};
-    static const WCHAR dll_module[] = {'d','e','v','e','n','u','m','.','d','l','l',0};
-
-    res = RegOpenKeyW(HKEY_CLASSES_ROOT, clsid_keyname, &hkeyClsid)
-          == ERROR_SUCCESS ? S_OK : E_FAIL;
-
-    for (i = 0; i < count; i++)
-    {
-       hkeySub = 0;
-        if (SUCCEEDED(res))
-       {
-           res = StringFromCLSID(pRegInfo[i].clsid, &clsidString);
-       }
-       if (SUCCEEDED(res))
-       {
-           res = RegCreateKeyW(hkeyClsid, clsidString, &hkeySub)
-                 == ERROR_SUCCESS ? S_OK : E_FAIL;
-       }
-       if (pRegInfo[i].instance && SUCCEEDED(res))
-       {
-           res = RegCreateKeyW(hkeySub, wszInstanceKeyName, &hkeyInstance)
-                 == ERROR_SUCCESS ? S_OK : E_FAIL;
-            RegCloseKey(hkeyInstance);
-       }
-       if (SUCCEEDED(res))
-       {
-           RegSetValueW(hkeySub,
-                        NULL,
-                        REG_SZ,
-                        pRegInfo->friendly_name ? pRegInfo[i].friendly_name : clsidString,
-                        (lstrlenW(pRegInfo[i].friendly_name ? pRegInfo->friendly_name : clsidString) + 1) * sizeof(WCHAR));
-           res = RegCreateKeyW(hkeySub, wcszInproc32, &hkeyInproc32)
-                 == ERROR_SUCCESS ? S_OK : E_FAIL;
-       }
-       if (SUCCEEDED(res))
-       {
-           RegSetValueW(hkeyInproc32,
-                        NULL,
-                        REG_SZ,
-                        dll_module,
-                        (lstrlenW(dll_module) + 1) * sizeof(WCHAR));
-           RegSetValueExW(hkeyInproc32,
-                          wcszThreadingModel,
-                          0,
-                          REG_SZ,
-                          (LPCVOID)pszThreadingModel,
-                          (lstrlenW(pszThreadingModel) + 1) * sizeof(WCHAR));
-            RegCloseKey(hkeyInproc32);
-        }
-        if (hkeySub) RegCloseKey(hkeySub);
-       CoTaskMemFree(clsidString);
-       clsidString = NULL;
-    }
-
-    RegCloseKey(hkeyClsid);
-
-    return res;
+    FIXME("stub!\n");
+    return __wine_unregister_resources( DEVENUM_hInstance );
 }
 
 typedef HRESULT (WINAPI *DllRegisterServer_func)(void);
index d508cd2..5ad7cc3 100644 (file)
@@ -51,7 +51,7 @@
 /**********************************************************************
  * Dll lifetime tracking declaration for devenum.dll
  */
-extern LONG dll_refs;
+extern LONG dll_refs DECLSPEC_HIDDEN;
 static inline void DEVENUM_LockModule(void) { InterlockedIncrement(&dll_refs); }
 static inline void DEVENUM_UnlockModule(void) { InterlockedDecrement(&dll_refs); }
 
@@ -61,45 +61,27 @@ static inline void DEVENUM_UnlockModule(void) { InterlockedDecrement(&dll_refs);
  */
 typedef struct
 {
-    const IClassFactoryVtbl *lpVtbl;
+    IClassFactory IClassFactory_iface;
 } ClassFactoryImpl;
 
 typedef struct
 {
-    const ICreateDevEnumVtbl *lpVtbl;
-} CreateDevEnumImpl;
-
-typedef struct
-{
-    const IParseDisplayNameVtbl *lpVtbl;
-} ParseDisplayNameImpl;
-
-typedef struct
-{
-    const IEnumMonikerVtbl *lpVtbl;
-    LONG ref;
-    DWORD index;
-    HKEY hkey;
-} EnumMonikerImpl;
-
-typedef struct
-{
-    const IMonikerVtbl *lpVtbl;
+    IMoniker IMoniker_iface;
     LONG ref;
     HKEY hkey;
 } MediaCatMoniker;
 
-MediaCatMoniker * DEVENUM_IMediaCatMoniker_Construct(void);
-HRESULT DEVENUM_IEnumMoniker_Construct(HKEY hkey, IEnumMoniker ** ppEnumMoniker);
+MediaCatMoniker * DEVENUM_IMediaCatMoniker_Construct(void) DECLSPEC_HIDDEN;
+HRESULT DEVENUM_IEnumMoniker_Construct(HKEY hkey, IEnumMoniker ** ppEnumMoniker) DECLSPEC_HIDDEN;
 
-extern ClassFactoryImpl DEVENUM_ClassFactory;
-extern CreateDevEnumImpl DEVENUM_CreateDevEnum;
-extern ParseDisplayNameImpl DEVENUM_ParseDisplayName;
+extern ClassFactoryImpl DEVENUM_ClassFactory DECLSPEC_HIDDEN;
+extern ICreateDevEnum DEVENUM_CreateDevEnum DECLSPEC_HIDDEN;
+extern IParseDisplayName DEVENUM_ParseDisplayName DECLSPEC_HIDDEN;
 
 /**********************************************************************
  * Private helper function to get AM filter category key location
  */
-HRESULT DEVENUM_GetCategoryKey(REFCLSID clsidDeviceClass, HKEY *pBaseKey, WCHAR *wszRegKeyName, UINT maxLen);
+HRESULT DEVENUM_GetCategoryKey(REFCLSID clsidDeviceClass, HKEY *pBaseKey, WCHAR *wszRegKeyName, UINT maxLen) DECLSPEC_HIDDEN;
 
 /**********************************************************************
  * Global string constant declarations
index 29d86ee..7338e6d 100644 (file)
@@ -28,12 +28,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(devenum);
 /**********************************************************************
  * DEVENUM_IClassFactory_QueryInterface (also IUnknown)
  */
-static HRESULT WINAPI DEVENUM_IClassFactory_QueryInterface(
-    LPCLASSFACTORY iface,
-    REFIID riid,
-    LPVOID *ppvObj)
+static HRESULT WINAPI DEVENUM_IClassFactory_QueryInterface(IClassFactory *iface, REFIID riid,
+    void **ppvObj)
 {
-    TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppvObj);
 
     if (ppvObj == NULL) return E_POINTER;
 
@@ -56,7 +54,7 @@ static HRESULT WINAPI DEVENUM_IClassFactory_QueryInterface(
 /**********************************************************************
  * DEVENUM_IClassFactory_AddRef (also IUnknown)
  */
-static ULONG WINAPI DEVENUM_IClassFactory_AddRef(LPCLASSFACTORY iface)
+static ULONG WINAPI DEVENUM_IClassFactory_AddRef(IClassFactory *iface)
 {
     TRACE("\n");
 
@@ -68,7 +66,7 @@ static ULONG WINAPI DEVENUM_IClassFactory_AddRef(LPCLASSFACTORY iface)
 /**********************************************************************
  * DEVENUM_IClassFactory_Release (also IUnknown)
  */
-static ULONG WINAPI DEVENUM_IClassFactory_Release(LPCLASSFACTORY iface)
+static ULONG WINAPI DEVENUM_IClassFactory_Release(IClassFactory *iface)
 {
     TRACE("\n");
 
@@ -80,13 +78,10 @@ static ULONG WINAPI DEVENUM_IClassFactory_Release(LPCLASSFACTORY iface)
 /**********************************************************************
  * DEVENUM_IClassFactory_CreateInstance
  */
-static HRESULT WINAPI DEVENUM_IClassFactory_CreateInstance(
-    LPCLASSFACTORY iface,
-    LPUNKNOWN pUnkOuter,
-    REFIID riid,
-    LPVOID *ppvObj)
+static HRESULT WINAPI DEVENUM_IClassFactory_CreateInstance(IClassFactory *iface,
+        IUnknown *pUnkOuter, REFIID riid, void **ppvObj)
 {
-    TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+    TRACE("(%p)->(%p, %s, %p)\n", iface, pUnkOuter, debugstr_guid(riid), ppvObj);
 
     if (ppvObj == NULL) return E_POINTER;
 
@@ -110,9 +105,7 @@ static HRESULT WINAPI DEVENUM_IClassFactory_CreateInstance(
 /**********************************************************************
  * DEVENUM_IClassFactory_LockServer
  */
-static HRESULT WINAPI DEVENUM_IClassFactory_LockServer(
-    LPCLASSFACTORY iface,
-    BOOL fLock)
+static HRESULT WINAPI DEVENUM_IClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
 {
     TRACE("\n");
 
@@ -138,4 +131,4 @@ static const IClassFactoryVtbl IClassFactory_Vtbl =
 /**********************************************************************
  * static ClassFactory instance
  */
-ClassFactoryImpl DEVENUM_ClassFactory = { &IClassFactory_Vtbl };
+ClassFactoryImpl DEVENUM_ClassFactory = { { &IClassFactory_Vtbl } };
index c360684..6076e43 100644 (file)
 
 WINE_DEFAULT_DEBUG_CHANNEL(devenum);
 
-static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(LPENUMMONIKER iface);
-static ULONG WINAPI DEVENUM_IMediaCatMoniker_AddRef(LPMONIKER iface);
-static ULONG WINAPI DEVENUM_IPropertyBag_AddRef(LPPROPERTYBAG iface);
+typedef struct
+{
+    IEnumMoniker IEnumMoniker_iface;
+    LONG ref;
+    DWORD index;
+    HKEY hkey;
+} EnumMonikerImpl;
 
 typedef struct
 {
-    const IPropertyBagVtbl *lpVtbl;
+    IPropertyBag IPropertyBag_iface;
     LONG ref;
     HKEY hkey;
 } RegPropBagImpl;
 
 
+static inline RegPropBagImpl *impl_from_IPropertyBag(IPropertyBag *iface)
+{
+    return CONTAINING_RECORD(iface, RegPropBagImpl, IPropertyBag_iface);
+}
+
 static HRESULT WINAPI DEVENUM_IPropertyBag_QueryInterface(
     LPPROPERTYBAG iface,
     REFIID riid,
     LPVOID *ppvObj)
 {
-    RegPropBagImpl *This = (RegPropBagImpl *)iface;
+    RegPropBagImpl *This = impl_from_IPropertyBag(iface);
 
     TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppvObj);
 
@@ -57,7 +66,7 @@ static HRESULT WINAPI DEVENUM_IPropertyBag_QueryInterface(
         IsEqualGUID(riid, &IID_IPropertyBag))
     {
         *ppvObj = iface;
-        DEVENUM_IPropertyBag_AddRef(iface);
+        IPropertyBag_AddRef(iface);
         return S_OK;
     }
 
@@ -70,7 +79,7 @@ static HRESULT WINAPI DEVENUM_IPropertyBag_QueryInterface(
  */
 static ULONG WINAPI DEVENUM_IPropertyBag_AddRef(LPPROPERTYBAG iface)
 {
-    RegPropBagImpl *This = (RegPropBagImpl *)iface;
+    RegPropBagImpl *This = impl_from_IPropertyBag(iface);
 
     TRACE("(%p)->() AddRef from %d\n", iface, This->ref);
 
@@ -82,7 +91,7 @@ static ULONG WINAPI DEVENUM_IPropertyBag_AddRef(LPPROPERTYBAG iface)
  */
 static ULONG WINAPI DEVENUM_IPropertyBag_Release(LPPROPERTYBAG iface)
 {
-    RegPropBagImpl *This = (RegPropBagImpl *)iface;
+    RegPropBagImpl *This = impl_from_IPropertyBag(iface);
     ULONG ref;
 
     TRACE("(%p)->() ReleaseThis->ref from %d\n", iface, This->ref);
@@ -105,7 +114,7 @@ static HRESULT WINAPI DEVENUM_IPropertyBag_Read(
     LPVOID pData = NULL;
     DWORD received;
     DWORD type = 0;
-    RegPropBagImpl *This = (RegPropBagImpl *)iface;
+    RegPropBagImpl *This = impl_from_IPropertyBag(iface);
     HRESULT res = S_OK;
     LONG reswin32;
 
@@ -212,7 +221,7 @@ static HRESULT WINAPI DEVENUM_IPropertyBag_Write(
     LPCOLESTR pszPropName,
     VARIANT* pVar)
 {
-    RegPropBagImpl *This = (RegPropBagImpl *)iface;
+    RegPropBagImpl *This = impl_from_IPropertyBag(iface);
     LPVOID lpData = NULL;
     DWORD cbData = 0;
     DWORD dwType = 0;
@@ -223,6 +232,7 @@ static HRESULT WINAPI DEVENUM_IPropertyBag_Write(
     switch (V_VT(pVar))
     {
     case VT_BSTR:
+    case VT_LPWSTR:
         TRACE("writing %s\n", debugstr_w(V_UNION(pVar, bstrVal)));
         lpData = V_UNION(pVar, bstrVal);
         dwType = REG_SZ;
@@ -277,62 +287,60 @@ static HRESULT DEVENUM_IPropertyBag_Construct(HANDLE hkey, IPropertyBag **ppBag)
     RegPropBagImpl * rpb = CoTaskMemAlloc(sizeof(RegPropBagImpl));
     if (!rpb)
         return E_OUTOFMEMORY;
-    rpb->lpVtbl = &IPropertyBag_Vtbl;
+    rpb->IPropertyBag_iface.lpVtbl = &IPropertyBag_Vtbl;
     rpb->ref = 1;
     rpb->hkey = hkey;
-    *ppBag = (IPropertyBag*)rpb;
+    *ppBag = &rpb->IPropertyBag_iface;
     DEVENUM_LockModule();
     return S_OK;
 }
 
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_QueryInterface(
-    LPMONIKER iface,
-    REFIID riid,
-    LPVOID *ppvObj)
+static inline MediaCatMoniker *impl_from_IMoniker(IMoniker *iface)
 {
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
-    TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+    return CONTAINING_RECORD(iface, MediaCatMoniker, IMoniker_iface);
+}
 
-    if (This == NULL || ppvObj == NULL) return E_POINTER;
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_QueryInterface(IMoniker *iface, REFIID riid,
+        void **ppv)
+{
+    TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
 
-    *ppvObj = NULL;
+    if (!ppv)
+        return E_POINTER;
 
     if (IsEqualGUID(riid, &IID_IUnknown) ||
         IsEqualGUID(riid, &IID_IPersist) ||
         IsEqualGUID(riid, &IID_IPersistStream) ||
         IsEqualGUID(riid, &IID_IMoniker))
     {
-        *ppvObj = iface;
-        DEVENUM_IMediaCatMoniker_AddRef(iface);
+        *ppv = iface;
+        IMoniker_AddRef(iface);
         return S_OK;
     }
 
     FIXME("- no interface IID: %s\n", debugstr_guid(riid));
+    *ppv = NULL;
     return E_NOINTERFACE;
 }
 
-/**********************************************************************
- * DEVENUM_IMediaCatMoniker_AddRef (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IMediaCatMoniker_AddRef(LPMONIKER iface)
+static ULONG WINAPI DEVENUM_IMediaCatMoniker_AddRef(IMoniker *iface)
 {
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
-    TRACE("\n");
+    MediaCatMoniker *This = impl_from_IMoniker(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
 
-    return InterlockedIncrement(&This->ref);
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    return ref;
 }
 
-/**********************************************************************
- * DEVENUM_IMediaCatMoniker_Release (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IMediaCatMoniker_Release(LPMONIKER iface)
+static ULONG WINAPI DEVENUM_IMediaCatMoniker_Release(IMoniker *iface)
 {
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
-    ULONG ref;
-    TRACE("\n");
+    MediaCatMoniker *This = impl_from_IMoniker(iface);
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
 
-    ref = InterlockedDecrement(&This->ref);
     if (ref == 0) {
         RegCloseKey(This->hkey);
         CoTaskMemFree(This);
@@ -341,11 +349,10 @@ static ULONG WINAPI DEVENUM_IMediaCatMoniker_Release(LPMONIKER iface)
     return ref;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetClassID(
-    LPMONIKER iface,
-    CLSID* pClassID)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetClassID(IMoniker *iface, CLSID *pClassID)
 {
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
+    MediaCatMoniker *This = impl_from_IMoniker(iface);
+
     FIXME("(%p)->(%p): stub\n", This, pClassID);
 
     if (pClassID == NULL)
@@ -354,30 +361,28 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetClassID(
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsDirty(LPMONIKER iface)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsDirty(IMoniker *iface)
 {
     FIXME("(%p)->(): stub\n", iface);
 
     return S_FALSE;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Load(LPMONIKER iface, IStream* pStm)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Load(IMoniker *iface, IStream *pStm)
 {
     FIXME("(%p)->(%p): stub\n", iface, pStm);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Save(LPMONIKER iface, IStream* pStm, BOOL fClearDirty)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Save(IMoniker *iface, IStream *pStm, BOOL fClearDirty)
 {
     FIXME("(%p)->(%p, %s): stub\n", iface, pStm, fClearDirty ? "true" : "false");
 
     return STG_E_CANTSAVE;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetSizeMax(
-    LPMONIKER iface,
-    ULARGE_INTEGER* pcbSize)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetSizeMax(IMoniker *iface, ULARGE_INTEGER *pcbSize)
 {
     FIXME("(%p)->(%p): stub\n", iface, pcbSize);
 
@@ -386,25 +391,19 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetSizeMax(
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_BindToObject(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    IMoniker* pmkToLeft,
-    REFIID riidResult,
-    void** ppvResult)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_BindToObject(IMoniker *iface, IBindCtx *pbc,
+        IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult)
 {
+    MediaCatMoniker *This = impl_from_IMoniker(iface);
     IUnknown * pObj = NULL;
     IPropertyBag * pProp = NULL;
     CLSID clsID;
     VARIANT var;
     HRESULT res = E_FAIL;
 
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
-
-    VariantInit(&var);
-
     TRACE("(%p)->(%p, %p, %s, %p)\n", This, pbc, pmkToLeft, debugstr_guid(riidResult), ppvResult);
 
+    VariantInit(&var);
     *ppvResult = NULL;
 
     if(pmkToLeft==NULL)
@@ -458,21 +457,28 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_BindToObject(
     return res;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_BindToStorage(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    IMoniker* pmkToLeft,
-    REFIID riid,
-    void** ppvObj)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_BindToStorage(IMoniker *iface, IBindCtx *pbc,
+        IMoniker *pmkToLeft, REFIID riid, void **ppvObj)
 {
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
+    MediaCatMoniker *This = impl_from_IMoniker(iface);
+
     TRACE("(%p)->(%p, %p, %s, %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj);
 
     *ppvObj = NULL;
 
-    if (pbc || pmkToLeft)
+    if (pmkToLeft)
         return MK_E_NOSTORAGE;
 
+    if (pbc != NULL)
+    {
+        static DWORD reported;
+        if (!reported)
+        {
+            FIXME("ignoring IBindCtx %p\n", pbc);
+            reported++;
+        }
+    }
+
     if (IsEqualGUID(riid, &IID_IPropertyBag))
     {
         HANDLE hkey;
@@ -483,12 +489,8 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_BindToStorage(
     return MK_E_NOSTORAGE;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Reduce(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    DWORD dwReduceHowFar,
-    IMoniker** ppmkToLeft,
-    IMoniker** ppmkReduced)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Reduce(IMoniker *iface, IBindCtx *pbc,
+        DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced)
 {
     TRACE("(%p)->(%p, %d, %p, %p)\n", iface, pbc, dwReduceHowFar, ppmkToLeft, ppmkReduced);
 
@@ -499,11 +501,8 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Reduce(
     return MK_S_REDUCED_TO_SELF;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_ComposeWith(
-    LPMONIKER iface,
-    IMoniker* pmkRight,
-    BOOL fOnlyIfNotGeneric,
-    IMoniker** ppmkComposite)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_ComposeWith(IMoniker *iface, IMoniker *pmkRight,
+        BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite)
 {
     FIXME("(%p)->(%p, %s, %p): stub\n", iface, pmkRight, fOnlyIfNotGeneric ? "true" : "false", ppmkComposite);
 
@@ -513,10 +512,8 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_ComposeWith(
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Enum(
-    LPMONIKER iface,
-    BOOL fForward,
-    IEnumMoniker** ppenumMoniker)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Enum(IMoniker *iface, BOOL fForward,
+        IEnumMoniker **ppenumMoniker)
 {
     FIXME("(%p)->(%s, %p): stub\n", iface, fForward ? "true" : "false", ppenumMoniker);
 
@@ -525,18 +522,14 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Enum(
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsEqual(
-    LPMONIKER iface,
-    IMoniker* pmkOtherMoniker)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsEqual(IMoniker *iface, IMoniker *pmkOtherMoniker)
 {
     FIXME("(%p)->(%p): stub\n", iface, pmkOtherMoniker);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Hash(
-    LPMONIKER iface,
-    DWORD* pdwHash)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Hash(IMoniker *iface, DWORD *pdwHash)
 {
     TRACE("(%p)->(%p)\n", iface, pdwHash);
 
@@ -545,22 +538,16 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Hash(
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsRunning(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    IMoniker* pmkToLeft,
-    IMoniker* pmkNewlyRunning)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsRunning(IMoniker *iface, IBindCtx *pbc,
+        IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning)
 {
     FIXME("(%p)->(%p, %p, %p): stub\n", iface, pbc, pmkToLeft, pmkNewlyRunning);
 
     return S_FALSE;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetTimeOfLastChange(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    IMoniker* pmkToLeft,
-    FILETIME* pFileTime)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetTimeOfLastChange(IMoniker *iface, IBindCtx *pbc,
+        IMoniker *pmkToLeft, FILETIME *pFileTime)
 {
     TRACE("(%p)->(%p, %p, %p)\n", iface, pbc, pmkToLeft, pFileTime);
 
@@ -570,9 +557,7 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetTimeOfLastChange(
     return MK_E_UNAVAILABLE;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Inverse(
-    LPMONIKER iface,
-    IMoniker** ppmk)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Inverse(IMoniker *iface, IMoniker **ppmk)
 {
     TRACE("(%p)->(%p)\n", iface, ppmk);
 
@@ -581,10 +566,8 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_Inverse(
     return MK_E_NOINVERSE;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_CommonPrefixWith(
-    LPMONIKER iface,
-    IMoniker* pmkOtherMoniker,
-    IMoniker** ppmkPrefix)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_CommonPrefixWith(IMoniker *iface,
+        IMoniker *pmkOtherMoniker, IMoniker **ppmkPrefix)
 {
     TRACE("(%p)->(%p, %p)\n", iface, pmkOtherMoniker, ppmkPrefix);
 
@@ -593,10 +576,8 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_CommonPrefixWith(
     return MK_E_NOPREFIX;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_RelativePathTo(
-    LPMONIKER iface,
-    IMoniker* pmkOther,
-    IMoniker** ppmkRelPath)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_RelativePathTo(IMoniker *iface, IMoniker *pmkOther,
+        IMoniker **ppmkRelPath)
 {
     TRACE("(%p)->(%p, %p)\n", iface, pmkOther, ppmkRelPath);
 
@@ -605,13 +586,10 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_RelativePathTo(
     return MK_S_HIM;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetDisplayName(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    IMoniker* pmkToLeft,
-    LPOLESTR* ppszDisplayName)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc,
+        IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName)
 {
-    MediaCatMoniker *This = (MediaCatMoniker *)iface;
+    MediaCatMoniker *This = impl_from_IMoniker(iface);
     WCHAR wszBuffer[MAX_PATH];
     static const WCHAR wszFriendlyName[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0};
     LONG received = sizeof(wszFriendlyName);
@@ -631,13 +609,8 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_GetDisplayName(
     return E_FAIL;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_ParseDisplayName(
-    LPMONIKER iface,
-    IBindCtx* pbc,
-    IMoniker* pmkToLeft,
-    LPOLESTR pszDisplayName,
-    ULONG* pchEaten,
-    IMoniker** ppmkOut)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_ParseDisplayName(IMoniker *iface, IBindCtx *pbc,
+        IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
 {
     FIXME("(%p)->(%p, %p, %s, %p, %p)\n", iface, pbc, pmkToLeft, debugstr_w(pszDisplayName), pchEaten, ppmkOut);
 
@@ -647,9 +620,7 @@ static HRESULT WINAPI DEVENUM_IMediaCatMoniker_ParseDisplayName(
     return MK_E_SYNTAX;
 }
 
-static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsSystemMoniker(
-    LPMONIKER iface,
-    DWORD* pdwMksys)
+static HRESULT WINAPI DEVENUM_IMediaCatMoniker_IsSystemMoniker(IMoniker *iface, DWORD *pdwMksys)
 {
     TRACE("(%p)->(%p)\n", iface, pdwMksys);
 
@@ -690,65 +661,59 @@ MediaCatMoniker * DEVENUM_IMediaCatMoniker_Construct(void)
     if (!pMoniker)
         return NULL;
 
-    pMoniker->lpVtbl = &IMoniker_Vtbl;
+    pMoniker->IMoniker_iface.lpVtbl = &IMoniker_Vtbl;
     pMoniker->ref = 0;
     pMoniker->hkey = NULL;
 
-    DEVENUM_IMediaCatMoniker_AddRef((LPMONIKER)pMoniker);
+    DEVENUM_IMediaCatMoniker_AddRef(&pMoniker->IMoniker_iface);
 
     DEVENUM_LockModule();
 
     return pMoniker;
 }
 
-/**********************************************************************
- * DEVENUM_IEnumMoniker_QueryInterface (also IUnknown)
- */
-static HRESULT WINAPI DEVENUM_IEnumMoniker_QueryInterface(
-    LPENUMMONIKER iface,
-    REFIID riid,
-    LPVOID *ppvObj)
+static inline EnumMonikerImpl *impl_from_IEnumMoniker(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    return CONTAINING_RECORD(iface, EnumMonikerImpl, IEnumMoniker_iface);
+}
 
-    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppvObj);
+static HRESULT WINAPI DEVENUM_IEnumMoniker_QueryInterface(IEnumMoniker *iface, REFIID riid,
+        void **ppv)
+{
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppv);
 
-    if (This == NULL || ppvObj == NULL) return E_POINTER;
+    if (!ppv)
+        return E_POINTER;
 
     if (IsEqualGUID(riid, &IID_IUnknown) ||
         IsEqualGUID(riid, &IID_IEnumMoniker))
     {
-        *ppvObj = iface;
-        DEVENUM_IEnumMoniker_AddRef(iface);
+        *ppv = iface;
+        IEnumMoniker_AddRef(iface);
         return S_OK;
     }
 
     FIXME("- no interface IID: %s\n", debugstr_guid(riid));
+    *ppv = NULL;
     return E_NOINTERFACE;
 }
 
-/**********************************************************************
- * DEVENUM_IEnumMoniker_AddRef (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(LPENUMMONIKER iface)
+static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     ULONG ref = InterlockedIncrement(&This->ref);
 
-    TRACE("(%p)->() AddRef from %d\n", iface, ref - 1);
+    TRACE("(%p) ref=%d\n", This, ref);
 
     return ref;
 }
 
-/**********************************************************************
- * DEVENUM_IEnumMoniker_Release (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IEnumMoniker_Release(LPENUMMONIKER iface)
+static ULONG WINAPI DEVENUM_IEnumMoniker_Release(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     ULONG ref = InterlockedDecrement(&This->ref);
 
-    TRACE("(%p)->() Release from %d\n", iface, ref + 1);
+    TRACE("(%p) ref=%d\n", This, ref);
 
     if (!ref)
     {
@@ -760,13 +725,14 @@ static ULONG WINAPI DEVENUM_IEnumMoniker_Release(LPENUMMONIKER iface)
     return ref;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt, IMoniker ** rgelt, ULONG * pceltFetched)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(IEnumMoniker *iface, ULONG celt, IMoniker **rgelt,
+        ULONG *pceltFetched)
 {
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     WCHAR buffer[MAX_PATH + 1];
     LONG res;
     ULONG fetched = 0;
     MediaCatMoniker * pMoniker;
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
 
     TRACE("(%p)->(%d, %p, %p)\n", iface, celt, rgelt, pceltFetched);
 
@@ -783,10 +749,10 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt,
 
         if (RegOpenKeyW(This->hkey, buffer, &pMoniker->hkey) != ERROR_SUCCESS)
         {
-            DEVENUM_IMediaCatMoniker_Release((LPMONIKER)pMoniker);
+            IMoniker_Release(&pMoniker->IMoniker_iface);
             break;
         }
-        rgelt[fetched] = (LPMONIKER)pMoniker;
+        rgelt[fetched] = &pMoniker->IMoniker_iface;
         fetched++;
     }
 
@@ -803,15 +769,15 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt,
         return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(LPENUMMONIKER iface, ULONG celt)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(IEnumMoniker *iface, ULONG celt)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
     DWORD subKeys;
 
     TRACE("(%p)->(%d)\n", iface, celt);
 
-    /* Before incrementing, check if there are any more values to run thru.
-       Some programs use the Skip() function to get the amount of devices */
+    /* Before incrementing, check if there are any more values to run through.
+       Some programs use the Skip() function to get the number of devices */
     if(RegQueryInfoKeyW(This->hkey, NULL, NULL, NULL, &subKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
     {
         return S_FALSE;
@@ -826,9 +792,9 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(LPENUMMONIKER iface, ULONG celt)
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(LPENUMMONIKER iface)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(IEnumMoniker *iface)
 {
-    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
 
     TRACE("(%p)->()\n", iface);
 
@@ -837,7 +803,7 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(LPENUMMONIKER iface)
     return S_OK;
 }
 
-static HRESULT WINAPI DEVENUM_IEnumMoniker_Clone(LPENUMMONIKER iface, IEnumMoniker ** ppenum)
+static HRESULT WINAPI DEVENUM_IEnumMoniker_Clone(IEnumMoniker *iface, IEnumMoniker **ppenum)
 {
     FIXME("(%p)->(%p): stub\n", iface, ppenum);
 
@@ -864,12 +830,12 @@ HRESULT DEVENUM_IEnumMoniker_Construct(HKEY hkey, IEnumMoniker ** ppEnumMoniker)
     if (!pEnumMoniker)
         return E_OUTOFMEMORY;
 
-    pEnumMoniker->lpVtbl = &IEnumMoniker_Vtbl;
+    pEnumMoniker->IEnumMoniker_iface.lpVtbl = &IEnumMoniker_Vtbl;
     pEnumMoniker->ref = 1;
     pEnumMoniker->index = 0;
     pEnumMoniker->hkey = hkey;
 
-    *ppEnumMoniker = (IEnumMoniker *)pEnumMoniker;
+    *ppEnumMoniker = &pEnumMoniker->IEnumMoniker_iface;
 
     DEVENUM_LockModule();
 
index 05db97e..cb7ab07 100644 (file)
 
 WINE_DEFAULT_DEBUG_CHANNEL(devenum);
 
-static HRESULT WINAPI DEVENUM_IParseDisplayName_QueryInterface(
-    LPPARSEDISPLAYNAME iface,
-    REFIID riid,
-    LPVOID *ppvObj)
+static HRESULT WINAPI DEVENUM_IParseDisplayName_QueryInterface(IParseDisplayName *iface,
+        REFIID riid, void **ppv)
 {
     TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
 
-    if (ppvObj == NULL) return E_POINTER;
+    if (!ppv)
+        return E_POINTER;
 
     if (IsEqualGUID(riid, &IID_IUnknown) ||
         IsEqualGUID(riid, &IID_IParseDisplayName))
     {
-        *ppvObj = iface;
-       IParseDisplayName_AddRef(iface);
-       return S_OK;
+        *ppv = iface;
+        IParseDisplayName_AddRef(iface);
+        return S_OK;
     }
 
     FIXME("- no interface IID: %s\n", debugstr_guid(riid));
+    *ppv = NULL;
     return E_NOINTERFACE;
 }
 
-/**********************************************************************
- * DEVENUM_IParseDisplayName_AddRef (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IParseDisplayName_AddRef(LPPARSEDISPLAYNAME iface)
+static ULONG WINAPI DEVENUM_IParseDisplayName_AddRef(IParseDisplayName *iface)
 {
     TRACE("\n");
 
@@ -60,10 +57,7 @@ static ULONG WINAPI DEVENUM_IParseDisplayName_AddRef(LPPARSEDISPLAYNAME iface)
     return 2; /* non-heap based object */
 }
 
-/**********************************************************************
- * DEVENUM_IParseDisplayName_Release (also IUnknown)
- */
-static ULONG WINAPI DEVENUM_IParseDisplayName_Release(LPPARSEDISPLAYNAME iface)
+static ULONG WINAPI DEVENUM_IParseDisplayName_Release(IParseDisplayName *iface)
 {
     TRACE("\n");
 
@@ -81,12 +75,8 @@ static ULONG WINAPI DEVENUM_IParseDisplayName_Release(LPPARSEDISPLAYNAME iface)
  *  Might not handle more complicated strings properly (ie anything
  *  not in "@device:sw:{CLSID1}\<filter name or CLSID>" format
  */
-static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(
-    LPPARSEDISPLAYNAME iface,
-    IBindCtx *pbc,
-    LPOLESTR pszDisplayName,
-    ULONG *pchEaten,
-    IMoniker **ppmkOut)
+static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(IParseDisplayName *iface,
+        IBindCtx *pbc, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
 {
     LPOLESTR pszBetween = NULL;
     LPOLESTR pszClass = NULL;
@@ -136,10 +126,10 @@ static HRESULT WINAPI DEVENUM_IParseDisplayName_ParseDisplayName(
             strcatW(wszRegKeyName, pszBetween);
 
             if (RegCreateKeyW(hbasekey, wszRegKeyName, &pMoniker->hkey) == ERROR_SUCCESS)
-                *ppmkOut = (LPMONIKER)pMoniker;
+                *ppmkOut = &pMoniker->IMoniker_iface;
             else
             {
-                IMoniker_Release((LPMONIKER)pMoniker);
+                IMoniker_Release(&pMoniker->IMoniker_iface);
                 res = MK_E_NOOBJECT;
             }
         }
@@ -163,4 +153,4 @@ static const IParseDisplayNameVtbl IParseDisplayName_Vtbl =
 };
 
 /* The one instance of this class */
-ParseDisplayNameImpl DEVENUM_ParseDisplayName = { &IParseDisplayName_Vtbl };
+IParseDisplayName DEVENUM_ParseDisplayName = { &IParseDisplayName_Vtbl };
index 27caedb..7bbf79d 100644 (file)
@@ -34,6 +34,7 @@ reactos/dll/directx/wine/d3dcompiler_43 # Synced to Wine-1.7.1
 reactos/dll/directx/wine/d3dx9_24 => 43 # Synced to Wine-1.7.1
 reactos/dll/directx/wine/d3dxof         # Synced to Wine-1.7.1
 reactos/dll/directx/wine/ddraw          # Synced to Wine-1.7.1
+reactos/dll/directx/wine/devenum        # Synced to Wine-1.7.1
 reactos/dll/directx/wine/dinput         # Synced to Wine-1.7.1
 reactos/dll/directx/wine/dinput8        # Synced to Wine-1.5.26
 reactos/dll/directx/wine/dmusic         # Synced to Wine-1.5.26