[PATCH 1/4] combase: Implement CoCreateInstanceFromApp().

Nikolay Sivov nsivov at codeweavers.com
Wed Sep 9 04:44:28 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---

CoGetClassObject() moved to helper to make it easier to get flags validation right later -
CLSCTX_APPCONTAINER can't be used with it, and should return E_INVALIDARG, while it's usable
for CoCreateInstance*.

 .../api-ms-win-core-com-l1-1-0.spec           |   2 +-
 .../api-ms-win-core-com-l1-1-1.spec           |   2 +-
 dlls/combase/combase.c                        | 110 +++++++++-------
 dlls/combase/combase.spec                     |   2 +-
 dlls/ole32/ole32.spec                         |   1 +
 dlls/ole32/tests/compobj.c                    | 122 ++++++++++++++++++
 include/objbase.h                             |   2 +
 include/wtypes.idl                            |  41 +++---
 8 files changed, 217 insertions(+), 65 deletions(-)

diff --git a/dlls/api-ms-win-core-com-l1-1-0/api-ms-win-core-com-l1-1-0.spec b/dlls/api-ms-win-core-com-l1-1-0/api-ms-win-core-com-l1-1-0.spec
index eb81d238550..f5be6d88c75 100644
--- a/dlls/api-ms-win-core-com-l1-1-0/api-ms-win-core-com-l1-1-0.spec
+++ b/dlls/api-ms-win-core-com-l1-1-0/api-ms-win-core-com-l1-1-0.spec
@@ -8,7 +8,7 @@
 @ stdcall CoCreateGuid(ptr) ole32.CoCreateGuid
 @ stdcall CoCreateInstance(ptr ptr long ptr ptr) ole32.CoCreateInstance
 @ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) ole32.CoCreateInstanceEx
-@ stub CoCreateInstanceFromApp
+@ stdcall CoCreateInstanceFromApp(ptr ptr long ptr long ptr) ole32.CoCreateInstanceFromApp
 @ stub CoDecodeProxy
 @ stdcall CoDecrementMTAUsage(ptr) ole32.CoDecrementMTAUsage
 @ stdcall CoDisableCallCancellation(ptr) ole32.CoDisableCallCancellation
diff --git a/dlls/api-ms-win-core-com-l1-1-1/api-ms-win-core-com-l1-1-1.spec b/dlls/api-ms-win-core-com-l1-1-1/api-ms-win-core-com-l1-1-1.spec
index 6c3115d6007..f443592db3b 100644
--- a/dlls/api-ms-win-core-com-l1-1-1/api-ms-win-core-com-l1-1-1.spec
+++ b/dlls/api-ms-win-core-com-l1-1-1/api-ms-win-core-com-l1-1-1.spec
@@ -8,7 +8,7 @@
 @ stdcall CoCreateGuid(ptr) ole32.CoCreateGuid
 @ stdcall CoCreateInstance(ptr ptr long ptr ptr) ole32.CoCreateInstance
 @ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) ole32.CoCreateInstanceEx
-@ stub CoCreateInstanceFromApp
+@ stdcall CoCreateInstanceFromApp(ptr ptr long ptr long ptr) ole32.CoCreateInstanceFromApp
 @ stub CoDecodeProxy
 @ stdcall CoDecrementMTAUsage(ptr) ole32.CoDecrementMTAUsage
 @ stdcall CoDisableCallCancellation(ptr) ole32.CoDisableCallCancellation
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c
index c90cba6185c..66c99b53523 100644
--- a/dlls/combase/combase.c
+++ b/dlls/combase/combase.c
@@ -1527,53 +1527,19 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *out
 }
 
 /***********************************************************************
- *           CoCreateInstanceEx    (combase.@)
+ *           CoCreateInstanceFromApp    (combase.@)
  */
-HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, IUnknown *outer, DWORD cls_context,
-        COSERVERINFO *server_info, ULONG count, MULTI_QI *results)
+HRESULT WINAPI CoCreateInstanceFromApp(REFCLSID rclsid, IUnknown *outer, DWORD cls_context,
+        void *server_info, ULONG count, MULTI_QI *results)
 {
-    IClassFactory *factory;
-    IUnknown *unk = NULL;
-    CLSID clsid;
-    HRESULT hr;
-
-    TRACE("%s, %p, %#x, %p, %u, %p\n", debugstr_guid(rclsid), outer, cls_context, server_info, count, results);
-
-    if (!count || !results)
-        return E_INVALIDARG;
-
-    if (server_info)
-        FIXME("Server info is not supported.\n");
-
-    init_multi_qi(count, results, E_NOINTERFACE);
-
-    hr = CoGetTreatAsClass(rclsid, &clsid);
-    if (FAILED(hr))
-        clsid = *rclsid;
-
-    hr = CoGetClassObject(&clsid, cls_context, NULL, &IID_IClassFactory, (void **)&factory);
-    if (FAILED(hr))
-        return hr;
+    TRACE("%s, %p, %#x, %p, %u, %p\n", debugstr_guid(rclsid), outer, cls_context, server_info,
+            count, results);
 
-    hr = IClassFactory_CreateInstance(factory, outer, results[0].pIID, (void **)&unk);
-    IClassFactory_Release(factory);
-    if (FAILED(hr))
-    {
-        if (hr == CLASS_E_NOAGGREGATION && outer)
-            FIXME("Class %s does not support aggregation\n", debugstr_guid(&clsid));
-        else
-            FIXME("no instance created for interface %s of class %s, hr %#x.\n",
-                    debugstr_guid(results[0].pIID), debugstr_guid(&clsid), hr);
-        return hr;
-    }
-
-    return return_multi_qi(unk, count, results, TRUE);
+    return CoCreateInstanceEx(rclsid, outer, cls_context | CLSCTX_APPCONTAINER, server_info,
+            count, results);
 }
 
-/***********************************************************************
- *           CoGetClassObject    (combase.@)
- */
-HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext,
+static HRESULT com_get_class_object(REFCLSID rclsid, DWORD clscontext,
         COSERVERINFO *server_info, REFIID riid, void **obj)
 {
     struct class_reg_data clsreg = { 0 };
@@ -1581,8 +1547,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscont
     IUnknown *registered_obj;
     struct apartment *apt;
 
-    TRACE("%s, %s\n", debugstr_guid(rclsid), debugstr_guid(riid));
-
     if (!obj)
         return E_INVALIDARG;
 
@@ -1601,7 +1565,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscont
     {
         if (IsEqualCLSID(rclsid, &CLSID_InProcFreeMarshaler) ||
                 IsEqualCLSID(rclsid, &CLSID_GlobalOptions) ||
-                IsEqualCLSID(rclsid, &CLSID_ManualResetEvent) ||
+                (!(clscontext & CLSCTX_APPCONTAINER) && IsEqualCLSID(rclsid, &CLSID_ManualResetEvent)) ||
                 IsEqualCLSID(rclsid, &CLSID_StdGlobalInterfaceTable))
         {
             apartment_release(apt);
@@ -1637,7 +1601,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscont
      * First, try and see if we can't match the class ID with one of the
      * registered classes.
      */
-    if ((registered_obj = com_get_registered_class_object(apt, rclsid, clscontext)))
+    if (!(clscontext & CLSCTX_APPCONTAINER) && (registered_obj = com_get_registered_class_object(apt, rclsid, clscontext)))
     {
         hr = IUnknown_QueryInterface(registered_obj, riid, obj);
         IUnknown_Release(registered_obj);
@@ -1737,6 +1701,60 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscont
     return hr;
 }
 
+/***********************************************************************
+ *           CoCreateInstanceEx    (combase.@)
+ */
+HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, IUnknown *outer, DWORD cls_context,
+        COSERVERINFO *server_info, ULONG count, MULTI_QI *results)
+{
+    IClassFactory *factory;
+    IUnknown *unk = NULL;
+    CLSID clsid;
+    HRESULT hr;
+
+    TRACE("%s, %p, %#x, %p, %u, %p\n", debugstr_guid(rclsid), outer, cls_context, server_info, count, results);
+
+    if (!count || !results)
+        return E_INVALIDARG;
+
+    if (server_info)
+        FIXME("Server info is not supported.\n");
+
+    init_multi_qi(count, results, E_NOINTERFACE);
+
+    clsid = *rclsid;
+    if (!(cls_context & CLSCTX_APPCONTAINER))
+        CoGetTreatAsClass(rclsid, &clsid);
+
+    if (FAILED(hr = com_get_class_object(&clsid, cls_context, NULL, &IID_IClassFactory, (void **)&factory)))
+        return hr;
+
+    hr = IClassFactory_CreateInstance(factory, outer, results[0].pIID, (void **)&unk);
+    IClassFactory_Release(factory);
+    if (FAILED(hr))
+    {
+        if (hr == CLASS_E_NOAGGREGATION && outer)
+            FIXME("Class %s does not support aggregation\n", debugstr_guid(&clsid));
+        else
+            FIXME("no instance created for interface %s of class %s, hr %#x.\n",
+                    debugstr_guid(results[0].pIID), debugstr_guid(&clsid), hr);
+        return hr;
+    }
+
+    return return_multi_qi(unk, count, results, TRUE);
+}
+
+/***********************************************************************
+ *           CoGetClassObject    (combase.@)
+ */
+HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext,
+        COSERVERINFO *server_info, REFIID riid, void **obj)
+{
+    TRACE("%s, %#x, %s\n", debugstr_guid(rclsid), clscontext, debugstr_guid(riid));
+
+    return com_get_class_object(rclsid, clscontext, server_info, riid, obj);
+}
+
 /***********************************************************************
  *           CoFreeUnusedLibraries    (combase.@)
  */
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index 9d9b34640be..6e74cca1f24 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -82,7 +82,7 @@
 @ stdcall CoCreateGuid(ptr)
 @ stdcall CoCreateInstance(ptr ptr long ptr ptr)
 @ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr)
