Nikolay Sivov : combase: Return initial values for global options.

Alexandre Julliard julliard at winehq.org
Thu Apr 1 16:09:27 CDT 2021


Module: wine
Branch: master
Commit: d63ed91c280b7af30b498735a2d8924e58fdcfe7
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d63ed91c280b7af30b498735a2d8924e58fdcfe7

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Apr  1 13:24:53 2021 +0300

combase: Return initial values for global options.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/combase/combase.c     | 11 +++++++++--
 dlls/ole32/tests/compobj.c | 13 +++++++++++++
 include/objidlbase.idl     | 28 +++++++++++++++++++++++++++-
 3 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c
index cda0d52f579..4677972656f 100644
--- a/dlls/combase/combase.c
+++ b/dlls/combase/combase.c
@@ -38,6 +38,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
 
 HINSTANCE hProxyDll;
 
+static ULONG_PTR global_options[COMGLB_PROPERTIES_RESERVED3 + 1];
+
 /* Ole32 exports */
 extern void WINAPI DestroyRunningObjectTable(void);
 extern HRESULT WINAPI Ole32DllGetClassObject(REFCLSID rclsid, REFIID riid, void **obj);
@@ -490,9 +492,14 @@ static HRESULT WINAPI global_options_Set(IGlobalOptions *iface, GLOBALOPT_PROPER
 
 static HRESULT WINAPI global_options_Query(IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR *value)
 {
-    FIXME("%p, %u, %p.\n", iface, property, value);
+    TRACE("%p, %u, %p.\n", iface, property, value);
 
-    return E_NOTIMPL;
+    if (property < COMGLB_EXCEPTION_HANDLING || property > COMGLB_PROPERTIES_RESERVED3)
+        return E_INVALIDARG;
+
+    *value = global_options[property];
+
+    return S_OK;
 }
 
 static const IGlobalOptionsVtbl global_options_vtbl =
diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c
index 2e5006463da..d1e947e393f 100644
--- a/dlls/ole32/tests/compobj.c
+++ b/dlls/ole32/tests/compobj.c
@@ -3919,6 +3919,7 @@ todo_wine {
 static void test_GlobalOptions(void)
 {
     IGlobalOptions *global_options;
+    ULONG_PTR value;
     HRESULT hres;
 
     CoInitialize(NULL);
@@ -3933,6 +3934,18 @@ static void test_GlobalOptions(void)
         return;
     }
 
+    hres = IGlobalOptions_Query(global_options, 0, &value);
+    ok(FAILED(hres), "Unexpected hr %#x.\n", hres);
+
+    hres = IGlobalOptions_Query(global_options, COMGLB_PROPERTIES_RESERVED3 + 1, &value);
+    ok(FAILED(hres), "Unexpected hr %#x.\n", hres);
+
+    value = ~0u;
+    hres = IGlobalOptions_Query(global_options, COMGLB_EXCEPTION_HANDLING, &value);
+    ok(hres == S_OK || broken(hres == E_FAIL) /* Vista */, "Unexpected hr %#x.\n", hres);
+    if (SUCCEEDED(hres))
+        ok(value == COMGLB_EXCEPTION_HANDLE, "Unexpected value %ld.\n", value);
+
     IGlobalOptions_Release(global_options);
 
     hres = CoCreateInstance(&CLSID_GlobalOptions, (IUnknown*)0xdeadbeef, CLSCTX_INPROC_SERVER,
diff --git a/include/objidlbase.idl b/include/objidlbase.idl
index 6449be8417b..bd5a9b12409 100644
--- a/include/objidlbase.idl
+++ b/include/objidlbase.idl
@@ -1095,7 +1095,12 @@ typedef enum tagGLOBALOPT_PROPERTIES
 {
     COMGLB_EXCEPTION_HANDLING     = 1,
     COMGLB_APPID                  = 2,
-    COMGLB_RPC_THREADPOOL_SETTING = 3
+    COMGLB_RPC_THREADPOOL_SETTING = 3,
+    COMGLB_RO_SETTINGS            = 4,
+    COMGLB_UNMARSHALING_POLICY    = 5,
+    COMGLB_PROPERTIES_RESERVED1   = 6,
+    COMGLB_PROPERTIES_RESERVED2   = 7,
+    COMGLB_PROPERTIES_RESERVED3   = 8,
 } GLOBALOPT_PROPERTIES;
 
 typedef enum tagGLOBALOPT_EH_VALUES
@@ -1112,6 +1117,27 @@ typedef enum tagGLOBALOPT_RPCTP_VALUES
     COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1
 } GLOBALOPT_RPCTP_VALUES;
 
+typedef enum tagGLOBALOPT_RO_FLAGS
+{
+    COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES = 0x1,
+    COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES = 0x2,
+    COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES = 0x4,
+    COMGLB_FAST_RUNDOWN = 0x8,
+    COMGLB_RESERVED1 = 0x10,
+    COMGLB_RESERVED2 = 0x20,
+    COMGLB_RESERVED3 = 0x40,
+    COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES = 0x80,
+    COMGLB_RESERVED4 = 0x100,
+    COMGLB_RESERVED5 = 0x200,
+    COMGLB_RESERVED6 = 0x400,
+} GLOBALOPT_RO_FLAGS;
+
+typedef enum tagGLOBALOPT_UNMARSHALING_POLICY_VALUES
+{
+    COMGLB_UNMARSHALING_POLICY_NORMAL = 0,
+    COMGLB_UNMARSHALING_POLICY_STRONG = 1,
+    COMGLB_UNMARSHALING_POLICY_HYBRID = 2,
+} GLOBALOPT_UNMARSHALING_POLICY_VALUES;
 
 [
     object,




More information about the wine-cvs mailing list