[PATCH] wbemdisp: Use pointer moniker instead of custom moniker implementation.

Dmitry Timoshkov dmitry at baikal.ru
Sun Mar 8 21:58:37 CDT 2020


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/wbemdisp/main.c           | 246 +--------------------------------
 dlls/wbemdisp/tests/wbemdisp.c |  15 ++
 2 files changed, 17 insertions(+), 244 deletions(-)

diff --git a/dlls/wbemdisp/main.c b/dlls/wbemdisp/main.c
index b921e490fa..b3ee4de30c 100644
--- a/dlls/wbemdisp/main.c
+++ b/dlls/wbemdisp/main.c
@@ -36,248 +36,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(wbemdisp);
 
 static HINSTANCE instance;
 
-struct moniker
-{
-    IMoniker IMoniker_iface;
-    LONG refs;
-    IUnknown *obj;
-};
-
-static inline struct moniker *impl_from_IMoniker(
-    IMoniker *iface )
-{
-    return CONTAINING_RECORD( iface, struct moniker, IMoniker_iface );
-}
-
-static ULONG WINAPI moniker_AddRef(
-    IMoniker *iface )
-{
-    struct moniker *moniker = impl_from_IMoniker( iface );
-    return InterlockedIncrement( &moniker->refs );
-}
-
-static ULONG WINAPI moniker_Release(
-    IMoniker *iface )
-{
-    struct moniker *moniker = impl_from_IMoniker( iface );
-    LONG refs = InterlockedDecrement( &moniker->refs );
-    if (!refs)
-    {
-        TRACE( "destroying %p\n", moniker );
-        IUnknown_Release( moniker->obj );
-        heap_free( moniker );
-    }
-    return refs;
-}
-
-static HRESULT WINAPI moniker_QueryInterface(
-    IMoniker *iface, REFIID riid, void **ppvObject )
-{
-    struct moniker *moniker = impl_from_IMoniker( iface );
-
-    TRACE( "%p, %s, %p\n", moniker, debugstr_guid( riid ), ppvObject );
-
-    if (IsEqualGUID( riid, &IID_IMoniker ) ||
-        IsEqualGUID( riid, &IID_IUnknown ))
-    {
-        *ppvObject = iface;
-    }
-    else
-    {
-        FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
-        return E_NOINTERFACE;
-    }
-    IMoniker_AddRef( iface );
-    return S_OK;
-}
-
-static HRESULT WINAPI moniker_GetClassID(
-    IMoniker *iface, CLSID *pClassID )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_IsDirty(
-    IMoniker *iface )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_Load(
-    IMoniker *iface, IStream *pStm )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_Save(
-    IMoniker *iface, IStream *pStm, BOOL fClearDirty )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_GetSizeMax(
-    IMoniker *iface, ULARGE_INTEGER *pcbSize )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_BindToObject(
-    IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult )
-{
-    struct moniker *moniker = impl_from_IMoniker( iface );
-
-    TRACE( "%p, %p, %p, %s, %p\n", iface, pbc, pmkToLeft, debugstr_guid(riidResult), ppvResult );
-    return IUnknown_QueryInterface( moniker->obj, riidResult, ppvResult );
-}
-
-static HRESULT WINAPI moniker_BindToStorage(
-    IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_Reduce(
-    IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_ComposeWith(
-    IMoniker *iface, IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_Enum(
-    IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_IsEqual(
-    IMoniker *iface, IMoniker *pmkOtherMoniker )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_Hash(
-    IMoniker *iface, DWORD *pdwHash )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_IsRunning(
-    IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_GetTimeOfLastChange(
-    IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_Inverse(
-    IMoniker *iface, IMoniker **ppmk )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_CommonPrefixWith(
-    IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_RelativePathTo(
-    IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkRelPath )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_GetDisplayName(
-    IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_ParseDisplayName(
-    IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten,
-    IMoniker **ppmkOut )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI moniker_IsSystemMoniker(
-    IMoniker *iface, DWORD *pdwMksys )
-{
-    FIXME( "\n" );
-    return E_NOTIMPL;
-}
-
-static const IMonikerVtbl moniker_vtbl =
-{
-    moniker_QueryInterface,
-    moniker_AddRef,
-    moniker_Release,
-    moniker_GetClassID,
-    moniker_IsDirty,
-    moniker_Load,
-    moniker_Save,
-    moniker_GetSizeMax,
-    moniker_BindToObject,
-    moniker_BindToStorage,
-    moniker_Reduce,
-    moniker_ComposeWith,
-    moniker_Enum,
-    moniker_IsEqual,
-    moniker_Hash,
-    moniker_IsRunning,
-    moniker_GetTimeOfLastChange,
-    moniker_Inverse,
-    moniker_CommonPrefixWith,
-    moniker_RelativePathTo,
-    moniker_GetDisplayName,
-    moniker_ParseDisplayName,
-    moniker_IsSystemMoniker
-};
-
-static HRESULT Moniker_create( IUnknown *unk, IMoniker **obj )
-{
-    struct moniker *moniker;
-
-    TRACE( "%p, %p\n", unk, obj );
-
-    if (!(moniker = heap_alloc( sizeof(*moniker) ))) return E_OUTOFMEMORY;
-    moniker->IMoniker_iface.lpVtbl = &moniker_vtbl;
-    moniker->refs = 1;
-    moniker->obj = unk;
-    IUnknown_AddRef( moniker->obj );
-
-    *obj = &moniker->IMoniker_iface;
-    TRACE( "returning iface %p\n", *obj );
-    return S_OK;
-}
-
 static HRESULT WINAPI WinMGMTS_QueryInterface(IParseDisplayName *iface, REFIID riid, void **ppv)
 {
     if(IsEqualGUID(riid, &IID_IUnknown)) {
@@ -401,12 +159,12 @@ static HRESULT WINAPI WinMGMTS_ParseDisplayName(IParseDisplayName *iface, IBindC
     hr = ISWbemLocator_ConnectServer( locator, server, namespace, NULL, NULL, NULL, NULL, 0, NULL, &services );
     if (hr != S_OK) goto done;
 
-    if (!relative || !*relative) Moniker_create( (IUnknown *)services, ppmkOut );
+    if (!relative || !*relative) CreatePointerMoniker( (IUnknown *)services, ppmkOut );
     else
     {
         hr = ISWbemServices_Get( services, relative, 0, NULL, &obj );
         if (hr != S_OK) goto done;
-        hr = Moniker_create( (IUnknown *)obj, ppmkOut );
+        hr = CreatePointerMoniker( (IUnknown *)obj, ppmkOut );
     }
 
 done:
diff --git a/dlls/wbemdisp/tests/wbemdisp.c b/dlls/wbemdisp/tests/wbemdisp.c
index 57baf848cc..2bca6f9da6 100644
--- a/dlls/wbemdisp/tests/wbemdisp.c
+++ b/dlls/wbemdisp/tests/wbemdisp.c
@@ -28,6 +28,7 @@
 
 DEFINE_GUID(CLSID_WINMGMTS,0x172bddf8,0xceea,0x11d1,0x8b,0x05,0x00,0x60,0x08,0x06,0xd9,0xb6);
 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+DEFINE_OLEGUID(CLSID_PointerMoniker,0x306,0,0);
 
 static const LCID english = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
 
@@ -73,6 +74,7 @@ static void test_ParseDisplayName(void)
     BSTR str;
     ULONG i, eaten, count;
     HRESULT hr;
+    CLSID clsid;
 
     hr = CoCreateInstance( &CLSID_WINMGMTS, NULL, CLSCTX_INPROC_SERVER, &IID_IParseDisplayName, (void **)&displayname );
     if (hr != S_OK)
@@ -95,6 +97,10 @@ static void test_ParseDisplayName(void)
         ok( eaten == tests[i].eaten, "%u: got %u\n", i, eaten );
         if (moniker)
         {
+            hr = IMoniker_GetClassID( moniker, &clsid );
+            ok( hr == S_OK, "%u: got %x\n", i, hr );
+            ok( IsEqualCLSID( &clsid, &CLSID_PointerMoniker ), "%u: got %s\n", i, wine_dbgstr_guid( &clsid ) );
+
             obj = NULL;
             hr = IMoniker_BindToObject( moniker, ctx, NULL, tests[i].iid, (void **)&obj );
             ok( hr == S_OK, "%u: got %x\n", i, hr );
@@ -114,6 +120,10 @@ static void test_ParseDisplayName(void)
     {
         ISWbemServices *services = NULL;
 
+        hr = IMoniker_GetClassID( moniker, &clsid );
+        ok( hr == S_OK, "%u: got %x\n", i, hr );
+        ok( IsEqualCLSID( &clsid, &CLSID_PointerMoniker ), "got %s\n", wine_dbgstr_guid( &clsid ) );
+
         hr = IMoniker_BindToObject( moniker, ctx, NULL, &IID_IUnknown, (void **)&services );
         ok( hr == S_OK, "got %x\n", hr );
         if (services)
@@ -259,6 +269,11 @@ static void test_ParseDisplayName(void)
     if (moniker)
     {
         ISWbemObject *sobj = NULL;
+
+        hr = IMoniker_GetClassID( moniker, &clsid );
+        ok( hr == S_OK, "%u: got %x\n", i, hr );
+        ok( IsEqualCLSID( &clsid, &CLSID_PointerMoniker ), "got %s\n", wine_dbgstr_guid( &clsid ) );
+
         hr = IMoniker_BindToObject( moniker, ctx, NULL, &IID_ISWbemObject, (void **)&sobj );
         ok( hr == S_OK, "got %x\n",hr );
         if (sobj)
-- 
2.20.1




More information about the wine-devel mailing list