-@ stub CoCreateInstanceFromApp
+@ stdcall CoCreateInstanceFromApp(ptr ptr long ptr long ptr)
 @ stub CoCreateObjectInContext
 @ stub CoDeactivateObject
 @ stub CoDecodeProxy
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index a6f62ebfa99..8e73fdd16b4 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -14,6 +14,7 @@
 @ stdcall CoCreateGuid(ptr) combase.CoCreateGuid
 @ stdcall CoCreateInstance(ptr ptr long ptr ptr) combase.CoCreateInstance
 @ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) combase.CoCreateInstanceEx
+@ stdcall CoCreateInstanceFromApp(ptr ptr long ptr long ptr) combase.CoCreateInstanceFromApp
 @ stdcall CoDecrementMTAUsage(ptr) combase.CoDecrementMTAUsage
 @ stdcall CoDisableCallCancellation(ptr) combase.CoDisableCallCancellation
 @ stdcall CoDisconnectObject(ptr long) combase.CoDisconnectObject
diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c
index eb172aac28d..98b3ef642b8 100644
--- a/dlls/ole32/tests/compobj.c
+++ b/dlls/ole32/tests/compobj.c
@@ -80,6 +80,8 @@ static HRESULT (WINAPI * pCoIncrementMTAUsage)(CO_MTA_USAGE_COOKIE *cookie);
 static HRESULT (WINAPI * pCoDecrementMTAUsage)(CO_MTA_USAGE_COOKIE cookie);
 static LONG (WINAPI * pRegDeleteKeyExA)(HKEY, LPCSTR, REGSAM, DWORD);
 static LONG (WINAPI * pRegOverridePredefKey)(HKEY key, HKEY override);
+static HRESULT (WINAPI * pCoCreateInstanceFromApp)(REFCLSID clsid, IUnknown *outer, DWORD clscontext,
+        void *reserved, DWORD count, MULTI_QI *results);
 
 static BOOL   (WINAPI *pIsWow64Process)(HANDLE, LPBOOL);
 
@@ -2244,6 +2246,23 @@ static void test_TreatAsClass(void)
         pIP = NULL;
     }
 
+    if (pCoCreateInstanceFromApp)
+    {
+        MULTI_QI mqi = { 0 };
+
+        mqi.pIID = &IID_IInternetProtocol;
+        hr = pCoCreateInstanceFromApp(&deadbeef, NULL, CLSCTX_INPROC_SERVER, NULL, 1, &mqi);
+        ok(hr == REGDB_E_CLASSNOTREG, "Unexpected hr %#x.\n", hr);
+
+        hr = CoCreateInstance(&deadbeef, NULL, CLSCTX_INPROC_SERVER | CLSCTX_APPCONTAINER, &IID_IInternetProtocol,
+                (void **)&pIP);
+        ok(hr == REGDB_E_CLASSNOTREG, "Unexpected hr %#x.\n", hr);
+
+        hr = CoCreateInstance(&deadbeef, NULL, CLSCTX_INPROC_SERVER, &IID_IInternetProtocol, (void **)&pIP);
+        ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+        IUnknown_Release(pIP);
+    }
+
     hr = pCoTreatAsClass(&deadbeef, &CLSID_NULL);
     ok(hr == S_OK, "CoTreatAsClass failed: %08x\n", hr);
 
@@ -3943,6 +3962,7 @@ static void init_funcs(void)
     pCoGetApartmentType = (void*)GetProcAddress(hOle32, "CoGetApartmentType");
     pCoIncrementMTAUsage = (void*)GetProcAddress(hOle32, "CoIncrementMTAUsage");
     pCoDecrementMTAUsage = (void*)GetProcAddress(hOle32, "CoDecrementMTAUsage");
