From 5d0dc7b5882f873fd9c81adf42140984677d4147 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 23 Mar 2013 10:35:27 +0000 Subject: [PATCH] [OLE32] * Sync with Wine 1.5.26. svn path=/trunk/; revision=58586 --- reactos/dll/win32/ole32/compobj.c | 150 +++++++++++---------- reactos/dll/win32/ole32/compositemoniker.c | 12 +- reactos/dll/win32/ole32/defaulthandler.c | 2 +- reactos/dll/win32/ole32/moniker.c | 2 +- reactos/dll/win32/ole32/ole2.c | 117 ++++++++-------- reactos/dll/win32/ole32/pointermoniker.c | 2 +- reactos/dll/win32/ole32/rpc.c | 47 +++---- reactos/dll/win32/ole32/storage32.c | 4 +- reactos/dll/win32/ole32/usrmarshal.c | 8 +- reactos/media/doc/README.WINE | 2 +- 10 files changed, 173 insertions(+), 173 deletions(-) diff --git a/reactos/dll/win32/ole32/compobj.c b/reactos/dll/win32/ole32/compobj.c index f23468409bb..4b3ae49f566 100644 --- a/reactos/dll/win32/ole32/compobj.c +++ b/reactos/dll/win32/ole32/compobj.c @@ -818,14 +818,17 @@ static void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay) real_delay = 0; } - if (!real_delay || (entry->unload_time && (entry->unload_time < GetTickCount()))) + if (!real_delay || (entry->unload_time && ((int)(GetTickCount() - entry->unload_time) > 0))) { list_remove(&entry->entry); COMPOBJ_DllList_ReleaseRef(entry->dll, TRUE); HeapFree(GetProcessHeap(), 0, entry); } else + { entry->unload_time = GetTickCount() + real_delay; + if (!entry->unload_time) entry->unload_time = 1; + } } else if (entry->unload_time) entry->unload_time = 0; @@ -2035,8 +2038,11 @@ HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *ppszProgID) *ppszProgID = CoTaskMemAlloc(progidlen * sizeof(WCHAR)); if (*ppszProgID) { - if (RegQueryValueW(hkey, NULL, *ppszProgID, &progidlen)) + if (RegQueryValueW(hkey, NULL, *ppszProgID, &progidlen)) { ret = REGDB_E_CLASSNOTREG; + CoTaskMemFree(*ppszProgID); + *ppszProgID = NULL; + } } else ret = E_OUTOFMEMORY; @@ -2732,83 +2738,82 @@ HRESULT WINAPI CoResumeClassObjects(void) * CoGetClassObject() */ HRESULT WINAPI CoCreateInstance( - REFCLSID rclsid, - LPUNKNOWN pUnkOuter, - DWORD dwClsContext, - REFIID iid, - LPVOID *ppv) + REFCLSID rclsid, + LPUNKNOWN pUnkOuter, + DWORD dwClsContext, + REFIID iid, + LPVOID *ppv) { - HRESULT hres; - LPCLASSFACTORY lpclf = 0; - APARTMENT *apt; + HRESULT hres; + LPCLASSFACTORY lpclf = 0; + APARTMENT *apt; - TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid), - pUnkOuter, dwClsContext, debugstr_guid(iid), ppv); + TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid), + pUnkOuter, dwClsContext, debugstr_guid(iid), ppv); - /* - * Sanity check - */ - if (ppv==0) - return E_POINTER; + if (ppv==0) + return E_POINTER; - /* - * Initialize the "out" parameter - */ - *ppv = 0; + *ppv = 0; - if (!(apt = COM_CurrentApt())) - { - if (!(apt = apartment_find_multi_threaded())) + if (!(apt = COM_CurrentApt())) { - ERR("apartment not initialised\n"); - return CO_E_NOTINITIALIZED; - } - apartment_release(apt); - } - - /* - * The Standard Global Interface Table (GIT) object is a process-wide singleton. - * Rather than create a class factory, we can just check for it here - */ - if (IsEqualIID(rclsid, &CLSID_StdGlobalInterfaceTable)) { - if (StdGlobalInterfaceTableInstance == NULL) - StdGlobalInterfaceTableInstance = StdGlobalInterfaceTable_Construct(); - hres = IGlobalInterfaceTable_QueryInterface( (IGlobalInterfaceTable*) StdGlobalInterfaceTableInstance, iid, ppv); - if (hres) return hres; - - TRACE("Retrieved GIT (%p)\n", *ppv); - return S_OK; - } - - if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent)) - return ManualResetEvent_Construct(pUnkOuter, iid, ppv); - - /* - * Get a class factory to construct the object we want. - */ - hres = CoGetClassObject(rclsid, - dwClsContext, - NULL, - &IID_IClassFactory, - (LPVOID)&lpclf); - - if (FAILED(hres)) - return hres; - - /* - * Create the object and don't forget to release the factory - */ - hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv); - IClassFactory_Release(lpclf); - if(FAILED(hres)) + if (!(apt = apartment_find_multi_threaded())) { - if (hres == CLASS_E_NOAGGREGATION && pUnkOuter) - FIXME("Class %s does not support aggregation\n", debugstr_guid(rclsid)); - else - FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n", debugstr_guid(iid), debugstr_guid(rclsid),hres); + ERR("apartment not initialised\n"); + return CO_E_NOTINITIALIZED; } + apartment_release(apt); + } - return hres; + /* + * The Standard Global Interface Table (GIT) object is a process-wide singleton. + * Rather than create a class factory, we can just check for it here + */ + if (IsEqualIID(rclsid, &CLSID_StdGlobalInterfaceTable)) + { + if (StdGlobalInterfaceTableInstance == NULL) + StdGlobalInterfaceTableInstance = StdGlobalInterfaceTable_Construct(); + hres = IGlobalInterfaceTable_QueryInterface((IGlobalInterfaceTable*)StdGlobalInterfaceTableInstance, + iid, + ppv); + if (hres) return hres; + + TRACE("Retrieved GIT (%p)\n", *ppv); + return S_OK; + } + + if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent)) + return ManualResetEvent_Construct(pUnkOuter, iid, ppv); + + /* + * Get a class factory to construct the object we want. + */ + hres = CoGetClassObject(rclsid, + dwClsContext, + NULL, + &IID_IClassFactory, + (LPVOID)&lpclf); + + if (FAILED(hres)) + return hres; + + /* + * Create the object and don't forget to release the factory + */ + hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv); + IClassFactory_Release(lpclf); + if (FAILED(hres)) + { + if (hres == CLASS_E_NOAGGREGATION && pUnkOuter) + FIXME("Class %s does not support aggregation\n", debugstr_guid(rclsid)); + else + FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n", + debugstr_guid(iid), + debugstr_guid(rclsid),hres); + } + + return hres; } /*********************************************************************** @@ -3876,6 +3881,7 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout, if (res == WAIT_OBJECT_0 + cHandles) /* messages available */ { MSG msg; + int count = 0; /* call message filter */ @@ -3905,7 +3911,9 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout, } } - while (COM_PeekMessage(apt, &msg)) + /* some apps (e.g. Visio 2010) don't handle WM_PAINT properly and loop forever, + * so after processing 100 messages we go back to checking the wait handles */ + while (count++ < 100 && COM_PeekMessage(apt, &msg)) { TRACE("received message whilst waiting for RPC: 0x%04x\n", msg.message); TranslateMessage(&msg); diff --git a/reactos/dll/win32/ole32/compositemoniker.c b/reactos/dll/win32/ole32/compositemoniker.c index 8088d953976..a010e4fa7ff 100644 --- a/reactos/dll/win32/ole32/compositemoniker.c +++ b/reactos/dll/win32/ole32/compositemoniker.c @@ -1641,10 +1641,10 @@ static const IEnumMonikerVtbl VT_EnumMonikerImpl = ******************************************************************************/ static HRESULT EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, ULONG tabSize, - ULONG currentPos, BOOL leftToRigth, IEnumMoniker ** ppmk) + ULONG currentPos, BOOL leftToRight, IEnumMoniker ** ppmk) { EnumMonikerImpl* newEnumMoniker; - int i; + ULONG i; if (currentPos > tabSize) return E_INVALIDARG; @@ -1668,17 +1668,17 @@ EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, ULONG tabSize, return E_OUTOFMEMORY; } - if (leftToRigth) + if (leftToRight) for (i=0;itabMoniker[i]=tabMoniker[i]; IMoniker_AddRef(tabMoniker[i]); } else - for (i=tabSize-1;i>=0;i--){ + for (i = tabSize; i > 0; i--){ - newEnumMoniker->tabMoniker[tabSize-i-1]=tabMoniker[i]; - IMoniker_AddRef(tabMoniker[i]); + newEnumMoniker->tabMoniker[tabSize-i]=tabMoniker[i - 1]; + IMoniker_AddRef(tabMoniker[i - 1]); } *ppmk=&newEnumMoniker->IEnumMoniker_iface; diff --git a/reactos/dll/win32/ole32/defaulthandler.c b/reactos/dll/win32/ole32/defaulthandler.c index 0b3db7ad50b..f1ca02b91ff 100644 --- a/reactos/dll/win32/ole32/defaulthandler.c +++ b/reactos/dll/win32/ole32/defaulthandler.c @@ -1325,7 +1325,7 @@ static HRESULT WINAPI DefaultHandler_Run( release_delegates(This); - hr = CoCreateInstance(&This->clsid, NULL, CLSCTX_ALL, + hr = CoCreateInstance(&This->clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, &IID_IOleObject, (void **)&This->pOleDelegate); if (FAILED(hr)) return hr; diff --git a/reactos/dll/win32/ole32/moniker.c b/reactos/dll/win32/ole32/moniker.c index 4e3d46c5c66..9de947caf4b 100644 --- a/reactos/dll/win32/ole32/moniker.c +++ b/reactos/dll/win32/ole32/moniker.c @@ -149,7 +149,7 @@ static BOOL start_rpcss(void) strcatW( cmd, rpcss ); Wow64DisableWow64FsRedirection( &redir ); - rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); + rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi ); Wow64RevertWow64FsRedirection( redir ); if (rslt) diff --git a/reactos/dll/win32/ole32/ole2.c b/reactos/dll/win32/ole32/ole2.c index 851bbeae3fa..70da8a461db 100644 --- a/reactos/dll/win32/ole32/ole2.c +++ b/reactos/dll/win32/ole32/ole2.c @@ -1880,11 +1880,11 @@ HOLEMENU WINAPI OleCreateMenuDescriptor( * Destroy the shared menu descriptor */ HRESULT WINAPI OleDestroyMenuDescriptor( - HOLEMENU hmenuDescriptor) + HOLEMENU hmenuDescriptor) { - if ( hmenuDescriptor ) - GlobalFree( hmenuDescriptor ); - return S_OK; + if ( hmenuDescriptor ) + GlobalFree( hmenuDescriptor ); + return S_OK; } /*********************************************************************** @@ -1908,72 +1908,73 @@ HRESULT WINAPI OleDestroyMenuDescriptor( * these are non null. */ HRESULT WINAPI OleSetMenuDescriptor( - HOLEMENU hOleMenu, - HWND hwndFrame, - HWND hwndActiveObject, - LPOLEINPLACEFRAME lpFrame, - LPOLEINPLACEACTIVEOBJECT lpActiveObject) + HOLEMENU hOleMenu, + HWND hwndFrame, + HWND hwndActiveObject, + LPOLEINPLACEFRAME lpFrame, + LPOLEINPLACEACTIVEOBJECT lpActiveObject) { - OleMenuDescriptor *pOleMenuDescriptor = NULL; + OleMenuDescriptor *pOleMenuDescriptor = NULL; - /* Check args */ - if ( !hwndFrame || (hOleMenu && !hwndActiveObject) ) - return E_INVALIDARG; + /* Check args */ + if ( !hwndFrame || (hOleMenu && !hwndActiveObject) ) + return E_INVALIDARG; - if ( lpFrame || lpActiveObject ) - { - FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n", - hOleMenu, - hwndFrame, - hwndActiveObject, - lpFrame, - lpActiveObject); - } + if ( lpFrame || lpActiveObject ) + { + FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n", + hOleMenu, + hwndFrame, + hwndActiveObject, + lpFrame, + lpActiveObject); + } - /* Set up a message hook to intercept the containers frame window messages. - * The message filter is responsible for dispatching menu messages from the - * shared menu which are intended for the object. - */ + /* Set up a message hook to intercept the containers frame window messages. + * The message filter is responsible for dispatching menu messages from the + * shared menu which are intended for the object. + */ - if ( hOleMenu ) /* Want to install dispatching code */ - { - /* If OLEMenu hooks are already installed for this thread, fail - * Note: This effectively means that OleSetMenuDescriptor cannot - * be called twice in succession on the same frame window - * without first calling it with a null hOleMenu to uninstall */ - if ( OLEMenu_IsHookInstalled( GetCurrentThreadId() ) ) - return E_FAIL; + if ( hOleMenu ) /* Want to install dispatching code */ + { + /* If OLEMenu hooks are already installed for this thread, fail + * Note: This effectively means that OleSetMenuDescriptor cannot + * be called twice in succession on the same frame window + * without first calling it with a null hOleMenu to uninstall + */ + if ( OLEMenu_IsHookInstalled( GetCurrentThreadId() ) ) + return E_FAIL; - /* Get the menu descriptor */ - pOleMenuDescriptor = GlobalLock( hOleMenu ); - if ( !pOleMenuDescriptor ) - return E_UNEXPECTED; + /* Get the menu descriptor */ + pOleMenuDescriptor = GlobalLock( hOleMenu ); + if ( !pOleMenuDescriptor ) + return E_UNEXPECTED; - /* Update the menu descriptor */ - pOleMenuDescriptor->hwndFrame = hwndFrame; - pOleMenuDescriptor->hwndActiveObject = hwndActiveObject; + /* Update the menu descriptor */ + pOleMenuDescriptor->hwndFrame = hwndFrame; + pOleMenuDescriptor->hwndActiveObject = hwndActiveObject; - GlobalUnlock( hOleMenu ); - pOleMenuDescriptor = NULL; + GlobalUnlock( hOleMenu ); + pOleMenuDescriptor = NULL; - /* Add a menu descriptor windows property to the frame window */ - SetPropW( hwndFrame, prop_olemenuW, hOleMenu ); + /* Add a menu descriptor windows property to the frame window */ + SetPropW( hwndFrame, prop_olemenuW, hOleMenu ); - /* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */ - if ( !OLEMenu_InstallHooks( GetCurrentThreadId() ) ) - return E_FAIL; - } - else /* Want to uninstall dispatching code */ - { - /* Uninstall the hooks */ - if ( !OLEMenu_UnInstallHooks( GetCurrentThreadId() ) ) - return E_FAIL; + /* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */ + if ( !OLEMenu_InstallHooks( GetCurrentThreadId() ) ) + return E_FAIL; + } + else /* Want to uninstall dispatching code */ + { + /* Uninstall the hooks */ + if ( !OLEMenu_UnInstallHooks( GetCurrentThreadId() ) ) + return E_FAIL; - /* Remove the menu descriptor property from the frame window */ - RemovePropW( hwndFrame, prop_olemenuW ); - } + /* Remove the menu descriptor property from the frame window */ + RemovePropW( hwndFrame, prop_olemenuW ); + } - return S_OK; + return S_OK; } /****************************************************************************** diff --git a/reactos/dll/win32/ole32/pointermoniker.c b/reactos/dll/win32/ole32/pointermoniker.c index 436d6e25edd..2a0a80d3e7f 100644 --- a/reactos/dll/win32/ole32/pointermoniker.c +++ b/reactos/dll/win32/ole32/pointermoniker.c @@ -632,7 +632,7 @@ static HRESULT WINAPI PointerMonikerCF_CreateInstance(LPCLASSFACTORY iface, if (FAILED(hr)) return hr; - hr = IMoniker_QueryInterface(pMoniker, riid, ppv); + hr = IMoniker_QueryInterface(pMoniker, riid, ppv); if (FAILED(hr)) IMoniker_Release(pMoniker); diff --git a/reactos/dll/win32/ole32/rpc.c b/reactos/dll/win32/ole32/rpc.c index 238bfbba1b5..5839d0df1ed 100644 --- a/reactos/dll/win32/ole32/rpc.c +++ b/reactos/dll/win32/ole32/rpc.c @@ -1683,7 +1683,7 @@ static HRESULT create_server(REFCLSID rclsid, HANDLE *process) /* FIXME: Win2003 supports a ServerExecutable value that is passed into * CreateProcess */ - if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)) { + if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) { WARN("failed to run local server %s\n", debugstr_w(command)); return HRESULT_FROM_WIN32(GetLastError()); } @@ -1880,7 +1880,7 @@ struct local_server_params { CLSID clsid; IStream *stream; - HANDLE ready_event; + HANDLE pipe; HANDLE stop_event; HANDLE thread; BOOL multi_use; @@ -1901,7 +1901,7 @@ static DWORD WINAPI local_server_thread(LPVOID param) ULONG res; BOOL multi_use = lsp->multi_use; OVERLAPPED ovl; - HANDLE pipe_event, hPipe, new_pipe; + HANDLE pipe_event, hPipe = lsp->pipe, new_pipe; DWORD bytes; TRACE("Starting threader for %s.\n",debugstr_guid(&lsp->clsid)); @@ -1910,18 +1910,6 @@ static DWORD WINAPI local_server_thread(LPVOID param) get_localserver_pipe_name(pipefn, &lsp->clsid); ovl.hEvent = pipe_event = CreateEventW(NULL, FALSE, FALSE, NULL); - hPipe = CreateNamedPipeW( pipefn, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, - PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, - 4096, 4096, 500 /* 0.5 second timeout */, NULL ); - if (hPipe == INVALID_HANDLE_VALUE) - { - FIXME("pipe creation failed for %s, le is %u\n", debugstr_w(pipefn), GetLastError()); - CloseHandle(pipe_event); - return 1; - } - - SetEvent(lsp->ready_event); - while (1) { if (!ConnectNamedPipe(hPipe, &ovl)) { @@ -2011,8 +1999,9 @@ static DWORD WINAPI local_server_thread(LPVOID param) /* starts listening for a local server */ HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, void **registration) { - DWORD tid; + DWORD tid, err; struct local_server_params *lsp; + WCHAR pipefn[100]; lsp = HeapAlloc(GetProcessHeap(), 0, sizeof(*lsp)); if (!lsp) @@ -2021,34 +2010,36 @@ HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, vo lsp->clsid = *clsid; lsp->stream = stream; IStream_AddRef(stream); - lsp->ready_event = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!lsp->ready_event) - { - HeapFree(GetProcessHeap(), 0, lsp); - return HRESULT_FROM_WIN32(GetLastError()); - } lsp->stop_event = CreateEventW(NULL, FALSE, FALSE, NULL); if (!lsp->stop_event) { - CloseHandle(lsp->ready_event); HeapFree(GetProcessHeap(), 0, lsp); return HRESULT_FROM_WIN32(GetLastError()); } lsp->multi_use = multi_use; + get_localserver_pipe_name(pipefn, &lsp->clsid); + lsp->pipe = CreateNamedPipeW(pipefn, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, + PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, + 4096, 4096, 500 /* 0.5 second timeout */, NULL); + if (lsp->pipe == INVALID_HANDLE_VALUE) + { + err = GetLastError(); + FIXME("pipe creation failed for %s, le is %u\n", debugstr_w(pipefn), GetLastError()); + CloseHandle(lsp->stop_event); + HeapFree(GetProcessHeap(), 0, lsp); + return HRESULT_FROM_WIN32(err); + } + lsp->thread = CreateThread(NULL, 0, local_server_thread, lsp, 0, &tid); if (!lsp->thread) { - CloseHandle(lsp->ready_event); + CloseHandle(lsp->pipe); CloseHandle(lsp->stop_event); HeapFree(GetProcessHeap(), 0, lsp); return HRESULT_FROM_WIN32(GetLastError()); } - WaitForSingleObject(lsp->ready_event, INFINITE); - CloseHandle(lsp->ready_event); - lsp->ready_event = NULL; - *registration = lsp; return S_OK; } diff --git a/reactos/dll/win32/ole32/storage32.c b/reactos/dll/win32/ole32/storage32.c index 69a7f8c8e08..a3c7435c02a 100644 --- a/reactos/dll/win32/ole32/storage32.c +++ b/reactos/dll/win32/ole32/storage32.c @@ -1767,7 +1767,7 @@ static HRESULT WINAPI StorageBaseImpl_CopyTo( StorageBaseImpl *This = impl_from_IStorage(iface); BOOL skip_storage = FALSE, skip_stream = FALSE; - int i; + DWORD i; TRACE("(%p, %d, %p, %p, %p)\n", iface, ciidExclude, rgiidExclude, @@ -2822,7 +2822,7 @@ static HRESULT StorageImpl_Construct( { ULONG current_block = This->extBigBlockDepotStart; ULONG cache_size = This->extBigBlockDepotCount * 2; - int i; + ULONG i; This->extBigBlockDepotLocations = HeapAlloc(GetProcessHeap(), 0, sizeof(ULONG) * cache_size); if (!This->extBigBlockDepotLocations) diff --git a/reactos/dll/win32/ole32/usrmarshal.c b/reactos/dll/win32/ole32/usrmarshal.c index b8ec9897b50..0c61b4f2324 100644 --- a/reactos/dll/win32/ole32/usrmarshal.c +++ b/reactos/dll/win32/ole32/usrmarshal.c @@ -2360,8 +2360,8 @@ HRESULT CALLBACK IMoniker_BindToStorage_Proxy( REFIID riid, void **ppvObj) { - FIXME(":stub\n"); - return E_NOTIMPL; + TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj); + return IMoniker_RemoteBindToStorage_Proxy(This, pbc, pmkToLeft, riid, (IUnknown**)ppvObj); } HRESULT __RPC_STUB IMoniker_BindToStorage_Stub( @@ -2371,8 +2371,8 @@ HRESULT __RPC_STUB IMoniker_BindToStorage_Stub( REFIID riid, IUnknown **ppvObj) { - FIXME(":stub\n"); - return E_NOTIMPL; + TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj); + return IMoniker_BindToStorage(This, pbc, pmkToLeft, riid, (void**)ppvObj); } HRESULT CALLBACK IEnumString_Next_Proxy( diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index f2f3e7aad9b..901b6c185d5 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -130,7 +130,7 @@ reactos/dll/win32/ntprint # Synced to Wine-1.5.4 reactos/dll/win32/objsel # Synced to Wine-1.5.19 reactos/dll/win32/odbc32 # Out of sync. Depends on port of Linux ODBC. reactos/dll/win32/odbccp32 # Synced to Wine-1.5.19 -reactos/dll/win32/ole32 # Synced to Wine-1.5.19 +reactos/dll/win32/ole32 # Synced to Wine-1.5.26 reactos/dll/win32/oleacc # Autosync reactos/dll/win32/oleaut32 # Synced to Wine-1.5.19 reactos/dll/win32/olecli32 # Synced to Wine-1.5.19