[OLE32] Sync with Wine Staging 1.9.23. CORE-12409
authorAmine Khaldi <amine.khaldi@reactos.org>
Tue, 22 Nov 2016 12:30:48 +0000 (12:30 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Tue, 22 Nov 2016 12:30:48 +0000 (12:30 +0000)
svn path=/trunk/; revision=73341

reactos/dll/win32/ole32/antimoniker.c
reactos/dll/win32/ole32/classmoniker.c
reactos/dll/win32/ole32/clipboard.c
reactos/dll/win32/ole32/compositemoniker.c
reactos/dll/win32/ole32/itemmoniker.c
reactos/dll/win32/ole32/moniker.c
reactos/dll/win32/ole32/ole32_ros.diff
reactos/dll/win32/ole32/pointermoniker.c
reactos/dll/win32/ole32/rpc.c
reactos/media/doc/README.WINE

index 86d3026..fd6c6af 100644 (file)
@@ -49,7 +49,7 @@ AntiMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
 {
     AntiMonikerImpl *This = impl_from_IMoniker(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* Perform a sanity check on the parameters.*/
     if ( ppvObject==0 )
@@ -217,7 +217,7 @@ static HRESULT WINAPI
 AntiMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
                              REFIID riid, VOID** ppvResult)
 {
-    TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
+    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
     return E_NOTIMPL;
 }
 
@@ -228,7 +228,7 @@ static HRESULT WINAPI
 AntiMonikerImpl_BindToStorage(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
                               REFIID riid, VOID** ppvResult)
 {
-    TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
+    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
     return E_NOTIMPL;
 }
 
@@ -483,7 +483,7 @@ AntiMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObje
 {
     AntiMonikerImpl *This = impl_from_IROTData(iface);
 
-    TRACE("(%p,%p,%p)\n",iface,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",iface,debugstr_guid(riid),ppvObject);
 
     return AntiMonikerImpl_QueryInterface(&This->IMoniker_iface, riid, ppvObject);
 }
index d3c4250..eaf3172 100644 (file)
@@ -52,7 +52,7 @@ static HRESULT WINAPI ClassMoniker_QueryInterface(IMoniker* iface,REFIID riid,vo
 {
     ClassMoniker *This = impl_from_IMoniker(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* Perform a sanity check on the parameters.*/
     if (!ppvObject)
index 77a2dfa..c778023 100644 (file)
@@ -2025,10 +2025,12 @@ static LRESULT CALLBACK clipbrd_wndproc(HWND hwnd, UINT message, WPARAM wparam,
     case WM_RENDERALLFORMATS:
     {
         DWORD i;
-        ole_priv_data_entry *entries = clipbrd->cached_enum->entries;
+        ole_priv_data_entry *entries;
 
         TRACE("(): WM_RENDERALLFORMATS\n");
 
+        if (!clipbrd || !clipbrd->cached_enum) break;
+        entries = clipbrd->cached_enum->entries;
         for(i = 0; i < clipbrd->cached_enum->count; i++)
         {
             if(entries[i].first_use)
index 300df07..533fb0c 100644 (file)
@@ -74,7 +74,7 @@ CompositeMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject
 {
     CompositeMonikerImpl *This = impl_from_IMoniker(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* Perform a sanity check on the parameters.*/
     if ( ppvObject==0 )
@@ -323,7 +323,7 @@ CompositeMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc,
     IMoniker *tempMk,*antiMk,*rightMostMk;
     IEnumMoniker *enumMoniker;
 
-    TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
+    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
 
     if (ppvResult==NULL)
         return E_POINTER;
@@ -376,7 +376,7 @@ CompositeMonikerImpl_BindToStorage(IMoniker* iface, IBindCtx* pbc,
     IMoniker *tempMk,*antiMk,*rightMostMk,*leftMk;
     IEnumMoniker *enumMoniker;
 
-    TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
+    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
 
     *ppvResult=0;
 
@@ -1182,7 +1182,7 @@ CompositeMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,
 {
     CompositeMonikerImpl *This = impl_from_IROTData(iface);
 
-    TRACE("(%p,%p,%p)\n",iface,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",iface,debugstr_guid(riid),ppvObject);
 
     return CompositeMonikerImpl_QueryInterface(&This->IMoniker_iface, riid, ppvObject);
 }
@@ -1486,7 +1486,7 @@ EnumMonikerImpl_QueryInterface(IEnumMoniker* iface,REFIID riid,void** ppvObject)
 {
     EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* Perform a sanity check on the parameters.*/
     if ( ppvObject==0 )
index ac75d43..aecd40a 100644 (file)
@@ -760,7 +760,7 @@ static HRESULT WINAPI ItemMonikerROTDataImpl_QueryInterface(IROTData *iface,REFI
 
     ItemMonikerImpl *This = impl_from_IROTData(iface);
 
-    TRACE("(%p,%p,%p)\n",iface,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",iface,debugstr_guid(riid),ppvObject);
 
     return ItemMonikerImpl_QueryInterface(&This->IMoniker_iface, riid, ppvObject);
 }
index f6f1691..915caac 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "precomp.h"
 
+#include <winsvc.h>
 #include <wine/exception.h>
 
 #include <irot.h>
@@ -113,32 +114,52 @@ static IrotHandle get_irot_handle(void)
 
 static BOOL start_rpcss(void)
 {
-    PROCESS_INFORMATION pi;
-    STARTUPINFOW si;
-    WCHAR cmd[MAX_PATH];
-    static const WCHAR rpcss[] = {'\\','r','p','c','s','s','.','e','x','e',0};
-    BOOL rslt;
-    void *redir;
+    static const WCHAR rpcssW[] = {'R','p','c','S','s',0};
+    SC_HANDLE scm, service;
+    SERVICE_STATUS_PROCESS status;
+    BOOL ret = FALSE;
 
     TRACE("\n");
 
-    ZeroMemory(&si, sizeof(STARTUPINFOA));
-    si.cb = sizeof(STARTUPINFOA);
-    GetSystemDirectoryW( cmd, MAX_PATH - sizeof(rpcss)/sizeof(WCHAR) );
-    strcatW( cmd, rpcss );
+    if (!(scm = OpenSCManagerW( NULL, NULL, 0 )))
+    {
+        ERR( "failed to open service manager\n" );
+        return FALSE;
+    }
+    if (!(service = OpenServiceW( scm, rpcssW, SERVICE_START | SERVICE_QUERY_STATUS )))
+    {
+        ERR( "failed to open RpcSs service\n" );
+        CloseServiceHandle( scm );
+        return FALSE;
+    }
+    if (StartServiceW( service, 0, NULL ) || GetLastError() == ERROR_SERVICE_ALREADY_RUNNING)
+    {
+        ULONGLONG start_time = GetTickCount64();
+        do
+        {
+            DWORD dummy;
 
-    Wow64DisableWow64FsRedirection( &redir );
-    rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi );
-    Wow64RevertWow64FsRedirection( redir );
+            if (!QueryServiceStatusEx( service, SC_STATUS_PROCESS_INFO,
+                                       (BYTE *)&status, sizeof(status), &dummy ))
+                break;
+            if (status.dwCurrentState == SERVICE_RUNNING)
+            {
+                ret = TRUE;
+                break;
+            }
+            if (GetTickCount64() - start_time > 30000) break;
+            Sleep( 100 );
 
-    if (rslt)
-    {
-        CloseHandle(pi.hProcess);
-        CloseHandle(pi.hThread);
-        Sleep(100);
+        } while (status.dwCurrentState == SERVICE_START_PENDING);
+
+        if (status.dwCurrentState != SERVICE_RUNNING)
+            WARN( "RpcSs failed to start %u\n", status.dwCurrentState );
     }
+    else ERR( "failed to start RpcSs service\n" );
 
-    return rslt;
+    CloseServiceHandle( service );
+    CloseServiceHandle( scm );
+    return ret;
 }
 
 static HRESULT create_stream_on_mip_ro(const InterfaceData *mip, IStream **stream)
@@ -287,7 +308,7 @@ RunningObjectTableImpl_QueryInterface(IRunningObjectTable* iface,
 {
     RunningObjectTableImpl *This = impl_from_IRunningObjectTable(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* validate arguments */
 
@@ -1275,7 +1296,7 @@ static HRESULT WINAPI EnumMonikerImpl_QueryInterface(IEnumMoniker* iface,REFIID
 {
     EnumMonikerImpl *This = impl_from_IEnumMoniker(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* validate arguments */
     if (ppvObject == NULL)
index 5e6e8a5..8cc2db7 100644 (file)
@@ -1,21 +1,20 @@
-diff -pudN e:\wine\dlls\ole32/comcat.c e:\reactos\dll\win32\ole32/comcat.c
---- e:\wine\dlls\ole32/comcat.c        2016-05-31 18:02:11 +0100
-+++ e:\reactos\dll\win32\ole32/comcat.c        2016-03-04 10:20:45 +0100
-@@ -229,7 +229,11 @@ static HRESULT COMCAT_IsClassOfCategorie
-       if (res != ERROR_SUCCESS) return S_FALSE;
-       for (string = impl_strings; *string; string += CHARS_IN_GUID) {
-           HKEY catkey;
+diff -pudN e:\wine\dlls\ole32/clipboard.c e:\reactos\dll\win32\ole32/clipboard.c
+--- e:\wine\dlls\ole32/clipboard.c     2016-11-16 17:29:23 +0100
++++ e:\reactos\dll\win32\ole32/clipboard.c     2016-11-16 23:37:23 +0100
+@@ -2001,6 +2001,10 @@ static LRESULT CALLBACK clipbrd_wndproc(
+     ole_clipbrd *clipbrd;
+     get_ole_clipbrd(&clipbrd);
 +#ifdef __REACTOS__
-           res = open_classes_key(subkey, string, READ_CONTROL, &catkey);
-+#else
-+          res = open_classes_key(subkey, string, 0, &catkey);
++    if(clipbrd == NULL)
++        return DefWindowProcW(hwnd, message, wparam, lparam);
 +#endif
-           if (res != ERROR_SUCCESS) {
-               RegCloseKey(subkey);
-               return S_FALSE;
+     switch (message)
+     {
 diff -pudN e:\wine\dlls\ole32/compobj.c e:\reactos\dll\win32\ole32/compobj.c
---- e:\wine\dlls\ole32/compobj.c       2016-05-31 18:02:11 +0100
-+++ e:\reactos\dll\win32\ole32/compobj.c       2016-06-07 11:34:16 +0100
+--- e:\wine\dlls\ole32/compobj.c       2016-11-16 17:29:23 +0100
++++ e:\reactos\dll\win32\ole32/compobj.c       2016-11-17 15:23:00 +0100
 @@ -43,6 +43,7 @@
  
  WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -39,8 +38,8 @@ diff -pudN e:\wine\dlls\ole32/compobj.c e:\reactos\dll\win32\ole32/compobj.c
  static HKEY classes_root_hkey;
  
 diff -pudN e:\wine\dlls\ole32/stg_prop.c e:\reactos\dll\win32\ole32/stg_prop.c
---- e:\wine\dlls\ole32/stg_prop.c      2016-05-31 18:02:11 +0100
-+++ e:\reactos\dll\win32\ole32/stg_prop.c      2016-06-07 11:34:17 +0100
+--- e:\wine\dlls\ole32/stg_prop.c      2016-11-16 17:29:23 +0100
++++ e:\reactos\dll\win32\ole32/stg_prop.c      2016-08-15 16:49:04 +0100
 @@ -41,6 +41,10 @@
  
  WINE_DEFAULT_DEBUG_CHANNEL(storage);
index e8cca62..d2113b1 100644 (file)
@@ -43,7 +43,7 @@ PointerMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
 {
     PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
-    TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
+    TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
 
     /* Perform a sanity check on the parameters.*/
     if ( (This==0) || (ppvObject==0) )
@@ -187,7 +187,7 @@ PointerMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToL
 {
     PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
-    TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
+    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
 
     if (!This->pObject)
         return E_UNEXPECTED;
@@ -204,7 +204,7 @@ PointerMonikerImpl_BindToStorage(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkTo
 {
     PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
-    TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
+    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
 
     if (!This->pObject)
         return E_UNEXPECTED;
index 750955b..985c622 100644 (file)
@@ -643,7 +643,7 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
     message_state->channel_hook_info.cbSize = sizeof(message_state->channel_hook_info);
     message_state->channel_hook_info.uCausality = COM_CurrentCausalityId();
     message_state->channel_hook_info.dwServerPid = This->server_pid;
-    message_state->channel_hook_info.iMethod = msg->ProcNum;
+    message_state->channel_hook_info.iMethod = msg->ProcNum & ~RPC_FLAGS_VALID_BIT;
     message_state->channel_hook_info.pObject = NULL; /* only present on server-side */
     message_state->target_hwnd = NULL;
     message_state->target_tid = 0;
index 446fda2..309f823 100644 (file)
@@ -139,7 +139,7 @@ reactos/dll/win32/ntdsapi             # Synced to WineStaging-1.9.11
 reactos/dll/win32/objsel              # Synced to WineStaging-1.9.11
 reactos/dll/win32/odbc32              # Synced to WineStaging-1.9.23. Depends on port of Linux ODBC.
 reactos/dll/win32/odbccp32            # Synced to WineStaging-1.9.11
-reactos/dll/win32/ole32               # Synced to WineStaging-1.9.16
+reactos/dll/win32/ole32               # Synced to WineStaging-1.9.23
 reactos/dll/win32/oleacc              # Synced to WineStaging-1.9.11
 reactos/dll/win32/oleaut32            # Synced to WineStaging-1.9.23
 reactos/dll/win32/olecli32            # Synced to WineStaging-1.9.11