+    pCoCreateInstanceFromApp = (void*)GetProcAddress(hOle32, "CoCreateInstanceFromApp");
     pRegDeleteKeyExA = (void*)GetProcAddress(hAdvapi32, "RegDeleteKeyExA");
     pRegOverridePredefKey = (void*)GetProcAddress(hAdvapi32, "RegOverridePredefKey");
 
@@ -4075,6 +4095,107 @@ static void test_mta_usage(void)
     test_apt_type(APTTYPE_CURRENT, APTTYPEQUALIFIER_NONE);
 }
 
+static void test_CoCreateInstanceFromApp(void)
+{
+    static const CLSID *supported_classes[] =
+    {
+        &CLSID_InProcFreeMarshaler,
+        &CLSID_GlobalOptions,
+        &CLSID_StdGlobalInterfaceTable,
+    };
+    static const CLSID *unsupported_classes[] =
+    {
+        &CLSID_ManualResetEvent,
+    };
+    unsigned int i;
+    IUnknown *unk;
+    DWORD cookie;
+    MULTI_QI mqi;
+    HRESULT hr;
+    HANDLE handle;
+    ULONG_PTR actctx_cookie;
+
+    if (!pCoCreateInstanceFromApp)
+    {
+        win_skip("CoCreateInstanceFromApp() is not available.\n");
+        return;
+    }
+
+    CoInitialize(NULL);
+
+    for (i = 0; i < ARRAY_SIZE(supported_classes); ++i)
+    {
+        memset(&mqi, 0, sizeof(mqi));
+        mqi.pIID = &IID_IUnknown;
+        hr = pCoCreateInstanceFromApp(supported_classes[i], NULL, CLSCTX_INPROC_SERVER, NULL, 1, &mqi);
+        ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+        IUnknown_Release(mqi.pItf);
+
+        hr = CoCreateInstance(supported_classes[i], NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&unk);
+        ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+        IUnknown_Release(unk);
+    }
+
+    for (i = 0; i < ARRAY_SIZE(unsupported_classes); ++i)
+    {
+        memset(&mqi, 0, sizeof(mqi));
+        mqi.pIID = &IID_IUnknown;
+        hr = pCoCreateInstanceFromApp(unsupported_classes[i], NULL, CLSCTX_INPROC_SERVER, NULL, 1, &mqi);
+        ok(hr == REGDB_E_CLASSNOTREG, "Unexpected hr %#x.\n", hr);
+
+        hr = CoCreateInstance(unsupported_classes[i], NULL, CLSCTX_INPROC_SERVER | CLSCTX_APPCONTAINER,
+                &IID_IUnknown, (void **)&unk);
+        ok(hr == REGDB_E_CLASSNOTREG, "Unexpected hr %#x.\n", hr);
+
+        hr = CoCreateInstance(unsupported_classes[i], NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&unk);
+        ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+        IUnknown_Release(unk);
+    }
+
+    /* Locally registered classes are filtered out. */
+    hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, CLSCTX_INPROC_SERVER,
+            REGCLS_MULTIPLEUSE, &cookie);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void **)&unk);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER | CLSCTX_APPCONTAINER, NULL,
+            &IID_IClassFactory, (void **)&unk);
+todo_wine
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    hr = CoCreateInstance(&CLSID_WineOOPTest, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&unk);
+    ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+
+    hr = CoCreateInstance(&CLSID_WineOOPTest, NULL, CLSCTX_INPROC_SERVER | CLSCTX_APPCONTAINER,
+            &IID_IUnknown, (void **)&unk);
+    ok(hr == REGDB_E_CLASSNOTREG, "Unexpected hr %#x.\n", hr);
+
+    memset(&mqi, 0, sizeof(mqi));
+    mqi.pIID = &IID_IUnknown;
+    hr = pCoCreateInstanceFromApp(&CLSID_WineOOPTest, NULL, CLSCTX_INPROC_SERVER, NULL, 1, &mqi);
+    ok(hr == REGDB_E_CLASSNOTREG, "Unexpected hr %#x.\n", hr);
+
+    hr = CoRevokeClassObject(cookie);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    /* Activation context */
+    if ((handle = activate_context(actctx_manifest, &actctx_cookie)))
+    {
+        hr = CoCreateInstance(&IID_Testiface7, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&unk);
+        ok(hr == 0x80001235, "Unexpected hr %#x.\n", hr);
+
+        hr = CoCreateInstance(&IID_Testiface7, NULL, CLSCTX_INPROC_SERVER | CLSCTX_APPCONTAINER,
+                &IID_IUnknown, (void **)&unk);
+        ok(hr == 0x80001235, "Unexpected hr %#x.\n", hr);
+
+        deactivate_context(handle, actctx_cookie);
+    }
+
+    CoUninitialize();
+}
+
 START_TEST(compobj)
 {
     init_funcs();
@@ -4124,6 +4245,7 @@ START_TEST(compobj)
     test_implicit_mta();
     test_CoGetCurrentProcess();
     test_mta_usage();
+    test_CoCreateInstanceFromApp();
 
     DeleteFileA( testlib );
 }
