22#define WIN32_NO_STATUS
23#define USE_COM_CONTEXT_DEF
34#ifndef RTL_CONSTANT_STRING
35#define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
117 0, 0, { (
DWORD_PTR)(__FILE__
": cs_registered_psclsid_list") }
140 0, 0, { (
DWORD_PTR)(__FILE__
": registered_classes_cs") }
153 if ((apt->
oxid ==
cur->apartment_id) &&
157 object =
cur->object;
158 IUnknown_AddRef(
cur->object);
174 if (
id ==
spy->id &&
spy->spy)
227 attr.RootDirectory = 0;
235 attr.SecurityQualityOfService =
NULL;
263 attr.RootDirectory = hkey;
271 attr.SecurityQualityOfService =
NULL;
288 access &= ~KEY_WOW64_32KEY;
306 attr.RootDirectory = hkey;
314 attr.SecurityQualityOfService =
NULL;
355 static const WCHAR appidkeyW[] =
L"AppId\\";
438 IInitializeSpy_Release(
cursor->spy);
555 TRACE(
"%d\n", fLock);
570 if (!(
object =
malloc(
sizeof(*
object))))
573 object->refcount = 1;
575 hr = IGlobalOptions_QueryInterface(&
object->IGlobalOptions_iface,
riid,
ppv);
576 IGlobalOptions_Release(&
object->IGlobalOptions_iface);
695 WARN(
"Bad type %d\n",
vt);
713 TRACE(
"%p.\n", pvar);
721 memset(pvar, 0,
sizeof(*pvar));
755 IStream_Release(pvar->pStream);
792 for (
i = 0;
i < pvar->cabstr.cElems;
i++)
796 for (
i = 0;
i < pvar->calpstr.cElems;
i++)
800 for (
i = 0;
i < pvar->calpwstr.cElems;
i++)
815 WARN(
"Invalid/unsupported type %d\n", pvar->vt);
820 memset(pvar, 0,
sizeof(*pvar));
832 TRACE(
"%p, %p vt %04x.\n", pvarDest, pvarSrc, pvarSrc->vt);
839 *pvarDest = *pvarSrc;
870 if (pvarDest->pStream)
871 IStream_AddRef(pvarDest->pStream);
875 *pvarDest->puuid = *pvarSrc->puuid;
886 if (pvarSrc->pwszVal)
895 if (pvarSrc->blob.pBlobData)
897 len = pvarSrc->blob.cbSize;
899 CopyMemory(pvarDest->blob.pBlobData, pvarSrc->blob.pBlobData,
len);
906 if (pvarSrc->pclipdata)
908 len = pvarSrc->pclipdata->cbSize -
sizeof(pvarSrc->pclipdata->ulClipFmt);
910 pvarDest->pclipdata->cbSize = pvarSrc->pclipdata->cbSize;
911 pvarDest->pclipdata->ulClipFmt = pvarSrc->pclipdata->ulClipFmt;
913 CopyMemory(pvarDest->pclipdata->pClipData, pvarSrc->pclipdata->pClipData,
len);
924 case VT_I1: elemSize =
sizeof(pvarSrc->cVal);
break;
925 case VT_UI1: elemSize =
sizeof(pvarSrc->bVal);
break;
926 case VT_I2: elemSize =
sizeof(pvarSrc->iVal);
break;
927 case VT_UI2: elemSize =
sizeof(pvarSrc->uiVal);
break;
928 case VT_BOOL: elemSize =
sizeof(pvarSrc->boolVal);
break;
929 case VT_I4: elemSize =
sizeof(pvarSrc->lVal);
break;
930 case VT_UI4: elemSize =
sizeof(pvarSrc->ulVal);
break;
931 case VT_R4: elemSize =
sizeof(pvarSrc->fltVal);
break;
932 case VT_R8: elemSize =
sizeof(pvarSrc->dblVal);
break;
933 case VT_ERROR: elemSize =
sizeof(pvarSrc->scode);
break;
934 case VT_I8: elemSize =
sizeof(pvarSrc->hVal);
break;
935 case VT_UI8: elemSize =
sizeof(pvarSrc->uhVal);
break;
936 case VT_CY: elemSize =
sizeof(pvarSrc->cyVal);
break;
937 case VT_DATE: elemSize =
sizeof(pvarSrc->date);
break;
938 case VT_FILETIME: elemSize =
sizeof(pvarSrc->filetime);
break;
939 case VT_CLSID: elemSize =
sizeof(*pvarSrc->puuid);
break;
940 case VT_CF: elemSize =
sizeof(*pvarSrc->pclipdata);
break;
941 case VT_BSTR: elemSize =
sizeof(pvarSrc->bstrVal);
break;
942 case VT_LPSTR: elemSize =
sizeof(pvarSrc->pszVal);
break;
943 case VT_LPWSTR: elemSize =
sizeof(pvarSrc->pwszVal);
break;
944 case VT_VARIANT: elemSize =
sizeof(*pvarSrc->pvarVal);
break;
950 len = pvarSrc->capropvar.cElems;
959 FIXME(
"Copy clipformats\n");
971 strLen =
lstrlenA(pvarSrc->calpstr.pElems[
i]) + 1;
973 memcpy(pvarDest->calpstr.pElems[
i],
974 pvarSrc->calpstr.pElems[
i], strLen);
982 strLen = (
lstrlenW(pvarSrc->calpwstr.pElems[
i]) + 1) *
985 memcpy(pvarDest->calpstr.pElems[
i],
986 pvarSrc->calpstr.pElems[
i], strLen);
990 CopyMemory(pvarDest->capropvar.pElems, pvarSrc->capropvar.pElems,
len * elemSize);
994 pvarDest->uhVal.QuadPart = 0;
998 WARN(
"Invalid/unsupported type %d\n", pvarSrc->vt);
1032 DWORD *imp_level,
void **auth_info,
DWORD *capabilities)
1037 TRACE(
"%p, %p, %p, %p, %p, %p, %p, %p.\n",
proxy, authn_service, authz_service, servername, authn_level, imp_level,
1038 auth_info, capabilities);
1044 authn_level, imp_level, auth_info, capabilities);
1061 TRACE(
"%p, %lu, %lu, %p, %lu, %lu, %p, %#lx.\n",
proxy, authn_service, authz_service, servername,
1062 authn_level, imp_level, auth_info, capabilities);
1067 hr = IClientSecurity_SetBlanket(
client_security,
proxy, authn_service, authz_service, servername, authn_level,
1068 imp_level, auth_info, capabilities);
1106 TRACE(
"%p, %p, %p, %p, %p, %p, %p.\n", authn_service, authz_service, servername, authn_level, imp_level,
1107 privs, capabilities);
1112 hr = IServerSecurity_QueryBlanket(server_security, authn_service, authz_service, servername, authn_level,
1113 imp_level, privs, capabilities);
1114 IServerSecurity_Release(server_security);
1133 hr = IServerSecurity_ImpersonateClient(server_security);
1134 IServerSecurity_Release(server_security);
1153 hr = IServerSecurity_RevertToSelf(server_security);
1154 IServerSecurity_Release(server_security);
1164 SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
void *reserved1,
DWORD authn_level,
1167 FIXME(
"%p, %ld, %p, %p, %ld, %ld, %p, %ld, %p stub\n",
sd, cAuthSvc, asAuthSvc, reserved1, authn_level,
1233 if (!clsidOld || !clsidNew)
1236 *clsidNew = *clsidOld;
1253 ERR(
"Failed to get CLSID from string %s, hr %#lx.\n",
debugstr_w(buffW),
hr);
1264 ACTCTX_SECTION_KEYED_DATA
data;
1329 if (!(((
c >=
'0') && (
c <=
'9')) ||
1330 ((
c >=
'a') && (
c <=
'f')) ||
1331 ((
c >=
'A') && (
c <=
'F'))))
1338 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1341 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
1342 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1344 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
1351 if (!
s ||
s[0] !=
'{')
1353 memset(
id, 0,
sizeof(*
id));
1354 if (!
s)
return TRUE;
1363 for (
i = 1;
i < 9; ++
i)
1368 if (
s[9] !=
'-')
return FALSE;
1371 for (
i = 10;
i < 14; ++
i)
1376 if (
s[14] !=
'-')
return FALSE;
1379 for (
i = 15;
i < 19; ++
i)
1384 if (
s[19] !=
'-')
return FALSE;
1386 for (
i = 20;
i < 37;
i += 2)
1390 if (
s[
i] !=
'-')
return FALSE;
1397 if (
s[37] ==
'}' &&
s[38] ==
'\0')
1406 LONG buf2len =
sizeof(buf2);
1439 ACTCTX_SECTION_KEYED_DATA
data;
1498 memset(iid, 0,
sizeof(*iid));
1553 index = fetched = 1;
1558 mqi[
index].hr = IUnknown_QueryInterface(unk, mqi[
index].pIID, (
void **)&mqi[
index].pItf);
1564 IUnknown_Release(unk);
1588 FIXME(
"() non-NULL server_info not supported\n");
1597 ERR(
"Failed to get CLSID from a file.\n");
1616 IUnknown_Release(
obj);
1620 hr = IPersistFile_Load(pf,
filename, grfmode);
1621 IPersistFile_Release(pf);
1627 IUnknown_Release(
obj);
1647 FIXME(
"() non-NULL server_info not supported\n");
1657 ERR(
"Failed to get CLSID from a storage.\n");
1661 rclsid = &
stat.clsid;
1671 ERR(
"failed to get IPersistStorage\n");
1675 IPersistStorage_Load(ps,
storage);
1676 IPersistStorage_Release(ps);
1688 MULTI_QI multi_qi = { .pIID =
riid };
1697 *
obj = multi_qi.pItf;
1707 TRACE(
"%s, %p, %#lx, %p, %lu, %p\n",
debugstr_guid(rclsid),
outer, cls_context,
server_info,
1729 ERR(
"apartment not initialised\n");
1754 ACTCTX_SECTION_KEYED_DATA
data;
1759 ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION, rclsid, &
data))
1781 hr = IUnknown_QueryInterface(registered_obj,
riid,
obj);
1782 IUnknown_Release(registered_obj);
1806 clsreg.
u.
hkey = hkey;
1841 clsreg.
u.
hkey = hkey;
1869 FIXME (
"CLSCTX_REMOTE_SERVER not supported\n");
1890 TRACE(
"%s, %p, %#lx, %p, %lu, %p\n",
debugstr_guid(rclsid),
outer, cls_context,
server_info,
count,
results);
1896 FIXME(
"Server info is not supported.\n");
1901 if (!(cls_context & CLSCTX_APPCONTAINER))
1908 IClassFactory_Release(
factory);
1914 FIXME(
"no instance created for interface %s of class %s, hr %#lx.\n",
1998 hr = IInitializeSpy_QueryInterface(
spy, &IID_IInitializeSpy, (
void **)&
spy);
2005 IInitializeSpy_Release(
spy);
2045 IInitializeSpy_Release(
spy->spy);
2072 DWORD start_time, wait_flags = 0;
2115 TRACE(
"waiting for rpc completion or window message\n");
2140 DWORD be_handled = IMessageFilter_MessagePending(apt->
filter, 0 ,
now - start_time, pendingtype);
2142 TRACE(
"IMessageFilter_MessagePending returned %ld\n", be_handled);
2146 case PENDINGMSG_CANCELCALL:
2147 WARN(
"call canceled\n");
2150 case PENDINGMSG_WAITNOPROCESS:
2151 case PENDINGMSG_WAITDEFPROCESS:
2174 TRACE(
"Received WM_QUIT message\n");
2180 TRACE(
"Received message whilst waiting for RPC: 0x%04x\n",
msg.message);
2190 TRACE(
"Waiting for rpc completion\n");
2232 WARN(
"Can't set message filter in MTA or uninitialized apt\n");
2237 IMessageFilter_AddRef(
filter);
2241 old_filter = apt->
filter;
2247 *ret_filter = old_filter;
2248 else if (old_filter)
2249 IMessageFilter_Release(old_filter);
2296 static const WCHAR interfaceW[] =
L"Interface\\";
2297 static const WCHAR psW[] =
L"\\ProxyStubClsid32";
2299 ACTCTX_SECTION_KEYED_DATA
data;
2309 ERR(
"apartment not initialised\n");
2322 *pclsid =
cur->clsid;
2335 *pclsid = ifaceps->
iid;
2367 ERR(
"apartment not initialised\n");
2377 cur->clsid = *rclsid;
2391 cur->clsid = *rclsid;
2477 TRACE(
"%p\n", apttype);
2492 TRACE(
"%p\n", thdtype);
2509 TRACE(
"%p\n", logical_thread_id);
2535 return IComThreadingInfo_QueryInterface(&
context->IComThreadingInfo_iface,
riid,
obj);
2541 return IComThreadingInfo_AddRef(&
context->IComThreadingInfo_iface);
2547 return IComThreadingInfo_Release(&
context->IComThreadingInfo_iface);
2553 FIXME(
"%p, %p, %p, %s, %d, %p\n", iface,
callback,
param,
debugstr_guid(
riid),
method,
punk);
2569 return IComThreadingInfo_QueryInterface(&
context->IComThreadingInfo_iface,
riid,
obj);
2575 return IComThreadingInfo_AddRef(&
context->IComThreadingInfo_iface);
2581 return IComThreadingInfo_Release(&
context->IComThreadingInfo_iface);
2614 FIXME(
"%p\n", iface);
2619 FIXME(
"%p\n", iface);
2624 FIXME(
"%p\n", iface);
2629 FIXME(
"%p\n", iface);
2634 FIXME(
"%p\n", iface);
2639 FIXME(
"%p\n", iface);
2644 FIXME(
"%p\n", iface);
2677 ERR(
"apartment not initialised\n");
2760 ERR(
"apartment not initialised\n");
2784 if (
spy->spy)
continue;
2818 TRACE(
"Initializing the COM libraries\n");
2863 ERR(
"Mismatched CoUninitialize\n");
2885 TRACE(
"Releasing the COM libraries\n");
2890 else if (lockcount < 1)
2892 ERR(
"Unbalanced lock count %ld\n", lockcount);
2943 *
type = APTTYPE_CURRENT;
2973 static LONG next_cookie;
2987 ERR(
"COM was not initialized\n");
3008 IUnknown_Release(found_object);
3013 IUnknown_Release(found_object);
3019 newclass =
calloc(1,
sizeof(*newclass));
3026 newclass->
clsid = *rclsid;
3035 IUnknown_AddRef(newclass->
object);
3055 IStream_Release(marshal_stream);
3066 if (
entry->clscontext & CLSCTX_LOCAL_SERVER)
3069 IUnknown_Release(
entry->object);
3082 if (
cur->clscontext & CLSCTX_LOCAL_SERVER)
3097 if (
cur->apartment_id == apt->
oxid)
3117 ERR(
"COM was not initialized\n");
3128 if (
cur->apartment_id == apt->
oxid)
3202 hr = IUnknown_QueryInterface(
object, &IID_IMarshal, (
void **)&marshal);
3205 hr = IMarshal_DisconnectObject(marshal,
reserved);
3206 IMarshal_Release(marshal);
3212 ERR(
"apartment not initialised\n");
3242 TRACE(
"%p, %d, %d\n",
object,
lock, last_unlock_releases);
3246 ERR(
"apartment not initialised\n");
3253 WARN(
"stub object not found %p\n",
object);
3334 FIXME(
"%p\n",
object);
3364 FIXME(
"%p stub\n", surrogate);
#define CO_E_NOTINITIALIZED
static struct _test_info results[8]
#define DECLSPEC_HOTPATCH
HRESULT apartment_get_inproc_class_object(struct apartment *apt, const struct class_reg_data *regdata, REFCLSID rclsid, REFIID riid, DWORD class_context, void **ppv)
void apartment_global_cleanup(void)
struct apartment * apartment_get_mta(void)
HRESULT enter_apartment(struct tlsdata *data, DWORD model)
HRESULT apartment_increment_mta_usage(CO_MTA_USAGE_COOKIE *cookie)
HRESULT apartment_get_local_server_stream(struct apartment *apt, IStream **ret)
void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
void leave_apartment(struct tlsdata *data)
void apartment_release(struct apartment *apt)
void apartment_decrement_mta_usage(CO_MTA_USAGE_COOKIE cookie)
struct apartment * apartment_get_current_or_mta(void)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
void quit(int argc, const char *argv[])
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
const GUID IID_IClassFactory
#define RegCloseKey(hKey)
const CLSID CLSID_GlobalOptions
const CLSID CLSID_ManualResetEvent
const CLSID CLSID_InProcFreeMarshaler
const CLSID CLSID_StdGlobalInterfaceTable
HRESULT rpc_revoke_local_server(unsigned int cookie)
ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases)
struct stub_manager * get_stub_manager_from_object(struct apartment *apt, IUnknown *object, BOOL alloc)
HRESULT rpc_register_local_server(REFCLSID clsid, IStream *stream, DWORD flags, unsigned int *cookie)
ULONG stub_manager_int_release(struct stub_manager *stub_manager)
void stub_manager_disconnect(struct stub_manager *m)
HRESULT rpc_register_channel_hook(REFGUID rguid, IChannelHook *hook)
HRESULT rpcss_get_next_seqid(DWORD *id)
static struct apartment * com_get_current_apt(void)
HRESULT rpc_get_local_class_object(REFCLSID rclsid, REFIID riid, void **obj)
void rpc_unregister_channel_hooks(void)
static HRESULT com_get_tlsdata(struct tlsdata **data)
ULONG stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak)
static const WCHAR clsidW[]
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static void com_cleanup_tlsdata(void)
static struct thread_context * impl_from_IComThreadingInfo(IComThreadingInfo *iface)
HRESULT WINAPI CoInitializeWOW(DWORD arg1, DWORD arg2)
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID(LPCOLESTR progid, CLSID *clsid)
HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
static HRESULT WINAPI global_options_Set(IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR value)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **obj)
DWORD WINAPI CoGetCurrentProcess(void)
static LSTATUS create_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
HRESULT WINAPI InternalTlsAllocData(struct tlsdata **data)
static BOOL is_valid_hex(WCHAR c)
ULONG WINAPI CoAddRefServerProcess(void)
static IClassFactory global_options_factory
HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, CLSID *clsidNew)
static HRESULT get_builtin_class_factory(REFCLSID rclsid, REFIID riid, void **obj)
static void com_revoke_local_servers(void)
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
HRESULT WINAPI Ole32DllGetClassObject(REFCLSID rclsid, REFIID riid, void **obj)
HRESULT WINAPI CoIncrementMTAUsage(CO_MTA_USAGE_COOKIE *cookie)
static void WINAPI thread_object_context_Reserved6(IObjContext *iface)
HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO *server_info, CLSID *rclsid, IUnknown *outer, DWORD cls_context, IStorage *storage, DWORD count, MULTI_QI *results)
static HRESULT WINAPI class_factory_LockServer(IClassFactory *iface, BOOL fLock)
static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr)
HRESULT WINAPI CoRegisterMessageFilter(IMessageFilter *filter, IMessageFilter **ret_filter)
HRESULT WINAPI CoGetDefaultContext(APTTYPE type, REFIID riid, void **obj)
static HRESULT WINAPI global_options_Query(IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR *value)
HRESULT WINAPI CoRegisterSurrogate(ISurrogate *surrogate)
static HRESULT propvar_validatetype(VARTYPE vt)
IUnknown * com_get_registered_class_object(const struct apartment *apt, REFCLSID rclsid, DWORD clscontext)
HRESULT open_appidkey_from_clsid(REFCLSID clsid, REGSAM access, HKEY *subkey)
static HRESULT WINAPI thread_context_info_GetCurrentApartmentType(IComThreadingInfo *iface, APTTYPE *apttype)
static const IClassFactoryVtbl global_options_factory_vtbl
static struct list registered_proxystubs
static HRESULT WINAPI thread_object_context_QueryInterface(IObjContext *iface, REFIID riid, void **obj)
HRESULT WINAPI CoQueryClientBlanket(DWORD *authn_service, DWORD *authz_service, OLECHAR **servername, DWORD *authn_level, DWORD *imp_level, RPC_AUTHZ_HANDLE *privs, DWORD *capabilities)
#define RTL_CONSTANT_STRING(s)
static ULONG WINAPI thread_object_context_AddRef(IObjContext *iface)
HRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid)
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx(DWORD unload_delay, DWORD reserved)
static HKEY classes_root_hkey
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, COSERVERINFO *server_info, ULONG count, MULTI_QI *results)
static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk)
static HRESULT WINAPI thread_context_info_QueryInterface(IComThreadingInfo *iface, REFIID riid, void **obj)
HRESULT WINAPI CoRegisterInitializeSpy(IInitializeSpy *spy, ULARGE_INTEGER *cookie)
static HRESULT get_ps_clsid_from_registry(const WCHAR *path, REGSAM access, CLSID *pclsid)
static void WINAPI thread_object_context_Reserved4(IObjContext *iface)
BOOL WINAPI CoIsHandlerConnected(IUnknown *object)
HRESULT WINAPI CoGetCallerTID(DWORD *tid)
void WINAPI DestroyRunningObjectTable(void)
HRESULT WINAPI CLSIDFromProgIDEx(LPCOLESTR progid, CLSID *clsid)
static void WINAPI thread_object_context_Reserved3(IObjContext *iface)
static void WINAPI thread_object_context_Reserved5(IObjContext *iface)
HRESULT WINAPI CoDisableCallCancellation(void *reserved)
static CRITICAL_SECTION_DEBUG registered_classes_cs_debug
HRESULT WINAPI StringFromCLSID(REFCLSID clsid, LPOLESTR *str)
HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject(DWORD cookie)
HRESULT WINAPI CoSetProxyBlanket(IUnknown *proxy, DWORD authn_service, DWORD authz_service, OLECHAR *servername, DWORD authn_level, DWORD imp_level, void *auth_info, DWORD capabilities)
HRESULT WINAPI CoGetContextToken(ULONG_PTR *token)
void apartment_revoke_all_classes(const struct apartment *apt)
static ULONG WINAPI thread_object_context_Release(IObjContext *iface)
HRESULT WINAPI CoEnableCallCancellation(void *reserved)
HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc)
static void WINAPI thread_object_context_Reserved7(IObjContext *iface)
HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR sd, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE *asAuthSvc, void *reserved1, DWORD authn_level, DWORD imp_level, void *reserved2, DWORD capabilities, void *reserved3)
static struct thread_context * impl_from_IContextCallback(IContextCallback *iface)
static HRESULT WINAPI thread_context_info_SetCurrentLogicalThreadId(IComThreadingInfo *iface, REFGUID logical_thread_id)
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *progid)
static HRESULT WINAPI thread_object_context_GetProperty(IObjContext *iface, REFGUID propid, CPFLAGS *flags, IUnknown **punk)
static HKEY get_classes_root_hkey(HKEY hkey, REGSAM access)
static struct init_spy * get_spy_entry(struct tlsdata *tlsdata, unsigned int id)
static BOOL com_peek_message(struct apartment *apt, MSG *msg)
static CRITICAL_SECTION cs_registered_ps
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
static HRESULT WINAPI thread_object_context_SetProperty(IObjContext *iface, REFGUID propid, CPFLAGS flags, IUnknown *punk)
static HKEY create_classes_root_hkey(DWORD access)
static NTSTATUS create_key(HKEY *retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr)
static struct thread_context * impl_from_IObjContext(IObjContext *iface)
static ULONG WINAPI class_factory_Release(IClassFactory *iface)
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries(void)
HRESULT WINAPI CoGetCallState(int arg1, ULONG *arg2)
static HRESULT WINAPI thread_object_context_RemoveProperty(IObjContext *iface, REFGUID propid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
static const IObjContextVtbl thread_object_context_vtbl
HRESULT WINAPI CoDisconnectObject(IUnknown *object, DWORD reserved)
HRESULT WINAPI CoGetObjectContext(REFIID riid, void **ppv)
static HRESULT WINAPI thread_context_callback_ContextCallback(IContextCallback *iface, PFNCONTEXTCALL callback, ComCallData *param, REFIID riid, int method, IUnknown *punk)
HRESULT WINAPI CoGetCallContext(REFIID riid, void **obj)
static ULONG WINAPI thread_context_info_Release(IComThreadingInfo *iface)
HRESULT WINAPI CoSwitchCallContext(IUnknown *context, IUnknown **old_context)
HRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier)
static const IComThreadingInfoVtbl thread_context_info_vtbl
static LONG com_server_process_refcount
HRESULT WINAPI CoCreateInstanceFromApp(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, void *server_info, ULONG count, MULTI_QI *results)
static void propvar_free_cf_array(ULONG count, CLIPDATA *data)
static void unlock_init_spies(struct tlsdata *tlsdata)
static void com_revoke_all_ps_clsids(void)
static ULONG WINAPI thread_context_callback_Release(IContextCallback *iface)
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, LPVOID reserved)
static ULONG WINAPI global_options_Release(IGlobalOptions *iface)
static CRITICAL_SECTION_DEBUG psclsid_cs_debug
static HRESULT WINAPI thread_context_info_GetCurrentThreadType(IComThreadingInfo *iface, THDTYPE *thdtype)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
HRESULT WINAPI CoSuspendClassObjects(void)
static const IContextCallbackVtbl thread_context_callback_vtbl
static HRESULT WINAPI thread_context_callback_QueryInterface(IContextCallback *iface, REFIID riid, void **obj)
HRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid)
HRESULT WINAPI CoCreateGuid(GUID *guid)
HRESULT WINAPI CoResumeClassObjects(void)
static ULONG WINAPI thread_context_info_AddRef(IComThreadingInfo *iface)
static ULONG WINAPI global_options_AddRef(IGlobalOptions *iface)
HRESULT WINAPI CoImpersonateClient(void)
HRESULT WINAPI CoCopyProxy(IUnknown *proxy, IUnknown **proxy_copy)
static HRESULT WINAPI thread_object_context_EnumContextProps(IObjContext *iface, IEnumContextProps **props)
static struct global_options * impl_from_IGlobalOptions(IGlobalOptions *iface)
static HRESULT com_get_class_object(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
HRESULT WINAPI CoGetActivationState(GUID guid, DWORD arg2, DWORD *arg3)
static void com_revoke_class_object(struct registered_class *entry)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
static void lock_init_spies(struct tlsdata *tlsdata)
HRESULT WINAPI CoRegisterSurrogateEx(REFGUID guid, void *reserved)
static HRESULT WINAPI global_options_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetInstanceFromFile(COSERVERINFO *server_info, CLSID *rclsid, IUnknown *outer, DWORD cls_context, DWORD grfmode, OLECHAR *filename, DWORD count, MULTI_QI *results)
HRESULT WINAPI CoRegisterChannelHook(REFGUID guidExtension, IChannelHook *channel_hook)
HRESULT WINAPI CoRevertToSelf(void)
ULONG WINAPI CoReleaseServerProcess(void)
static BOOL guid_from_string(LPCWSTR s, GUID *id)
HRESULT WINAPI CoQueryProxyBlanket(IUnknown *proxy, DWORD *authn_service, DWORD *authz_service, OLECHAR **servername, DWORD *authn_level, DWORD *imp_level, void **auth_info, DWORD *capabilities)
HRESULT open_key_for_clsid(REFCLSID clsid, const WCHAR *keyname, REGSAM access, HKEY *subkey)
static LSTATUS open_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
static HRESULT WINAPI global_options_QueryInterface(IGlobalOptions *iface, REFIID riid, void **ppv)
HRESULT WINAPI CoRevokeInitializeSpy(ULARGE_INTEGER cookie)
HRESULT WINAPI CoLockObjectExternal(IUnknown *object, BOOL lock, BOOL last_unlock_releases)
BOOL WINAPI InternalIsProcessInitialized(void)
static const BYTE guid_conv_table[256]
HRESULT WINAPI CoFileTimeNow(FILETIME *filetime)
static CRITICAL_SECTION registered_classes_cs
static ULONG WINAPI thread_context_callback_AddRef(IContextCallback *iface)
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
static HRESULT clsid_from_string_reg(LPCOLESTR progid, CLSID *clsid)
static void WINAPI thread_object_context_Reserved1(IObjContext *iface)
static struct list registered_classes
static ULONG WINAPI class_factory_AddRef(IClassFactory *iface)
static void WINAPI thread_object_context_Reserved2(IObjContext *iface)
static LONG com_lockcount
static HRESULT WINAPI thread_context_info_GetCurrentLogicalThreadId(IComThreadingInfo *iface, GUID *logical_thread_id)
static const IGlobalOptionsVtbl global_options_vtbl
HRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id)
HRESULT WINAPI CoDecrementMTAUsage(CO_MTA_USAGE_COOKIE cookie)
HRESULT WINAPI CoWaitForMultipleHandles(DWORD flags, DWORD timeout, ULONG handle_count, HANDLE *handles, DWORD *index)
HRESULT WINAPI FreePropVariantArray(ULONG count, PROPVARIANT *rgvars)
static HRESULT WINAPI class_factory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid, IUnknown *object, DWORD clscontext, DWORD flags, DWORD *cookie)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
#define DLL_THREAD_DETACH
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define GetCurrentProcess()
#define ERROR_INVALID_HANDLE
VOID WINAPI ReleaseActCtx(IN HANDLE hActCtx)
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, LPCWSTR lpSearchStr, PACTCTX_SECTION_KEYED_DATA pInfo)
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP size_t __cdecl strlen(const char *)
HRESULT WINAPI GetClassFile(LPCOLESTR filePathName, CLSID *pclsid)
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLuint GLuint GLuint GLuint arg1
GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg3
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
GLenum GLuint GLenum GLsizei const GLchar * buf
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLuint GLint GLboolean GLint GLenum access
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
#define InterlockedExchangeAdd
#define InterlockedCompareExchangePointer
static const BOOL is_win64
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static IPrintDialogCallback callback
static APTTYPEQUALIFIER * qualifier
static IUnknown DWORD clscontext
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSTATUS NTAPI NtCreateKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex, IN PUNICODE_STRING Class OPTIONAL, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
@ APTTYPEQUALIFIER_IMPLICIT_MTA
enum _APTTYPEQUALIFIER APTTYPEQUALIFIER
@ THDTYPE_PROCESSMESSAGES
BSTR WINAPI SysAllocString(LPCOLESTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
const GUID IID_IPersistStorage
const GUID IID_IPersistFile
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2)
#define OBJ_CASE_INSENSITIVE
static unsigned __int64 next
RPC_STATUS WINAPI UuidCreate(UUID *Uuid)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
PUNICODE_STRING ObjectName
LIST_ENTRY ProcessLocksList
union class_reg_data::@323 u
enum class_reg_data_origin origin
struct class_reg_data::@323::@324 actctx
DWORD miscstatusthumbnail
IGlobalOptions IGlobalOptions_iface
PMInterfacePointer object
unsigned int rpcss_cookie
IComThreadingInfo IComThreadingInfo_iface
IObjContext IObjContext_iface
IContextCallback IContextCallback_iface
CO_MTA_USAGE_COOKIE implicit_mta_cookie
IObjContext * context_token
LONG pending_call_count_server
DWORD WINAPI WaitForMultipleObjectsEx(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds, IN BOOL bAlertable)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
#define STATUS_OBJECT_NAME_NOT_FOUND
static EFI_HANDLE * handles
static const WCHAR props[]
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetCurrentThreadId(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define REGDB_E_CLASSNOTREG
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define CO_E_CANCEL_DISABLED
#define RPC_E_WRONG_THREAD
#define DISP_E_BADVARTYPE
#define REGDB_E_READREGDB
#define REGDB_E_IIDNOTREG
#define RPC_E_CALL_CANCELED
#define RPC_S_CALLPENDING
#define CLASS_E_NOAGGREGATION
#define RPC_E_CALL_COMPLETE
#define STG_E_INVALIDPARAMETER
#define RPC_S_UUID_LOCAL_ONLY
#define CO_S_NOTALLINTERFACES
#define CO_E_NOT_SUPPORTED
#define CLASS_E_CLASSNOTAVAILABLE
#define REGDB_E_KEYMISSING
#define HKEY_CLASSES_ROOT
BOOL WINAPI TranslateMessage(_In_ const MSG *)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define QS_ALLPOSTMESSAGE
DWORD WINAPI MsgWaitForMultipleObjectsEx(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask, _In_ DWORD dwFlags)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)