diff --git a/include/objbase.h b/include/objbase.h
index e5a6b2a9faf..0a50d28e9d2 100644
--- a/include/objbase.h
+++ b/include/objbase.h
@@ -319,6 +319,8 @@ HRESULT WINAPI CoCreateInstanceEx(REFCLSID      rclsid,
 				  COSERVERINFO* pServerInfo,
 				  ULONG         cmq,
 				  MULTI_QI*     pResults);
+HRESULT WINAPI CoCreateInstanceFromApp(REFCLSID clsid, IUnknown *outer, DWORD clscontext, void *reserved,
+        DWORD count, MULTI_QI *results);
 
 HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults);
 HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults);
diff --git a/include/wtypes.idl b/include/wtypes.idl
index a6682212b5b..754258839d7 100644
--- a/include/wtypes.idl
+++ b/include/wtypes.idl
@@ -336,22 +336,31 @@ cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2")
 cpp_quote("#endif")
 
 typedef enum tagCLSCTX {
-  CLSCTX_INPROC_SERVER        = 0x1,
-  CLSCTX_INPROC_HANDLER       = 0x2,
-  CLSCTX_LOCAL_SERVER         = 0x4,
-  CLSCTX_INPROC_SERVER16      = 0x8,
-  CLSCTX_REMOTE_SERVER        = 0x10,
-  CLSCTX_INPROC_HANDLER16     = 0x20,
-  CLSCTX_INPROC_SERVERX86     = 0x40,
-  CLSCTX_INPROC_HANDLERX86    = 0x80,
-  CLSCTX_ESERVER_HANDLER      = 0x100,
-  CLSCTX_NO_CODE_DOWNLOAD     = 0x400,
-  CLSCTX_NO_CUSTOM_MARSHAL    = 0x1000,
-  CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
-  CLSCTX_NO_FAILURE_LOG       = 0x4000,
-  CLSCTX_DISABLE_AAA          = 0x8000,
-  CLSCTX_ENABLE_AAA           = 0x10000,
-  CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
+  CLSCTX_INPROC_SERVER          = 0x00000001,
+  CLSCTX_INPROC_HANDLER         = 0x00000002,
+  CLSCTX_LOCAL_SERVER           = 0x00000004,
+  CLSCTX_INPROC_SERVER16        = 0x00000008,
+  CLSCTX_REMOTE_SERVER          = 0x00000010,
+  CLSCTX_INPROC_HANDLER16       = 0x00000020,
+  CLSCTX_INPROC_SERVERX86       = 0x00000040,
+  CLSCTX_INPROC_HANDLERX86      = 0x00000080,
+  CLSCTX_ESERVER_HANDLER        = 0x00000100,
+  CLSCTX_NO_CODE_DOWNLOAD       = 0x00000400,
+  CLSCTX_NO_CUSTOM_MARSHAL      = 0x00001000,
+  CLSCTX_ENABLE_CODE_DOWNLOAD   = 0x00002000,
+  CLSCTX_NO_FAILURE_LOG         = 0x00004000,
+  CLSCTX_DISABLE_AAA            = 0x00008000,
+  CLSCTX_ENABLE_AAA             = 0x00010000,
+  CLSCTX_FROM_DEFAULT_CONTEXT   = 0x00020000,
+  CLSCTX_ACTIVATE_X86_SERVER    = 0x00040000,
+  CLSCTX_ACTIVATE_32_BIT_SERVER = CLSCTX_ACTIVATE_X86_SERVER,
+  CLSCTX_ACTIVATE_64_BIT_SERVER = 0x00080000,
+  CLSCTX_ENABLE_CLOAKING        = 0x00100000,
+  CLSCTX_APPCONTAINER           = 0x00400000,
+  CLSCTX_ACTIVATE_AAA_AS_IU     = 0x00800000,
+  CLSCTX_RESERVED6              = 0x01000000,
+  CLSCTX_ACTIVATE_ARM32_SERVER  = 0x02000000,
+  CLSCTX_PS_DLL                 = 0x80000000,
 } CLSCTX;
 
 cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)")
-- 
2.28.0




More information about the wine-devel mailing list