ReactOS 0.4.16-dev-2320-ge1853c6
combase.c File Reference
#include "ntstatus.h"
#include "objbase.h"
#include "ctxtcall.h"
#include "oleauto.h"
#include "dde.h"
#include "winternl.h"
#include "combase_private.h"
#include "wine/debug.h"
Include dependency graph for combase.c:

Go to the source code of this file.

Classes

struct  comclassredirect_data
 
struct  ifacepsredirect_data
 
struct  progidredirect_data
 
struct  init_spy
 
struct  registered_ps
 
struct  registered_class
 
struct  global_options
 
struct  thread_context
 

Macros

#define COBJMACROS
 
#define WIN32_NO_STATUS
 
#define USE_COM_CONTEXT_DEF
 
#define RTL_CONSTANT_STRING(s)   { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ole)
 
void WINAPI DestroyRunningObjectTable (void)
 
HRESULT WINAPI Ole32DllGetClassObject (REFCLSID rclsid, REFIID riid, void **obj)
 
IUnknowncom_get_registered_class_object (const struct apartment *apt, REFCLSID rclsid, DWORD clscontext)
 
static struct init_spyget_spy_entry (struct tlsdata *tlsdata, unsigned int id)
 
static NTSTATUS create_key (HKEY *retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr)
 
static HKEY create_classes_root_hkey (DWORD access)
 
static HKEY get_classes_root_hkey (HKEY hkey, REGSAM access)
 
static LSTATUS create_classes_key (HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
 
static LSTATUS open_classes_key (HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
 
HRESULT open_key_for_clsid (REFCLSID clsid, const WCHAR *keyname, REGSAM access, HKEY *subkey)
 
HRESULT open_appidkey_from_clsid (REFCLSID clsid, REGSAM access, HKEY *subkey)
 
BOOL WINAPI InternalIsProcessInitialized (void)
 
HRESULT WINAPI InternalTlsAllocData (struct tlsdata **data)
 
static void com_cleanup_tlsdata (void)
 
static struct global_optionsimpl_from_IGlobalOptions (IGlobalOptions *iface)
 
static HRESULT WINAPI global_options_QueryInterface (IGlobalOptions *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI global_options_AddRef (IGlobalOptions *iface)
 
static ULONG WINAPI global_options_Release (IGlobalOptions *iface)
 
static HRESULT WINAPI global_options_Set (IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR value)
 
static HRESULT WINAPI global_options_Query (IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR *value)
 
static HRESULT WINAPI class_factory_QueryInterface (IClassFactory *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI class_factory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI class_factory_Release (IClassFactory *iface)
 
static HRESULT WINAPI class_factory_LockServer (IClassFactory *iface, BOOL fLock)
 
static HRESULT WINAPI global_options_CreateInstance (IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
 
static HRESULT get_builtin_class_factory (REFCLSID rclsid, REFIID riid, void **obj)
 
HRESULT WINAPI FreePropVariantArray (ULONG count, PROPVARIANT *rgvars)
 
static HRESULT propvar_validatetype (VARTYPE vt)
 
static void propvar_free_cf_array (ULONG count, CLIPDATA *data)
 
HRESULT WINAPI PropVariantClear (PROPVARIANT *pvar)
 
HRESULT WINAPI PropVariantCopy (PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc)
 
HRESULT WINAPI CoFileTimeNow (FILETIME *filetime)
 
HRESULT WINAPI CoCreateGuid (GUID *guid)
 
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 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 CoCopyProxy (IUnknown *proxy, IUnknown **proxy_copy)
 
HRESULT WINAPI CoQueryClientBlanket (DWORD *authn_service, DWORD *authz_service, OLECHAR **servername, DWORD *authn_level, DWORD *imp_level, RPC_AUTHZ_HANDLE *privs, DWORD *capabilities)
 
HRESULT WINAPI CoImpersonateClient (void)
 
HRESULT WINAPI CoRevertToSelf (void)
 
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)
 
HRESULT WINAPI CoGetObjectContext (REFIID riid, void **ppv)
 
HRESULT WINAPI CoGetDefaultContext (APTTYPE type, REFIID riid, void **obj)
 
HRESULT WINAPI CoGetCallState (int arg1, ULONG *arg2)
 
HRESULT WINAPI CoGetActivationState (GUID guid, DWORD arg2, DWORD *arg3)
 
HRESULT WINAPI CoGetTreatAsClass (REFCLSID clsidOld, CLSID *clsidNew)
 
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID (REFCLSID clsid, LPOLESTR *progid)
 
static BOOL is_valid_hex (WCHAR c)
 
static BOOL guid_from_string (LPCWSTR s, GUID *id)
 
static HRESULT clsid_from_string_reg (LPCOLESTR progid, CLSID *clsid)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID (LPCOLESTR progid, CLSID *clsid)
 
HRESULT WINAPI CLSIDFromProgIDEx (LPCOLESTR progid, CLSID *clsid)
 
HRESULT WINAPI CLSIDFromString (LPCOLESTR str, LPCLSID clsid)
 
HRESULT WINAPI IIDFromString (LPCOLESTR str, IID *iid)
 
HRESULT WINAPI StringFromCLSID (REFCLSID clsid, LPOLESTR *str)
 
INT WINAPI StringFromGUID2 (REFGUID guid, LPOLESTR str, INT cmax)
 
static void init_multi_qi (DWORD count, MULTI_QI *mqi, HRESULT hr)
 
static HRESULT return_multi_qi (IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk)
 
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 CoGetInstanceFromIStorage (COSERVERINFO *server_info, CLSID *rclsid, IUnknown *outer, DWORD cls_context, IStorage *storage, DWORD count, MULTI_QI *results)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance (REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
 
HRESULT WINAPI CoCreateInstanceFromApp (REFCLSID rclsid, IUnknown *outer, DWORD cls_context, void *server_info, ULONG count, MULTI_QI *results)
 
static HRESULT com_get_class_object (REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx (REFCLSID rclsid, IUnknown *outer, DWORD cls_context, COSERVERINFO *server_info, ULONG count, MULTI_QI *results)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject (REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
 
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries (void)
 
HRESULT WINAPI CoGetCallContext (REFIID riid, void **obj)
 
HRESULT WINAPI CoSwitchCallContext (IUnknown *context, IUnknown **old_context)
 
HRESULT WINAPI CoRegisterInitializeSpy (IInitializeSpy *spy, ULARGE_INTEGER *cookie)
 
HRESULT WINAPI CoRevokeInitializeSpy (ULARGE_INTEGER cookie)
 
static BOOL com_peek_message (struct apartment *apt, MSG *msg)
 
HRESULT WINAPI CoWaitForMultipleHandles (DWORD flags, DWORD timeout, ULONG handle_count, HANDLE *handles, DWORD *index)
 
HRESULT WINAPI CoRegisterMessageFilter (IMessageFilter *filter, IMessageFilter **ret_filter)
 
static void com_revoke_all_ps_clsids (void)
 
static HRESULT get_ps_clsid_from_registry (const WCHAR *path, REGSAM access, CLSID *pclsid)
 
HRESULT WINAPI CoGetPSClsid (REFIID riid, CLSID *pclsid)
 
HRESULT WINAPI CoRegisterPSClsid (REFIID riid, REFCLSID rclsid)
 
static struct thread_contextimpl_from_IComThreadingInfo (IComThreadingInfo *iface)
 
static struct thread_contextimpl_from_IContextCallback (IContextCallback *iface)
 
static struct thread_contextimpl_from_IObjContext (IObjContext *iface)
 
static HRESULT WINAPI thread_context_info_QueryInterface (IComThreadingInfo *iface, REFIID riid, void **obj)
 
static ULONG WINAPI thread_context_info_AddRef (IComThreadingInfo *iface)
 
static ULONG WINAPI thread_context_info_Release (IComThreadingInfo *iface)
 
static HRESULT WINAPI thread_context_info_GetCurrentApartmentType (IComThreadingInfo *iface, APTTYPE *apttype)
 
static HRESULT WINAPI thread_context_info_GetCurrentThreadType (IComThreadingInfo *iface, THDTYPE *thdtype)
 
static HRESULT WINAPI thread_context_info_GetCurrentLogicalThreadId (IComThreadingInfo *iface, GUID *logical_thread_id)
 
static HRESULT WINAPI thread_context_info_SetCurrentLogicalThreadId (IComThreadingInfo *iface, REFGUID logical_thread_id)
 
static HRESULT WINAPI thread_context_callback_QueryInterface (IContextCallback *iface, REFIID riid, void **obj)
 
static ULONG WINAPI thread_context_callback_AddRef (IContextCallback *iface)
 
static ULONG WINAPI thread_context_callback_Release (IContextCallback *iface)
 
static HRESULT WINAPI thread_context_callback_ContextCallback (IContextCallback *iface, PFNCONTEXTCALL callback, ComCallData *param, REFIID riid, int method, IUnknown *punk)
 
static HRESULT WINAPI thread_object_context_QueryInterface (IObjContext *iface, REFIID riid, void **obj)
 
static ULONG WINAPI thread_object_context_AddRef (IObjContext *iface)
 
static ULONG WINAPI thread_object_context_Release (IObjContext *iface)
 
static HRESULT WINAPI thread_object_context_SetProperty (IObjContext *iface, REFGUID propid, CPFLAGS flags, IUnknown *punk)
 
static HRESULT WINAPI thread_object_context_RemoveProperty (IObjContext *iface, REFGUID propid)
 
static HRESULT WINAPI thread_object_context_GetProperty (IObjContext *iface, REFGUID propid, CPFLAGS *flags, IUnknown **punk)
 
static HRESULT WINAPI thread_object_context_EnumContextProps (IObjContext *iface, IEnumContextProps **props)
 
static void WINAPI thread_object_context_Reserved1 (IObjContext *iface)
 
static void WINAPI thread_object_context_Reserved2 (IObjContext *iface)
 
static void WINAPI thread_object_context_Reserved3 (IObjContext *iface)
 
static void WINAPI thread_object_context_Reserved4 (IObjContext *iface)
 
static void WINAPI thread_object_context_Reserved5 (IObjContext *iface)
 
static void WINAPI thread_object_context_Reserved6 (IObjContext *iface)
 
static void WINAPI thread_object_context_Reserved7 (IObjContext *iface)
 
HRESULT WINAPI CoGetContextToken (ULONG_PTR *token)
 
HRESULT WINAPI CoGetCurrentLogicalThreadId (GUID *id)
 
DWORD WINAPI CoGetCurrentProcess (void)
 
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx (DWORD unload_delay, DWORD reserved)
 
static void lock_init_spies (struct tlsdata *tlsdata)
 
static void unlock_init_spies (struct tlsdata *tlsdata)
 
HRESULT WINAPI CoInitializeWOW (DWORD arg1, DWORD arg2)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx (void *reserved, DWORD model)
 
void WINAPI DECLSPEC_HOTPATCH CoUninitialize (void)
 
HRESULT WINAPI CoIncrementMTAUsage (CO_MTA_USAGE_COOKIE *cookie)
 
HRESULT WINAPI CoDecrementMTAUsage (CO_MTA_USAGE_COOKIE cookie)
 
HRESULT WINAPI CoGetApartmentType (APTTYPE *type, APTTYPEQUALIFIER *qualifier)
 
HRESULT WINAPI CoRegisterClassObject (REFCLSID rclsid, IUnknown *object, DWORD clscontext, DWORD flags, DWORD *cookie)
 
static void com_revoke_class_object (struct registered_class *entry)
 
static void com_revoke_local_servers (void)
 
void apartment_revoke_all_classes (const struct apartment *apt)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject (DWORD cookie)
 
ULONG WINAPI CoAddRefServerProcess (void)
 
ULONG WINAPI CoReleaseServerProcess (void)
 
HRESULT WINAPI CoDisconnectObject (IUnknown *object, DWORD reserved)
 
HRESULT WINAPI CoLockObjectExternal (IUnknown *object, BOOL lock, BOOL last_unlock_releases)
 
HRESULT WINAPI CoRegisterChannelHook (REFGUID guidExtension, IChannelHook *channel_hook)
 
HRESULT WINAPI CoDisableCallCancellation (void *reserved)
 
HRESULT WINAPI CoEnableCallCancellation (void *reserved)
 
HRESULT WINAPI CoGetCallerTID (DWORD *tid)
 
BOOL WINAPI CoIsHandlerConnected (IUnknown *object)
 
HRESULT WINAPI CoSuspendClassObjects (void)
 
HRESULT WINAPI CoResumeClassObjects (void)
 
HRESULT WINAPI CoRegisterSurrogate (ISurrogate *surrogate)
 
HRESULT WINAPI CoRegisterSurrogateEx (REFGUID guid, void *reserved)
 
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD reason, LPVOID reserved)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, void **obj)
 

Variables

HINSTANCE hProxyDll
 
static ULONG_PTR global_options [COMGLB_PROPERTIES_RESERVED3+1]
 
static LONG com_lockcount
 
static LONG com_server_process_refcount
 
static struct list registered_proxystubs = LIST_INIT(registered_proxystubs)
 
static CRITICAL_SECTION cs_registered_ps = { &psclsid_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG psclsid_cs_debug
 
static struct list registered_classes = LIST_INIT(registered_classes)
 
static CRITICAL_SECTION registered_classes_cs = { &registered_classes_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG registered_classes_cs_debug
 
static HKEY classes_root_hkey
 
static const IGlobalOptionsVtbl global_options_vtbl
 
static const IClassFactoryVtbl global_options_factory_vtbl
 
static IClassFactory global_options_factory = { &global_options_factory_vtbl }
 
static const BYTE guid_conv_table [256]
 
static const IComThreadingInfoVtbl thread_context_info_vtbl
 
static const IContextCallbackVtbl thread_context_callback_vtbl
 
static const IObjContextVtbl thread_object_context_vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 20 of file combase.c.

◆ RTL_CONSTANT_STRING

#define RTL_CONSTANT_STRING (   s)    { sizeof(s)-sizeof((s)[0]), sizeof(s), s }

Definition at line 35 of file combase.c.

◆ USE_COM_CONTEXT_DEF

#define USE_COM_CONTEXT_DEF

Definition at line 23 of file combase.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 22 of file combase.c.

Function Documentation

◆ apartment_revoke_all_classes()

void apartment_revoke_all_classes ( const struct apartment apt)

Definition at line 3089 of file combase.c.

3090{
3091 struct registered_class *cur, *cur2;
3092
3094
3096 {
3097 if (cur->apartment_id == apt->oxid)
3099 }
3100
3102}
static void com_revoke_class_object(struct registered_class *entry)
Definition: combase.c:3062
static CRITICAL_SECTION registered_classes_cs
Definition: combase.c:135
static struct list registered_classes
Definition: combase.c:133
FxCollectionEntry * cur
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)

Referenced by apartment_release().

◆ class_factory_AddRef()

static ULONG WINAPI class_factory_AddRef ( IClassFactory iface)
static

Definition at line 543 of file combase.c.

544{
545 return 2;
546}

◆ class_factory_LockServer()

static HRESULT WINAPI class_factory_LockServer ( IClassFactory iface,
BOOL  fLock 
)
static

Definition at line 553 of file combase.c.

554{
555 TRACE("%d\n", fLock);
556
557 return S_OK;
558}
#define S_OK
Definition: intsafe.h:52
#define TRACE(s)
Definition: solgame.cpp:4

◆ class_factory_QueryInterface()

static HRESULT WINAPI class_factory_QueryInterface ( IClassFactory iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 529 of file combase.c.

530{
531 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), ppv);
532
534 {
535 *ppv = iface;
536 return S_OK;
537 }
538
539 *ppv = NULL;
540 return E_NOINTERFACE;
541}
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ class_factory_Release()

static ULONG WINAPI class_factory_Release ( IClassFactory iface)
static

Definition at line 548 of file combase.c.

549{
550 return 1;
551}

◆ clsid_from_string_reg()

static HRESULT clsid_from_string_reg ( LPCOLESTR  progid,
CLSID clsid 
)
static

Definition at line 1403 of file combase.c.

1404{
1405 WCHAR buf2[CHARS_IN_GUID];
1406 LONG buf2len = sizeof(buf2);
1407 HKEY xhkey;
1408 WCHAR *buf;
1409
1410 memset(clsid, 0, sizeof(*clsid));
1411 buf = malloc((lstrlenW(progid) + 8) * sizeof(WCHAR));
1412 if (!buf) return E_OUTOFMEMORY;
1413
1415 lstrcatW(buf, L"\\CLSID");
1417 {
1418 free(buf);
1419 WARN("couldn't open key for ProgID %s\n", debugstr_w(progid));
1420 return CO_E_CLASSSTRING;
1421 }
1422 free(buf);
1423
1424 if (RegQueryValueW(xhkey, NULL, buf2, &buf2len))
1425 {
1426 RegCloseKey(xhkey);
1427 WARN("couldn't query clsid value for ProgID %s\n", debugstr_w(progid));
1428 return CO_E_CLASSSTRING;
1429 }
1430 RegCloseKey(xhkey);
1431 return guid_from_string(buf2, clsid) ? S_OK : CO_E_CLASSSTRING;
1432}
#define WARN(fmt,...)
Definition: precomp.h:61
#define RegCloseKey(hKey)
Definition: registry.h:49
#define CHARS_IN_GUID
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4241
static BOOL guid_from_string(LPCWSTR s, GUID *id)
Definition: combase.c:1347
static LSTATUS open_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
Definition: combase.c:297
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
#define L(x)
Definition: resources.c:13
#define progid(str)
Definition: exdisp.idl:31
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define debugstr_w
Definition: kernel32.h:32
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
const CLSID * clsid
Definition: msctf.cpp:50
#define MAXIMUM_ALLOWED
Definition: nt_native.h:83
long LONG
Definition: pedump.c:60
#define memset(x, y, z)
Definition: compat.h:39
#define CO_E_CLASSSTRING
Definition: winerror.h:3919
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CLSIDFromProgID(), and CLSIDFromString().

◆ CLSIDFromProgID()

HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID ( LPCOLESTR  progid,
CLSID clsid 
)

Definition at line 1437 of file combase.c.

1438{
1439 ACTCTX_SECTION_KEYED_DATA data;
1440
1441 if (!progid || !clsid)
1442 return E_INVALIDARG;
1443
1444 data.cbSize = sizeof(data);
1445 if (FindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION,
1446 progid, &data))
1447 {
1448 struct progidredirect_data *progiddata = (struct progidredirect_data *)data.lpData;
1449 CLSID *alias = (CLSID *)((BYTE *)data.lpSectionBase + progiddata->clsid_offset);
1450 *clsid = *alias;
1451 return S_OK;
1452 }
1453
1455}
const WCHAR * alias
Definition: main.c:67
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT clsid_from_string_reg(LPCOLESTR progid, CLSID *clsid)
Definition: combase.c:1403
BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, LPCWSTR lpSearchStr, PACTCTX_SECTION_KEYED_DATA pInfo)
Definition: actctx.c:238
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
ULONG clsid_offset
Definition: combase.c:93
unsigned char BYTE
Definition: xxhash.c:193

Referenced by call_script(), CLSIDFromProgIDEx(), ATL::CComPtr< T >::CoCreateInstance(), create_activex_object(), create_object(), get_content_type(), get_engine_clsid(), get_guid_from_language(), get_moniker_for_progid_display_name(), GetClassFile(), Host_CreateObject(), MkProtocol_StartEx(), OLECONVERT_CreateCompObjStream(), run_script(), START_TEST(), test_CLSIDFromProgID(), and test_IWinHttpRequest_Invoke().

◆ CLSIDFromProgIDEx()

HRESULT WINAPI CLSIDFromProgIDEx ( LPCOLESTR  progid,
CLSID clsid 
)

Definition at line 1460 of file combase.c.

1461{
1462 FIXME("%s, %p: semi-stub\n", debugstr_w(progid), clsid);
1463
1464 return CLSIDFromProgID(progid, clsid);
1465}
#define FIXME(fmt,...)
Definition: precomp.h:53
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID(LPCOLESTR progid, CLSID *clsid)
Definition: combase.c:1437

◆ CLSIDFromString()

HRESULT WINAPI CLSIDFromString ( LPCOLESTR  str,
LPCLSID  clsid 
)

Definition at line 1470 of file combase.c.

1471{
1472 CLSID tmp_id;
1473 HRESULT hr;
1474
1475 if (!clsid)
1476 return E_INVALIDARG;
1477
1479 return S_OK;
1480
1481 /* It appears a ProgID is also valid */
1482 hr = clsid_from_string_reg(str, &tmp_id);
1483 if (SUCCEEDED(hr))
1484 *clsid = tmp_id;
1485
1486 return hr;
1487}
#define SUCCEEDED(hr)
Definition: intsafe.h:50
const WCHAR * str
HRESULT hr
Definition: shlfolder.c:183

Referenced by ACTION_MsiPublishAssemblies(), ACTION_PublishFeatures(), build_directshowfilters_tree(), CATIDEnumGUID_Next(), CLSIDEnumGUID_Next(), CLSIDFromStringWrap(), CLSIDPrefix(), CoGetTreatAsClass(), COMCAT_IEnumCATEGORYINFO_Next(), ComponentInfo_GetGuidList(), ComponentInfo_GetGUIDValue(), CoTreatAsClass(), CreateComponentEnumerator(), CreateNotificationObject(), CreateRegItem(), DEVENUM_IMediaCatMoniker_BindToObject(), DEVENUM_IParseDisplayName_ParseDisplayName(), DEVENUM_ReadPinTypes(), DirectPlayEnumerateAW(), do_enum(), DP_LoadSP(), EnumClientServiceProtocol(), CDefaultContextMenu::EnumerateDynamicContextHandlerForKey(), CNetConnectionManager::EnumerateINetConnections(), EnumerateNetworkAdapter(), FilterMapper3_EnumMatchingFilters(), FilterMapper_EnumMatchingFilters(), CCategoryMgr::FindClosestCategory(), get_content_type(), get_mime_clsid(), get_mime_filter(), get_protocol_cf(), get_ps_clsid_from_registry(), GetClassMediaFile(), GetCLSIDForFileTypeFromExtension(), CInputProcessorProfiles::GetDefaultLanguageProfile(), GetFilterInfo(), GetItemCLSID(), CRegTreeOptions::GetSetState(), CQueryAssociations::GetString(), GUIDFromStringA(), GUIDFromStringW(), IDirectMusic8Impl_GetDefaultPort(), IDirectPlay4AImpl_EnumConnections(), IDirectPlayLobby3AImpl_EnumAddressTypes(), IDirectPlayLobby3AImpl_EnumLocalApplications(), IEnumDMO_fnNext(), CCleanupHandler::Initialize(), InitIconOverlays(), InitShellServices(), InternetProtocolSink_ReportProgress(), IsProductCode(), ITERATE_RegisterTypeLibraries(), ITERATE_UnregisterTypeLibraries(), CLangBarItemList::Load(), load_devices_from_reg(), CCleanupHandlerList::LoadHandlers(), MMDevPropStore_GetAt(), msi_create_component_advertise_string(), CProfilesEnumGuid::Next(), CEnumTfLanguageProfiles::Next(), CEnumTfLanguageProfiles::next_LanguageProfile(), OleGetAutoConvert(), parse_classid(), process_extensions(), ATL::CRegKey::QueryGUIDValue(), read_types(), register_legacy_filters(), SSOThread::Run(), CShellLink::SetAdvertiseInfo(), CDeviceNode::SetupNode(), SHCLSIDFromStringA(), SHCLSIDFromStringW(), SHDOCVW_GetShellInstanceObjectClassObject(), SHELL32_GetCLSIDForDirectory(), SHELL_GetRegCLSID(), ShellExecute_FromContextMenuHandlers(), CShellBrowser::ShowBrowserBar(), squash_guid(), statusclb_OnProgress(), string_to_guid(), test_CLSIDFromProgID(), test_CLSIDFromString(), test_devenum(), test_first_device(), UIINSERTOBJECTDLG_PopulateObjectTypes(), and wmain().

◆ CoAddRefServerProcess()

ULONG WINAPI CoAddRefServerProcess ( void  )

Definition at line 3151 of file combase.c.

3152{
3153 ULONG refs;
3154
3155 TRACE("\n");
3156
3160
3161 TRACE("refs before: %ld\n", refs - 1);
3162
3163 return refs;
3164}
static LONG com_server_process_refcount
Definition: combase.c:53
uint32_t ULONG
Definition: typedefs.h:59

Referenced by ATL::CAtlExeModuleT< T >::Lock(), and LockModuleOOP().

◆ CoCopyProxy()

HRESULT WINAPI CoCopyProxy ( IUnknown proxy,
IUnknown **  proxy_copy 
)

Definition at line 1079 of file combase.c.

1080{
1082 HRESULT hr;
1083
1084 TRACE("%p, %p.\n", proxy, proxy_copy);
1085
1086 hr = IUnknown_QueryInterface(proxy, &IID_IClientSecurity, (void **)&client_security);
1087 if (SUCCEEDED(hr))
1088 {
1089 hr = IClientSecurity_CopyProxy(client_security, proxy, proxy_copy);
1090 IClientSecurity_Release(client_security);
1091 }
1092
1093 if (FAILED(hr)) ERR("-- failed with %#lx.\n", hr);
1094 return hr;
1095}
#define ERR(fmt,...)
Definition: precomp.h:57
int proxy
Definition: main.c:67
#define FAILED(hr)
Definition: intsafe.h:51

◆ CoCreateGuid()

◆ CoCreateInstance()

HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance ( REFCLSID  rclsid,
IUnknown outer,
DWORD  cls_context,
REFIID  riid,
void **  obj 
)

Definition at line 1685 of file combase.c.

1687{
1688 MULTI_QI multi_qi = { .pIID = riid };
1689 HRESULT hr;
1690
1691 TRACE("%s, %p, %#lx, %s, %p.\n", debugstr_guid(rclsid), outer, cls_context, debugstr_guid(riid), obj);
1692
1693 if (!obj)
1694 return E_POINTER;
1695
1696 hr = CoCreateInstanceEx(rclsid, outer, cls_context, NULL, 1, &multi_qi);
1697 *obj = multi_qi.pItf;
1698 return hr;
1699}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, COSERVERINFO *server_info, ULONG count, MULTI_QI *results)
Definition: combase.c:1882
static IUnknown * outer
Definition: compobj.c:82
#define E_POINTER
Definition: winerror.h:3480

Referenced by _CBandSite_CreateInstance(), _CBandSiteMenu_CreateInstance(), _create_object(), _CStartMenu_CreateInstance(), CViewStatePropertyBag::_GetMRUSlots(), CViewStatePropertyBag::_PruneMRUTree(), activate_given_ts(), add_favs_to_menu(), AMovieDllRegisterServer2(), AtlAxCreateControlLicEx(), ATL::AtlRegisterClassCategoriesHelper(), AtlRegisterClassCategoriesHelper(), AutoComplete_AddMRU(), AutoComplete_LoadList(), AVIFileOpenW(), AVIMakeCompressedStream(), AVIStreamCreate(), BaseOutputPinImpl_InitAllocator(), build_directshowfilters_tree(), cache_InstallAssembly(), cache_UninstallAssembly(), CAddressBand_CreateInstance(), CAddressEditBox_CreateInstance(), call_script(), CBandProxy_CreateInstance(), CBrandBand_CreateInstance(), CExplorerBand_CreateInstance(), check_bits20(), check_bits25(), check_ie(), check_jscript(), check_lnk_(), check_tiff_format(), check_vbscript(), ChildWndProc(), CInternetToolbar_CreateInstance(), CMenuBand_CreateInstance(), CMergedFolder_CreateInstance(), CNetConnectionManager_CreateInstance(), CNetworkConnections::CNetworkConnections(), CoGetInstanceFromFile(), CoGetInstanceFromIStorage(), CommitDecommitTest(), confirm_safety(), cp_from_charset_string(), create_ammultimediastream(), create_audio_data(), create_avisplitter(), create_cache(), create_configuration(), create_decoder(), create_doc_from_url(), create_document(), create_dsound_renderer(), create_encoder(), create_engine(), create_graph(), create_input_pin(), create_instance(), create_jscript(), create_lnk_(), create_mime_object(), create_mpeg_splitter(), create_path(), create_root_IDxDiagContainer(), create_script(), create_script_host(), create_server_xhr(), create_session(), create_system_ports_list(), create_test(), create_vbscript(), create_video_renderer(), create_xhr(), CreateAndInitXMLDOMDocument(), CreateCommand(), CreateCShellMenu(), CreateDropTarget(), CreateExtractIcon(), CreateFilterInstanceAndLoadFile(), SIfacePtr< T >::CreateInstance(), CreateInternetShortcut(), CreateNotificationObject(), CreateObjectsFromPersistFolder(), CInputPin::CreatePin(), COutputPin::CreatePin(), CreatePosPassThru(), CreateShellLink(), CreateShortcut(), CreateUrlShortcut(), CSearchBar_CreateInstance(), DefaultHandler_Construct(), DefaultHandler_Run(), determine_patch_sequence(), DEVENUM_IMediaCatMoniker_BindToObject(), device_tests(), DllRegisterServer(), do_child(), do_enum(), DoCreateShortcut(), CShellBrowser::DoFolderOptions(), DoInitAutoCompleteWithCWD(), DoTestCaseA(), DoTestCaseB(), DragSourceHelper::DragSourceHelper(), ebrowser_instantiate(), EnumConnections_cb(), FileAsyncReader_RequestAllocator(), FileMonikerImpl_BindToObject(), fill_filter_data_information(), fill_processor_information(), FilterGraph2_SetDefaultSyncSource(), FilterGraph_create(), FilterMapper3_EnumMatchingFilters(), FilterMapper3_GetICreateDevEnum(), FilterMapper3_RegisterFilter(), find_moniker(), fnCaptureGraphBuilder2_RenderStream(), get_class_support_data(), get_component_info(), get_mime_filter(), get_mlang(), get_tasks_root_folder(), BtrfsContextMenu::get_uac_icon(), get_unmarshaler_from_stream(), GetExeFromLnk(), GetFileSourceFilter(), GetSplitter(), getstring_test(), hlink_frame_navigate(), HlinkCreateBrowseContext(), HlinkCreateFromMoniker(), HlinkCreateFromString(), Host_CreateObject(), IAMMultiMediaStreamImpl_AddMediaStream(), IAMMultiMediaStreamImpl_Initialize(), IDirectSound8_tests(), IDirectSound_tests(), IDirectSoundFullDuplex_tests(), IDropTargetImpl::IDropTargetImpl(), implicit_mta_proc(), init_explorerbrowser(), init_TCPIP_provider(), CCleanupHandler::Initialize(), initialize(), CNetConnectionPropertyUi::InitializeLANPropertiesUIDlg(), InitializeObjectPicker(), InitializeRemoteRegistryPicker(), InitializeSecurity(), InitIconOverlays(), CSysTray::InitNetShell(), InitShellServices(), InstallNetworkComponent(), InstanceObjectFactory_IClassFactory_CreateInstance(), CBandSiteMenu::InvokeCommand(), CDefaultContextMenu::InvokeRegVerb(), is_firewall_enabled(), ITERATE_CreateShortcuts(), ITypeInfo_fnCreateInstance(), LoadAndInitialize(), CComCatCachedCategory::LoadFromComCatMgr(), CShellBrowser::LoadHistory(), CInputPin::LoadProxyPlugins(), COutputPin::LoadProxyPlugins(), CKsProxy::LoadProxyPlugins(), LoadShellLinkConsoleInfo(), locator_ConnectServer(), main_test(), match_smart_tee_pin(), MCIQTZ_mciOpen(), MediaDet_put_Filename(), MkProtocol_StartEx(), MMDevice_Activate(), MRUList_DataList_0(), MRUList_DataList_1(), MRUList_DataList_2(), MRUList_PidlList_0(), MsiGetShortcutTargetW(), navigate_new_window(), OleCreate(), OleCreatePropertyFrameIndirect(), OleLoad(), OleLoadFromStream(), OLEPictureImpl_LoadWICDecoder(), oletlsdata_test_thread(), CShellBrowser::OnSearch(), Open(), OpenCHM(), OpenControlPanelItem(), parse_config(), parse_path(), perform_test(), QCAP_createSmartTeeFilter(), query_prop(), register_codec(), register_filters(), RegisterComCat(), ResetGlobalFolderSettings(), run_registry_test(), run_script(), run_test(), SampleGrabber_create(), set_firewall(), setup(), setup_task(), setup_trigger(), SH32_CoCreateInstance(), SHAddToRecentDocs(), SHAutoComplete(), SHCoCreateInstanceAC(), SHCreatePropSheetExtArrayEx(), SHDOCVW_CreateShortcut(), SHDOCVW_GetPathOfShortcut(), SHELL32_FileOperation(), shellex_load_object_and_run(), SHFindComputer(), SHLoadInProc(), CShellBrowser::ShowBand(), ShowNetConnectionProperties(), CProgressDlg::Start(), START_TEST(), synth_port_create(), test_ACListISF(), test_ACListISF_CURRENTDIR(), test_ACListISF_CURRENTDIR2(), test_ACListISF_DESKTOP(), test_ACListISF_FAVORITES(), test_ACListISF_FILESYSDIRS(), test_ACListISF_FILESYSONLY(), test_ACListISF_MYCOMPUTER(), test_ACListISF_NONE(), test_ACLMulti(), test_action_mapping(), test_Activate(), test_Add(), test_advise(), test_aggregate_filter_graph(), test_aggregate_filter_mapper(), test_aggregation(), test_AtlAxAttachControl(), test_basics(), test_CAccPropServices(), test_capture(), test_checklinkpath(), TEST_CLSID_ShellWindows(), test_CoCreateInstance(), test_cocreateinstance_proxy(), test_CoCreateInstanceFromApp(), test_codec(), test_CoFreeUnusedLibraries(), test_COM(), test_COM_dplobby(), test_COM_sg_enumpins(), test_COM_wavfile(), test_comparemode(), test_component_enumerator(), test_componentinfo(), test_converter_4bppGray(), test_converter_8bppGray(), test_create_attribute(), test_create_decoder(), test_create_manager(), test_create_reader_from_container(), test_CreateBody(), test_createElement(), test_createfromstream(), test_CreateGroup(), test_CreateJob(), test_CreateMetadataReader(), test_CreateMetadataWriter(), test_CreateMetadataWriterFromReader(), test_CreatePlayer(), test_CShellMenu_with_DeskBar(), test_custom_source(), test_customize(), test_datalink(), test_decode(), test_decode_1bpp(), test_decode_24bpp(), test_decode_4bpp(), test_decode_adobe_cmyk(), test_decode_bitfields(), test_decode_rle4(), test_decode_rle8(), test_decoder_info(), test_default_converter(), test_default_handler(), test_default_handler_run(), test_default_properties(), test_delegated_methods(), test_devenum(), test_directshow_filter(), test_dispex(), test_dmo(), test_domdoc(), test_dragdrophelper(), test_dsound(), test_dsound8(), test_early_abort(), test_empty_propertybag(), test_encoder_formats(), test_Enum(), test_EnumAddressTypes(), test_EnumConnections(), test_EnumGroups(), test_EnumGroupsInGroup(), test_EnumJobs(), test_EnumPlayers(), test_EnumSessions(), test_events(), test_Exists(), test_file_protocol_fail(), test_filename_opendlg_(), test_filename_savedlg_(), test_filesourcefilter(), test_filled_propertybag(), test_filter_graph(), test_first_device(), test_fm2_enummatchingfilters(), test_FolderShortcut(), test_generic_composite_moniker(), test_get_clipboard_uninitialized(), test_get_set(), test_GetCaps(), test_GetDefaultColumn(), test_GetDefaultSearchGUID(), test_GetIconLocation(), test_GetMessageCount(), test_GetMessageQueue(), test_GetPlayerAccount(), test_GetPlayerAddress(), test_GetPlayerCaps(), test_GetPlayerFlags(), test_GetRootContainer(), test_GetTargetComputer(), test_gif_notrailer(), test_globalinterfacetable(), test_globalness(), test_GlobalOptions(), test_graph_builder(), test_graph_builder_connect(), test_GroupOwner(), test_groups_cs(), test_groups_p2p(), test_hash_value(), test_host_migration(), test_HTMLLoadOptions(), test_IACLCustomMRU_Basics(), test_IACLCustomMRU_Continue(), test_IACLCustomMRU_ExtraChars(), test_IACLCustomMRU_TypedURLs(), test_IACLCustomMRU_UpdateOrder(), test_IClientSecurity(), test_ico_data_(), test_iconlocation(), test_IEnumVARIANT(), test_ifiltermapper_from_filtergraph(), test_imagingfactory_interfaces(), test_indent(), test_init(), test_Initialize(), test_InitializeConnection(), test_inmemorystore(), test_inproc_handler(), test_instantiation(), test_interfaces(), test_invalid_init(), test_IObjectSafety(), test_IPersistStream(), test_IProgressDialog_QueryInterface(), test_IQueryAssociations_GetString(), test_IQueryAssociations_Init(), test_IQueryAssociations_QueryInterface(), test_IReferenceClock_SystemClock(), test_Item(), test_item_moniker(), test_items(), test_IUPnPNAT(), test_IWbemLocator(), test_IWinHttpRequest(), test_IWinHttpRequest_Invoke(), test_Keys(), test_knownFolders(), test_legacy_filter(), test_legacy_filter_registration(), test_Load(), test_local_server(), test_locator(), test_manualresetevent(), test_media_streams(), test_mediadet(), test_metadata_APE(), test_metadata_App1(), test_metadata_cHRM(), test_metadata_Exif(), test_metadata_gAMA(), test_metadata_GCE(), test_metadata_gif(), test_metadata_GIF_comment(), test_metadata_Gps(), test_metadata_hIST(), test_metadata_Ifd(), test_metadata_IMD(), test_metadata_LSD(), test_metadata_png(), test_metadata_tEXt(), test_metadata_tIME(), test_metadata_unknown(), test_metadata_writer(), test_mhtml_protocol_binding(), test_mhtml_protocol_info(), test_midiout(), test_moniker_isequal(), test_mouse_keyboard(), test_multi_encoder_impl(), test_MultiThreadApartment_Thread(), test_mxattr_addAttribute(), test_mxattr_clear(), test_mxattr_dispex(), test_mxattr_localname(), test_mxattr_qi(), test_mxnamespacemanager(), test_mxnamespacemanager_override(), test_mxwriter_cdata(), test_mxwriter_characters(), test_mxwriter_comment(), test_mxwriter_default_properties(), test_mxwriter_dispex(), test_mxwriter_domdoc(), test_mxwriter_dtd(), test_mxwriter_encoding(), test_mxwriter_flush(), test_mxwriter_handlers(), test_mxwriter_ignorablespaces(), test_mxwriter_indent(), test_mxwriter_pi(), test_mxwriter_properties(), test_mxwriter_startenddocument(), test_mxwriter_startendelement(), test_mxwriter_startendelement_batch(), test_mxwriter_startendelement_batch2(), test_mxwriter_stream(), test_namespace(), test_namespaces_as_attributes(), test_namespaces_change(), test_NetFwAuthorizedApplication(), test_newline_normalization(), test_newmenu(), test_NewWorkItem(), test_OleInitialize_InitCounting(), test_Open(), test_overwrite(), test_parse_filter_data(), test_ParseDisplayName(), test_ParseName(), test_persistent_state(), test_persistserialized(), test_persiststreaminit(), test_PlayerData(), test_PlayerName(), test_popup(), test_prefix_filtering(), test_preinitialization(), test_printers_folder(), test_propertystore(), test_QueryInterface(), test_queryreader(), test_reader_info(), test_Receive(), test_RegExp(), test_register_filter(), test_register_filter_with_null_clsMinorType(), test_registrar(), test_registry(), test_remote_data_replication(), test_Remove(), test_render_filter_priority(), test_res_url(), test_RtlQueryPackageIdentity(), test_samplegrabber(), test_save_settings(), test_saxreader(), test_saxreader_dispex(), test_saxreader_encoding(), test_saxreader_features(), test_saxreader_properties(), test_Send(), test_service(), test_SessionDesc(), test_set_frame_palette(), test_SetData(), test_SetTargetComputer(), test_ShellExecute(), test_ShellWindows(), test_StdHlink(), test_StdURLMoniker(), test_stillimage_aggregation(), test_StreamOnIStream(), test_StreamOnMemory(), test_StreamOnStreamRange(), test_supporterrorinfo(), test_timeline(), test_timelineobj_interfaces(), test_TreatAsClass(), test_try_xmldoc(), test_UninitializedUri(), test_validate_on_parse_values(), test_Verbs(), test_vfw(), test_wavein(), test_waveout(), test_whitespace(), TEST_WinList_Mix(), test_writesource_palette(), test_wshshell(), test_xmldoc(), test_xmlelem(), test_xmlelem_children(), test_xmlelem_collection(), test_XPath(), test_xsltemplate(), TestDescription(), TestGetUIObjectOf(), TestInitialize(), TestModuleInterfaces(), TestNotification(), TestUninitialized(), CHardErrorThread::ThreadProc(), TransformFilter_Init(), unregister_filters(), UnregisterComCat(), VisualEffectsDlgProc(), WICCreateColorTransform_Proxy(), CShellDispatch::Windows(), write_filter_data(), WshShortcut_Create(), and XMLView_create().

◆ CoCreateInstanceEx()

HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx ( REFCLSID  rclsid,
IUnknown outer,
DWORD  cls_context,
COSERVERINFO server_info,
ULONG  count,
MULTI_QI *  results 
)

Definition at line 1882 of file combase.c.

1884{
1886 IUnknown *unk = NULL;
1887 CLSID clsid;
1888 HRESULT hr;
1889
1890 TRACE("%s, %p, %#lx, %p, %lu, %p\n", debugstr_guid(rclsid), outer, cls_context, server_info, count, results);
1891
1892 if (!count || !results)
1893 return E_INVALIDARG;
1894
1895 if (server_info)
1896 FIXME("Server info is not supported.\n");
1897
1899
1900 clsid = *rclsid;
1901 if (!(cls_context & CLSCTX_APPCONTAINER))
1902 CoGetTreatAsClass(rclsid, &clsid);
1903
1904 if (FAILED(hr = com_get_class_object(&clsid, cls_context, NULL, &IID_IClassFactory, (void **)&factory)))
1905 return hr;
1906
1907 hr = IClassFactory_CreateInstance(factory, outer, results[0].pIID, (void **)&unk);
1908 IClassFactory_Release(factory);
1909 if (FAILED(hr))
1910 {
1911 if (hr == CLASS_E_NOAGGREGATION && outer)
1912 FIXME("Class %s does not support aggregation\n", debugstr_guid(&clsid));
1913 else
1914 FIXME("no instance created for interface %s of class %s, hr %#lx.\n",
1916 return hr;
1917 }
1918
1919 return return_multi_qi(unk, count, results, TRUE);
1920}
static struct _test_info results[8]
Definition: SetCursorPos.c:31
#define TRUE
Definition: types.h:120
HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, CLSID *clsidNew)
Definition: combase.c:1224
static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr)
Definition: combase.c:1534
static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk)
Definition: combase.c:1545
static HRESULT com_get_class_object(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
Definition: combase.c:1714
GLuint GLuint GLsizei count
Definition: gl.h:1545
Definition: main.c:439
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

Referenced by CoCreateInstance(), CoCreateInstanceFromApp(), and test_CoCreateInstanceEx().

◆ CoCreateInstanceFromApp()

HRESULT WINAPI CoCreateInstanceFromApp ( REFCLSID  rclsid,
IUnknown outer,
DWORD  cls_context,
void server_info,
ULONG  count,
MULTI_QI *  results 
)

Definition at line 1704 of file combase.c.

1706{
1707 TRACE("%s, %p, %#lx, %p, %lu, %p\n", debugstr_guid(rclsid), outer, cls_context, server_info,
1708 count, results);
1709
1710 return CoCreateInstanceEx(rclsid, outer, cls_context | CLSCTX_APPCONTAINER, server_info,
1711 count, results);
1712}

◆ CoDecrementMTAUsage()

HRESULT WINAPI CoDecrementMTAUsage ( CO_MTA_USAGE_COOKIE  cookie)

Definition at line 2917 of file combase.c.

2918{
2919 TRACE("%p\n", cookie);
2920
2922 return S_OK;
2923}
void apartment_decrement_mta_usage(CO_MTA_USAGE_COOKIE cookie)
Definition: apartment.c:1199
Definition: cookie.c:34

◆ CoDisableCallCancellation()

HRESULT WINAPI CoDisableCallCancellation ( void reserved)

Definition at line 3284 of file combase.c.

3285{
3286 struct tlsdata *tlsdata;
3287 HRESULT hr;
3288
3289 TRACE("%p\n", reserved);
3290
3292 return hr;
3293
3294 if (!tlsdata->cancelcount)
3295 return CO_E_CANCEL_DISABLED;
3296
3298
3299 return S_OK;
3300}
static HRESULT com_get_tlsdata(struct tlsdata **data)
r reserved
Definition: btrfs.c:3006
DWORD cancelcount
#define CO_E_CANCEL_DISABLED
Definition: winerror.h:3611

Referenced by test_call_cancellation().

◆ CoDisconnectObject()

HRESULT WINAPI CoDisconnectObject ( IUnknown object,
DWORD  reserved 
)

Definition at line 3190 of file combase.c.

3191{
3192 struct stub_manager *manager;
3193 struct apartment *apt;
3194 IMarshal *marshal;
3195 HRESULT hr;
3196
3197 TRACE("%p, %#lx\n", object, reserved);
3198
3199 if (!object)
3200 return E_INVALIDARG;
3201
3202 hr = IUnknown_QueryInterface(object, &IID_IMarshal, (void **)&marshal);
3203 if (hr == S_OK)
3204 {
3205 hr = IMarshal_DisconnectObject(marshal, reserved);
3206 IMarshal_Release(marshal);
3207 return hr;
3208 }
3209
3210 if (!(apt = apartment_get_current_or_mta()))
3211 {
3212 ERR("apartment not initialised\n");
3213 return CO_E_NOTINITIALIZED;
3214 }
3215
3216 manager = get_stub_manager_from_object(apt, object, FALSE);
3217 if (manager)
3218 {
3219 stub_manager_disconnect(manager);
3220 /* Release stub manager twice, to remove the apartment reference. */
3221 stub_manager_int_release(manager);
3222 stub_manager_int_release(manager);
3223 }
3224
3225 /* Note: native is pretty broken here because it just silently
3226 * fails, without returning an appropriate error code if the object was
3227 * not found, making apps think that the object was disconnected, when
3228 * it actually wasn't */
3229
3230 apartment_release(apt);
3231 return S_OK;
3232}
#define CO_E_NOTINITIALIZED
void apartment_release(struct apartment *apt)
Definition: apartment.c:444
struct apartment * apartment_get_current_or_mta(void)
Definition: apartment.c:623
struct stub_manager * get_stub_manager_from_object(struct apartment *apt, IUnknown *object, BOOL alloc)
Definition: stubmanager.c:335
ULONG stub_manager_int_release(struct stub_manager *stub_manager)
Definition: stubmanager.c:309
void stub_manager_disconnect(struct stub_manager *m)
Definition: stubmanager.c:242
#define FALSE
Definition: types.h:117

Referenced by implicit_mta_proc(), local_server_GetClassID(), test_disconnect_stub(), and test_lock_object_external().

◆ CoEnableCallCancellation()

HRESULT WINAPI CoEnableCallCancellation ( void reserved)

Definition at line 3305 of file combase.c.

3306{
3307 struct tlsdata *tlsdata;
3308 HRESULT hr;
3309
3310 TRACE("%p\n", reserved);
3311
3313 return hr;
3314
3316
3317 return S_OK;
3318}

Referenced by test_call_cancellation().

◆ CoFileTimeNow()

HRESULT WINAPI CoFileTimeNow ( FILETIME filetime)

Definition at line 1007 of file combase.c.

1008{
1010 return S_OK;
1011}
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
Definition: time.c:128

Referenced by RunningObjectTableImpl_Register().

◆ CoFreeUnusedLibraries()

void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries ( void  )

Definition at line 1936 of file combase.c.

1937{
1939}
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx(DWORD unload_delay, DWORD reserved)
Definition: combase.c:2755
#define INFINITE
Definition: serial.h:102

Referenced by AMovieDllRegisterServer2(), free_libraries_thread(), SHFreeUnusedLibraries(), and test_CoFreeUnusedLibraries().

◆ CoFreeUnusedLibrariesEx()

void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx ( DWORD  unload_delay,
DWORD  reserved 
)

Definition at line 2755 of file combase.c.

2756{
2757 struct apartment *apt = com_get_current_apt();
2758 if (!apt)
2759 {
2760 ERR("apartment not initialised\n");
2761 return;
2762 }
2763
2764 apartment_freeunusedlibraries(apt, unload_delay);
2765}
void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
Definition: apartment.c:403
static struct apartment * com_get_current_apt(void)

Referenced by CoFreeUnusedLibraries().

◆ CoGetActivationState()

HRESULT WINAPI CoGetActivationState ( GUID  guid,
DWORD  arg2,
DWORD arg3 
)

Definition at line 1214 of file combase.c.

1215{
1216 FIXME("%s, %lx, %p.\n", debugstr_guid(&guid), arg2, arg3);
1217
1218 return E_NOTIMPL;
1219}
#define E_NOTIMPL
Definition: ddrawi.h:99
GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg3
Definition: glext.h:9515
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
Definition: glext.h:9514

◆ CoGetApartmentType()

HRESULT WINAPI CoGetApartmentType ( APTTYPE *  type,
APTTYPEQUALIFIER qualifier 
)

Definition at line 2928 of file combase.c.

2929{
2930 struct tlsdata *tlsdata;
2931 struct apartment *apt;
2932 HRESULT hr;
2933
2934 TRACE("%p, %p\n", type, qualifier);
2935
2936 if (!type || !qualifier)
2937 return E_INVALIDARG;
2938
2940 return hr;
2941
2942 if (!tlsdata->apt)
2943 *type = APTTYPE_CURRENT;
2944 else if (tlsdata->apt->multi_threaded)
2945 *type = APTTYPE_MTA;
2946 else if (tlsdata->apt->main)
2948 else
2949 *type = APTTYPE_STA;
2950
2952
2953 if (!tlsdata->apt && (apt = apartment_get_mta()))
2954 {
2955 apartment_release(apt);
2956 *type = APTTYPE_MTA;
2958 return S_OK;
2959 }
2960
2961 return tlsdata->apt ? S_OK : CO_E_NOTINITIALIZED;
2962}
struct apartment * apartment_get_mta(void)
Definition: apartment.c:607
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static APTTYPEQUALIFIER * qualifier
Definition: compobj.c:77
enum APTTYPE_MAINSTA
enum APTTYPE_MTA
@ APTTYPEQUALIFIER_IMPLICIT_MTA
@ APTTYPEQUALIFIER_NONE
enum APTTYPE_STA
struct apartment * apt

Referenced by check_apartment_thread(), test_implicit_mta(), thread_context_info_GetCurrentApartmentType(), and thread_context_info_GetCurrentThreadType().

◆ CoGetCallContext()

HRESULT WINAPI CoGetCallContext ( REFIID  riid,
void **  obj 
)

Definition at line 1944 of file combase.c.

1945{
1946 struct tlsdata *tlsdata;
1947 HRESULT hr;
1948
1949 TRACE("%s, %p\n", debugstr_guid(riid), obj);
1950
1952 return hr;
1953
1954 if (!tlsdata->call_state)
1955 return RPC_E_CALL_COMPLETE;
1956
1957 return IUnknown_QueryInterface(tlsdata->call_state, riid, obj);
1958}
IUnknown * call_state
#define RPC_E_CALL_COMPLETE
Definition: winerror.h:3571

Referenced by CoImpersonateClient(), CoQueryClientBlanket(), CoRevertToSelf(), and test_CoGetCallContext().

◆ CoGetCallerTID()

HRESULT WINAPI CoGetCallerTID ( DWORD tid)

Definition at line 3323 of file combase.c.

3324{
3325 FIXME("stub!\n");
3326 return E_NOTIMPL;
3327}

◆ CoGetCallState()

HRESULT WINAPI CoGetCallState ( int  arg1,
ULONG arg2 
)

Definition at line 1204 of file combase.c.

1205{
1206 FIXME("%d, %p.\n", arg1, arg2);
1207
1208 return E_NOTIMPL;
1209}
GLuint GLuint GLuint GLuint arg1
Definition: glext.h:9513

◆ CoGetClassObject()

◆ CoGetContextToken()

HRESULT WINAPI CoGetContextToken ( ULONG_PTR token)

Definition at line 2668 of file combase.c.

2669{
2670 struct tlsdata *tlsdata;
2671 HRESULT hr;
2672
2673 TRACE("%p\n", token);
2674
2676 {
2677 ERR("apartment not initialised\n");
2678 return CO_E_NOTINITIALIZED;
2679 }
2680
2682 return hr;
2683
2684 if (!token)
2685 return E_POINTER;
2686
2687 if (!tlsdata->context_token)
2688 {
2689 struct thread_context *context;
2690
2691 context = calloc(1, sizeof(*context));
2692 if (!context)
2693 return E_OUTOFMEMORY;
2694
2695 context->IComThreadingInfo_iface.lpVtbl = &thread_context_info_vtbl;
2696 context->IContextCallback_iface.lpVtbl = &thread_context_callback_vtbl;
2697 context->IObjContext_iface.lpVtbl = &thread_object_context_vtbl;
2698 /* Context token does not take a reference, it's always zero until the
2699 interface is explicitly requested with CoGetObjectContext(). */
2700 context->refcount = 0;
2701
2702 tlsdata->context_token = &context->IObjContext_iface;
2703 }
2704
2706 TRACE("context_token %p\n", tlsdata->context_token);
2707
2708 return S_OK;
2709}
static const IObjContextVtbl thread_object_context_vtbl
Definition: combase.c:2647
static const IComThreadingInfoVtbl thread_context_info_vtbl
Definition: combase.c:2521
static const IContextCallbackVtbl thread_context_callback_vtbl
Definition: combase.c:2558
BOOL WINAPI InternalIsProcessInitialized(void)
Definition: combase.c:391
#define ULONG_PTR
Definition: config.h:101
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
Definition: glfuncs.h:210
#define calloc
Definition: rosglue.h:14
Definition: http.c:7252
IObjContext * context_token

Referenced by CoGetObjectContext(), and implicit_mta_proc().

◆ CoGetCurrentLogicalThreadId()

HRESULT WINAPI CoGetCurrentLogicalThreadId ( GUID id)

Definition at line 2714 of file combase.c.

2715{
2716 struct tlsdata *tlsdata;
2717 HRESULT hr;
2718
2719 if (!id)
2720 return E_INVALIDARG;
2721
2723 return hr;
2724
2726 {
2729 }
2730
2731 *id = tlsdata->causality_id;
2732
2733 return S_OK;
2734}
@ OLETLS_UUIDINITIALIZED
HRESULT WINAPI CoCreateGuid(GUID *guid)
Definition: combase.c:1016
#define GUID_NULL
Definition: ks.h:106
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
DWORD flags
GUID causality_id

Referenced by ClientRpcChannelBuffer_GetBuffer(), test_CoGetCurrentLogicalThreadId(), test_CoGetObjectContext(), test_oletlsdata(), and thread_context_info_GetCurrentLogicalThreadId().

◆ CoGetCurrentProcess()

DWORD WINAPI CoGetCurrentProcess ( void  )

Definition at line 2739 of file combase.c.

2740{
2741 struct tlsdata *tlsdata;
2742
2744 return 0;
2745
2746 if (!tlsdata->thread_seqid)
2748
2749 return tlsdata->thread_seqid;
2750}
HRESULT rpcss_get_next_seqid(DWORD *id)
Definition: rpc.c:308
DWORD thread_seqid

Referenced by co_get_current_process_thread(), and test_CoGetCurrentProcess().

◆ CoGetDefaultContext()

HRESULT WINAPI CoGetDefaultContext ( APTTYPE  type,
REFIID  riid,
void **  obj 
)

Definition at line 1194 of file combase.c.

1195{
1196 FIXME("%d, %s, %p stub\n", type, debugstr_guid(riid), obj);
1197
1198 return E_NOINTERFACE;
1199}

◆ CoGetInstanceFromFile()

HRESULT WINAPI DECLSPEC_HOTPATCH CoGetInstanceFromFile ( COSERVERINFO server_info,
CLSID rclsid,
IUnknown outer,
DWORD  cls_context,
DWORD  grfmode,
OLECHAR filename,
DWORD  count,
MULTI_QI *  results 
)

Definition at line 1575 of file combase.c.

1578{
1579 IPersistFile *pf = NULL;
1580 IUnknown *obj = NULL;
1581 CLSID clsid;
1582 HRESULT hr;
1583
1584 if (!count || !results)
1585 return E_INVALIDARG;
1586
1587 if (server_info)
1588 FIXME("() non-NULL server_info not supported\n");
1589
1591
1592 if (!rclsid)
1593 {
1595 if (FAILED(hr))
1596 {
1597 ERR("Failed to get CLSID from a file.\n");
1598 return hr;
1599 }
1600
1601 rclsid = &clsid;
1602 }
1603
1604 hr = CoCreateInstance(rclsid, outer, cls_context, &IID_IUnknown, (void **)&obj);
1605 if (hr != S_OK)
1606 {
1608 return hr;
1609 }
1610
1611 /* Init from file */
1612 hr = IUnknown_QueryInterface(obj, &IID_IPersistFile, (void **)&pf);
1613 if (FAILED(hr))
1614 {
1616 IUnknown_Release(obj);
1617 return hr;
1618 }
1619
1620 hr = IPersistFile_Load(pf, filename, grfmode);
1621 IPersistFile_Release(pf);
1622 if (SUCCEEDED(hr))
1624 else
1625 {
1627 IUnknown_Release(obj);
1628 return hr;
1629 }
1630}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
HRESULT WINAPI GetClassFile(LPCOLESTR filePathName, CLSID *pclsid)
Definition: moniker.c:921
const char * filename
Definition: ioapi.h:137
const GUID IID_IPersistFile

Referenced by test_CoGetInstanceFromFile().

◆ CoGetInstanceFromIStorage()

HRESULT WINAPI CoGetInstanceFromIStorage ( COSERVERINFO server_info,
CLSID rclsid,
IUnknown outer,
DWORD  cls_context,
IStorage storage,
DWORD  count,
MULTI_QI *  results 
)

Definition at line 1635 of file combase.c.

1637{
1638 IPersistStorage *ps = NULL;
1639 IUnknown *obj = NULL;
1640 STATSTG stat;
1641 HRESULT hr;
1642
1643 if (!count || !results || !storage)
1644 return E_INVALIDARG;
1645
1646 if (server_info)
1647 FIXME("() non-NULL server_info not supported\n");
1648
1650
1651 if (!rclsid)
1652 {
1653 memset(&stat.clsid, 0, sizeof(stat.clsid));
1654 hr = IStorage_Stat(storage, &stat, STATFLAG_NONAME);
1655 if (FAILED(hr))
1656 {
1657 ERR("Failed to get CLSID from a storage.\n");
1658 return hr;
1659 }
1660
1661 rclsid = &stat.clsid;
1662 }
1663
1664 hr = CoCreateInstance(rclsid, outer, cls_context, &IID_IUnknown, (void **)&obj);
1665 if (hr != S_OK)
1666 return hr;
1667
1668 /* Init from IStorage */
1669 hr = IUnknown_QueryInterface(obj, &IID_IPersistStorage, (void **)&ps);
1670 if (FAILED(hr))
1671 ERR("failed to get IPersistStorage\n");
1672
1673 if (ps)
1674 {
1675 IPersistStorage_Load(ps, storage);
1676 IPersistStorage_Release(ps);
1677 }
1678
1680}
#define stat
Definition: acwin.h:99
const GUID IID_IPersistStorage
Definition: stat.h:66

◆ CoGetObjectContext()

HRESULT WINAPI CoGetObjectContext ( REFIID  riid,
void **  ppv 
)

Definition at line 1176 of file combase.c.

1177{
1179 HRESULT hr;
1180
1181 TRACE("%s, %p.\n", debugstr_guid(riid), ppv);
1182
1183 *ppv = NULL;
1185 if (FAILED(hr))
1186 return hr;
1187
1188 return IObjContext_QueryInterface(context, riid, ppv);
1189}
HRESULT WINAPI CoGetContextToken(ULONG_PTR *token)
Definition: combase.c:2668
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by implicit_mta_proc().

◆ CoGetPSClsid()

HRESULT WINAPI CoGetPSClsid ( REFIID  riid,
CLSID pclsid 
)

Definition at line 2294 of file combase.c.

2295{
2296 static const WCHAR interfaceW[] = L"Interface\\";
2297 static const WCHAR psW[] = L"\\ProxyStubClsid32";
2298 WCHAR path[ARRAY_SIZE(interfaceW) - 1 + CHARS_IN_GUID - 1 + ARRAY_SIZE(psW)];
2299 ACTCTX_SECTION_KEYED_DATA data;
2300 struct registered_ps *cur;
2301 REGSAM opposite = (sizeof(void*) > sizeof(int)) ? KEY_WOW64_32KEY : KEY_WOW64_64KEY;
2302 BOOL is_wow64;
2303 HRESULT hr;
2304
2305 TRACE("%s, %p\n", debugstr_guid(riid), pclsid);
2306
2308 {
2309 ERR("apartment not initialised\n");
2310 return CO_E_NOTINITIALIZED;
2311 }
2312
2313 if (!pclsid)
2314 return E_INVALIDARG;
2315
2317
2319 {
2320 if (IsEqualIID(&cur->iid, riid))
2321 {
2322 *pclsid = cur->clsid;
2324 return S_OK;
2325 }
2326 }
2327
2329
2330 data.cbSize = sizeof(data);
2331 if (FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION,
2332 riid, &data))
2333 {
2334 struct ifacepsredirect_data *ifaceps = (struct ifacepsredirect_data *)data.lpData;
2335 *pclsid = ifaceps->iid;
2336 return S_OK;
2337 }
2338
2339 /* Interface\\{string form of riid}\\ProxyStubClsid32 */
2340 lstrcpyW(path, interfaceW);
2341 StringFromGUID2(riid, path + ARRAY_SIZE(interfaceW) - 1, CHARS_IN_GUID);
2342 lstrcpyW(path + ARRAY_SIZE(interfaceW) - 1 + CHARS_IN_GUID - 1, psW);
2343
2345 if (FAILED(hr) && (opposite == KEY_WOW64_32KEY || (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)))
2346 hr = get_ps_clsid_from_registry(path, opposite | KEY_READ, pclsid);
2347
2348 if (hr == S_OK)
2349 TRACE("() Returning CLSID %s\n", debugstr_guid(pclsid));
2350 else
2351 WARN("No PSFactoryBuffer object is registered for IID %s\n", debugstr_guid(riid));
2352
2353 return hr;
2354}
#define ARRAY_SIZE(A)
Definition: main.h:20
static struct list registered_proxystubs
Definition: combase.c:110
static HRESULT get_ps_clsid_from_registry(const WCHAR *path, REGSAM access, CLSID *pclsid)
Definition: combase.c:2269
static CRITICAL_SECTION cs_registered_ps
Definition: combase.c:112
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define GetCurrentProcess()
Definition: compat.h:759
#define IsWow64Process
Definition: compat.h:760
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
Definition: actctx.c:265
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL is_wow64
Definition: main.c:38
#define KEY_READ
Definition: nt_native.h:1026
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
ACCESS_MASK REGSAM
Definition: winreg.h:76
#define KEY_WOW64_32KEY
Definition: cmtypes.h:45
#define KEY_WOW64_64KEY
Definition: cmtypes.h:46

Referenced by create_proxy(), create_stub(), get_facbuf_for_iid(), implicit_mta_proc(), register_ps_clsid_thread(), test_CoGetPSClsid(), test_CoRegisterPSClsid(), test_marshal_channel_buffer(), test_proxybuffer(), test_stub(), and test_stubbuffer().

◆ CoGetTreatAsClass()

HRESULT WINAPI CoGetTreatAsClass ( REFCLSID  clsidOld,
CLSID clsidNew 
)

Definition at line 1224 of file combase.c.

1225{
1226 WCHAR buffW[CHARS_IN_GUID];
1227 LONG len = sizeof(buffW);
1228 HRESULT hr = S_OK;
1229 HKEY hkey = NULL;
1230
1231 TRACE("%s, %p.\n", debugstr_guid(clsidOld), clsidNew);
1232
1233 if (!clsidOld || !clsidNew)
1234 return E_INVALIDARG;
1235
1236 *clsidNew = *clsidOld;
1237
1238 hr = open_key_for_clsid(clsidOld, L"TreatAs", KEY_READ, &hkey);
1239 if (FAILED(hr))
1240 {
1241 hr = S_FALSE;
1242 goto done;
1243 }
1244
1245 if (RegQueryValueW(hkey, NULL, buffW, &len))
1246 {
1247 hr = S_FALSE;
1248 goto done;
1249 }
1250
1251 hr = CLSIDFromString(buffW, clsidNew);
1252 if (FAILED(hr))
1253 ERR("Failed to get CLSID from string %s, hr %#lx.\n", debugstr_w(buffW), hr);
1254done:
1255 if (hkey) RegCloseKey(hkey);
1256 return hr;
1257}
HRESULT open_key_for_clsid(REFCLSID clsid, const WCHAR *keyname, REGSAM access, HKEY *subkey)
Definition: combase.c:320
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
Definition: combase.c:1470
GLenum GLsizei len
Definition: glext.h:6722
#define S_FALSE
Definition: winerror.h:3451

Referenced by CoCreateInstanceEx(), and test_TreatAsClass().

◆ CoImpersonateClient()

HRESULT WINAPI CoImpersonateClient ( void  )

Definition at line 1123 of file combase.c.

1124{
1125 IServerSecurity *server_security;
1126 HRESULT hr;
1127
1128 TRACE("\n");
1129
1130 hr = CoGetCallContext(&IID_IServerSecurity, (void **)&server_security);
1131 if (SUCCEEDED(hr))
1132 {
1133 hr = IServerSecurity_ImpersonateClient(server_security);
1134 IServerSecurity_Release(server_security);
1135 }
1136
1137 return hr;
1138}
HRESULT WINAPI CoGetCallContext(REFIID riid, void **obj)
Definition: combase.c:1944

◆ CoIncrementMTAUsage()

HRESULT WINAPI CoIncrementMTAUsage ( CO_MTA_USAGE_COOKIE *  cookie)

Definition at line 2907 of file combase.c.

2908{
2909 TRACE("%p\n", cookie);
2910
2912}
HRESULT apartment_increment_mta_usage(CO_MTA_USAGE_COOKIE *cookie)
Definition: apartment.c:1175

◆ CoInitializeEx()

HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx ( void reserved,
DWORD  model 
)

Definition at line 2803 of file combase.c.

2804{
2805 struct tlsdata *tlsdata;
2806 struct init_spy *cursor;
2807 HRESULT hr;
2808
2809 TRACE("%p, %#lx\n", reserved, model);
2810
2811 if (reserved)
2812 WARN("Unexpected reserved argument %p\n", reserved);
2813
2815 return hr;
2816
2818 TRACE("Initializing the COM libraries\n");
2819
2822 {
2823 if (cursor->spy) IInitializeSpy_PreInitialize(cursor->spy, model, tlsdata->inits);
2824 }
2826
2827 hr = enter_apartment(tlsdata, model);
2828
2831 {
2832 if (cursor->spy) hr = IInitializeSpy_PostInitialize(cursor->spy, hr, model, tlsdata->inits);
2833 }
2835
2836 return hr;
2837}
HRESULT enter_apartment(struct tlsdata *data, DWORD model)
Definition: apartment.c:1129
static void unlock_init_spies(struct tlsdata *tlsdata)
Definition: combase.c:2776
static void lock_init_spies(struct tlsdata *tlsdata)
Definition: combase.c:2771
static LONG com_lockcount
Definition: combase.c:51
const char cursor[]
Definition: icontest.c:13
#define InterlockedExchangeAdd
Definition: interlocked.h:196
DWORD inits
struct list spies

Referenced by apartment_hostobject_thread(), bad_thread_proc(), CoInitialize(), custom_action_server(), custom_client_thread(), DllMain(), download_proc(), dummy_thread_proc(), duo_marshal_thread_proc(), FileExtractDialogWndProc(), get_class_object_proxy_thread(), get_class_object_thread(), host_object_proc(), Imm32CoInitializeEx(), implicit_mta_unmarshal_proc(), implicit_mta_use_proc(), InitializeSecurity(), is_firewall_enabled(), local_server_GetClassID(), main_test(), MCIQTZ_mciOpen(), mta_init_implicit_thread(), mta_init_thread(), no_couninitialize_client_proc(), no_couninitialize_server_proc(), ole_server(), OleInitialize(), parse_config_stream(), PullPin_Thread_Main(), register_class_object_thread(), register_ps_clsid_thread(), revoke_class_object_thread(), RoInitialize(), RunDlgProc(), CFindFolder::SearchThreadProc(), second_mta_thread_proc(), server(), set_firewall(), SHCoInitializeAnyApartment(), SHLWAPI_ThreadWrapper(), START_TEST(), StartCount(), CSysTray::SysTrayThreadProc(), test_cocreateinstance_proxy(), test_CoFreeUnusedLibraries(), test_CoGetApartmentType(), test_CoGetClassObject(), test_CoGetInstanceFromFile(), test_CoGetInterfaceAndReleaseStream(), test_CoGetObjectContext(), test_CoGetPSClsid(), test_CoInitializeEx(), test_CoMarshalInterface(), test_CoMarshalInterThreadInterfaceInStream(), test_CoRegisterClassObject(), test_CoRegisterMessageFilter(), test_CoRegisterPSClsid(), test_CoUnmarshalInterface(), test_CoWaitForMultipleHandles(), test_CoWaitForMultipleHandles_thread(), test_IInitializeSpy(), test_IInitializeSpy_register2(), test_IInitializeSpy_switch_apt(), test_implicit_mta(), test_init_spies_proc(), test_marshal_proxy_apartment_shutdown(), test_marshal_proxy_mta_apartment_shutdown(), test_mta_creation_thread_change_apartment(), test_mta_usage(), test_MultiThreadApartment_Thread(), test_OleInitialize_InitCounting(), test_oletlsdata(), test_registered_object_thread_affinity(), test_render_with_multithread(), test_RtlQueryPackageIdentity(), test_shortcut(), test_stub(), test_WICCreateColorTransform_Proxy(), TestClassesEx(), TestThread(), union_tests(), and WICCreateColorTransform_Proxy().

◆ CoInitializeSecurity()

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 
)

Definition at line 1163 of file combase.c.

1166{
1167 FIXME("%p, %ld, %p, %p, %ld, %ld, %p, %ld, %p stub\n", sd, cAuthSvc, asAuthSvc, reserved1, authn_level,
1168 imp_level, reserved2, capabilities, reserved3);
1169
1170 return S_OK;
1171}
uint8_t reserved2[12]
Definition: fsck.fat.h:23
uint8_t reserved3
Definition: fsck.fat.h:26
static const WCHAR sd[]
Definition: suminfo.c:286

Referenced by InitializeSecurity(), query_prop(), START_TEST(), and StartCount().

◆ CoInitializeWOW()

HRESULT WINAPI CoInitializeWOW ( DWORD  arg1,
DWORD  arg2 
)

Definition at line 2793 of file combase.c.

2794{
2795 FIXME("%#lx, %#lx\n", arg1, arg2);
2796
2797 return S_OK;
2798}

◆ CoIsHandlerConnected()

BOOL WINAPI CoIsHandlerConnected ( IUnknown object)

Definition at line 3332 of file combase.c.

3333{
3334 FIXME("%p\n", object);
3335
3336 return TRUE;
3337}

◆ CoLockObjectExternal()

HRESULT WINAPI CoLockObjectExternal ( IUnknown object,
BOOL  lock,
BOOL  last_unlock_releases 
)

Definition at line 3237 of file combase.c.

3238{
3239 struct stub_manager *stubmgr;
3240 struct apartment *apt;
3241
3242 TRACE("%p, %d, %d\n", object, lock, last_unlock_releases);
3243
3244 if (!(apt = apartment_get_current_or_mta()))
3245 {
3246 ERR("apartment not initialised\n");
3247 return CO_E_NOTINITIALIZED;
3248 }
3249
3250 stubmgr = get_stub_manager_from_object(apt, object, lock);
3251 if (!stubmgr)
3252 {
3253 WARN("stub object not found %p\n", object);
3254 /* Note: native is pretty broken here because it just silently
3255 * fails, without returning an appropriate error code, making apps
3256 * think that the object was disconnected, when it actually wasn't */
3257 apartment_release(apt);
3258 return S_OK;
3259 }
3260
3261 if (lock)
3262 stub_manager_ext_addref(stubmgr, 1, FALSE);
3263 else
3264 stub_manager_ext_release(stubmgr, 1, FALSE, last_unlock_releases);
3265
3266 stub_manager_int_release(stubmgr);
3267 apartment_release(apt);
3268 return S_OK;
3269}
ULONG stub_manager_ext_release(struct stub_manager *m, ULONG refs, BOOL tableweak, BOOL last_unlock_releases)
Definition: stubmanager.c:437
ULONG stub_manager_ext_addref(struct stub_manager *m, ULONG refs, BOOL tableweak)
Definition: stubmanager.c:406
rwlock_t lock
Definition: tcpcore.h:0

Referenced by CoRegisterClassObject(), implicit_mta_proc(), OleNoteObjectVisible(), test_disconnect_stub(), and test_lock_object_external().

◆ com_cleanup_tlsdata()

static void com_cleanup_tlsdata ( void  )
static

Definition at line 416 of file combase.c.

417{
418 struct tlsdata *tlsdata = NtCurrentTeb()->ReservedForOle;
419 struct init_spy *cursor, *cursor2;
420
421 if (!tlsdata)
422 return;
423
424 if (tlsdata->apt)
428
429 if (tlsdata->errorinfo)
430 IErrorInfo_Release(tlsdata->errorinfo);
431 if (tlsdata->state)
432 IUnknown_Release(tlsdata->state);
433
435 {
436 list_remove(&cursor->entry);
437 if (cursor->spy)
438 IInitializeSpy_Release(cursor->spy);
439 free(cursor);
440 }
441
443 IObjContext_Release(tlsdata->context_token);
444
445 free(tlsdata);
446 NtCurrentTeb()->ReservedForOle = NULL;
447}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
#define NtCurrentTeb
CO_MTA_USAGE_COOKIE implicit_mta_cookie
IUnknown * state
IErrorInfo * errorinfo

Referenced by DllMain().

◆ com_get_class_object()

static HRESULT com_get_class_object ( REFCLSID  rclsid,
DWORD  clscontext,
COSERVERINFO server_info,
REFIID  riid,
void **  obj 
)
static

Definition at line 1714 of file combase.c.

1716{
1717 struct class_reg_data clsreg = { 0 };
1719 IUnknown *registered_obj;
1720 struct apartment *apt;
1721
1722 if (!obj)
1723 return E_INVALIDARG;
1724
1725 *obj = NULL;
1726
1727 if (!(apt = apartment_get_current_or_mta()))
1728 {
1729 ERR("apartment not initialised\n");
1730 return CO_E_NOTINITIALIZED;
1731 }
1732
1733 if (server_info)
1734 FIXME("server_info name %s, authinfo %p\n", debugstr_w(server_info->pwszName), server_info->pAuthInfo);
1735
1736 if (clscontext & CLSCTX_INPROC_SERVER)
1737 {
1740 (!(clscontext & CLSCTX_APPCONTAINER) && IsEqualCLSID(rclsid, &CLSID_ManualResetEvent)) ||
1742 {
1743 apartment_release(apt);
1744
1745 if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions))
1746 return get_builtin_class_factory(rclsid, riid, obj);
1747 else
1748 return Ole32DllGetClassObject(rclsid, riid, obj);
1749 }
1750 }
1751
1752 if (clscontext & CLSCTX_INPROC)
1753 {
1754 ACTCTX_SECTION_KEYED_DATA data;
1755
1756 data.cbSize = sizeof(data);
1757 /* search activation context first */
1758 if (FindActCtxSectionGuid(FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL,
1759 ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION, rclsid, &data))
1760 {
1761 struct comclassredirect_data *comclass = (struct comclassredirect_data *)data.lpData;
1762
1763 clsreg.u.actctx.module_name = (WCHAR *)((BYTE *)data.lpSectionBase + comclass->name_offset);
1764 clsreg.u.actctx.hactctx = data.hActCtx;
1765 clsreg.u.actctx.threading_model = comclass->model;
1766 clsreg.origin = CLASS_REG_ACTCTX;
1767
1768 hr = apartment_get_inproc_class_object(apt, &clsreg, &comclass->clsid, riid, clscontext, obj);
1769 ReleaseActCtx(data.hActCtx);
1770 apartment_release(apt);
1771 return hr;
1772 }
1773 }
1774
1775 /*
1776 * First, try and see if we can't match the class ID with one of the
1777 * registered classes.
1778 */
1779 if (!(clscontext & CLSCTX_APPCONTAINER) && (registered_obj = com_get_registered_class_object(apt, rclsid, clscontext)))
1780 {
1781 hr = IUnknown_QueryInterface(registered_obj, riid, obj);
1782 IUnknown_Release(registered_obj);
1783 apartment_release(apt);
1784 return hr;
1785 }
1786
1787 /* First try in-process server */
1788 if (clscontext & CLSCTX_INPROC_SERVER)
1789 {
1790 HKEY hkey;
1791
1792 hr = open_key_for_clsid(rclsid, L"InprocServer32", KEY_READ, &hkey);
1793 if (FAILED(hr))
1794 {
1795 if (hr == REGDB_E_CLASSNOTREG)
1796 ERR("class %s not registered\n", debugstr_guid(rclsid));
1797 else if (hr == REGDB_E_KEYMISSING)
1798 {
1799 WARN("class %s not registered as in-proc server\n", debugstr_guid(rclsid));
1801 }
1802 }
1803
1804 if (SUCCEEDED(hr))
1805 {
1806 clsreg.u.hkey = hkey;
1807 clsreg.origin = CLASS_REG_REGISTRY;
1808
1809 hr = apartment_get_inproc_class_object(apt, &clsreg, rclsid, riid, clscontext, obj);
1810 RegCloseKey(hkey);
1811 }
1812
1813 /* return if we got a class, otherwise fall through to one of the
1814 * other types */
1815 if (SUCCEEDED(hr))
1816 {
1817 apartment_release(apt);
1818 return hr;
1819 }
1820 }
1821
1822 /* Next try in-process handler */
1823 if (clscontext & CLSCTX_INPROC_HANDLER)
1824 {
1825 HKEY hkey;
1826
1827 hr = open_key_for_clsid(rclsid, L"InprocHandler32", KEY_READ, &hkey);
1828 if (FAILED(hr))
1829 {
1830 if (hr == REGDB_E_CLASSNOTREG)
1831 ERR("class %s not registered\n", debugstr_guid(rclsid));
1832 else if (hr == REGDB_E_KEYMISSING)
1833 {
1834 WARN("class %s not registered in-proc handler\n", debugstr_guid(rclsid));
1836 }
1837 }
1838
1839 if (SUCCEEDED(hr))
1840 {
1841 clsreg.u.hkey = hkey;
1842 clsreg.origin = CLASS_REG_REGISTRY;
1843
1844 hr = apartment_get_inproc_class_object(apt, &clsreg, rclsid, riid, clscontext, obj);
1845 RegCloseKey(hkey);
1846 }
1847
1848 /* return if we got a class, otherwise fall through to one of the
1849 * other types */
1850 if (SUCCEEDED(hr))
1851 {
1852 apartment_release(apt);
1853 return hr;
1854 }
1855 }
1856 apartment_release(apt);
1857
1858 /* Next try out of process */
1859 if (clscontext & CLSCTX_LOCAL_SERVER)
1860 {
1862 if (SUCCEEDED(hr))
1863 return hr;
1864 }
1865
1866 /* Finally try remote: this requires networked DCOM (a lot of work) */
1867 if (clscontext & CLSCTX_REMOTE_SERVER)
1868 {
1869 FIXME ("CLSCTX_REMOTE_SERVER not supported\n");
1871 }
1872
1873 if (FAILED(hr))
1874 ERR("no class object %s could be created for context %#lx\n", debugstr_guid(rclsid), clscontext);
1875
1876 return hr;
1877}
HRESULT apartment_get_inproc_class_object(struct apartment *apt, const struct class_reg_data *regdata, REFCLSID rclsid, REFIID riid, DWORD class_context, void **ppv)
Definition: apartment.c:1031
const CLSID CLSID_GlobalOptions
const CLSID CLSID_ManualResetEvent
const CLSID CLSID_InProcFreeMarshaler
const CLSID CLSID_StdGlobalInterfaceTable
@ CLASS_REG_REGISTRY
@ CLASS_REG_ACTCTX
HRESULT rpc_get_local_class_object(REFCLSID rclsid, REFIID riid, void **obj)
Definition: rpc.c:629
static HRESULT get_builtin_class_factory(REFCLSID rclsid, REFIID riid, void **obj)
Definition: combase.c:591
HRESULT WINAPI Ole32DllGetClassObject(REFCLSID rclsid, REFIID riid, void **obj)
Definition: oleproxy.c:229
IUnknown * com_get_registered_class_object(const struct apartment *apt, REFCLSID rclsid, DWORD clscontext)
Definition: combase.c:144
VOID WINAPI ReleaseActCtx(IN HANDLE hActCtx)
Definition: actctx.c:208
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
union class_reg_data::@323 u
enum class_reg_data_origin origin
struct class_reg_data::@323::@324 actctx
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define E_UNEXPECTED
Definition: winerror.h:3528
#define REGDB_E_KEYMISSING
Definition: winerror.h:3799

Referenced by CoCreateInstanceEx(), and CoGetClassObject().

◆ com_get_registered_class_object()

IUnknown * com_get_registered_class_object ( const struct apartment apt,
REFCLSID  rclsid,
DWORD  clscontext 
)

Definition at line 144 of file combase.c.

145{
146 struct registered_class *cur;
147 IUnknown *object = NULL;
148
150
152 {
153 if ((apt->oxid == cur->apartment_id) &&
154 (clscontext & cur->clscontext) &&
155 IsEqualGUID(&cur->clsid, rclsid))
156 {
157 object = cur->object;
158 IUnknown_AddRef(cur->object);
159 break;
160 }
161 }
162
164
165 return object;
166}
PMInterfacePointer object
Definition: rpcss_main.c:51

Referenced by com_get_class_object(), CoRegisterClassObject(), and local_server_QueryService().

◆ com_peek_message()

static BOOL com_peek_message ( struct apartment apt,
MSG msg 
)
static

Definition at line 2055 of file combase.c.

2056{
2057 /* First try to retrieve messages for incoming COM calls to the apartment window */
2058 return (apt->win && PeekMessageW(msg, apt->win, 0, 0, PM_REMOVE | PM_NOYIELD)) ||
2059 /* Next retrieve other messages necessary for the app to remain responsive */
2061 PeekMessageW(msg, NULL, 0, 0, PM_QS_PAINT | PM_QS_SENDMESSAGE | PM_REMOVE | PM_NOYIELD);
2062}
#define msg(x)
Definition: auth_time.c:54
#define WM_DDE_FIRST
Definition: dde.h:47
#define WM_DDE_LAST
Definition: dde.h:46
#define PM_NOYIELD
Definition: winuser.h:1208
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define PM_REMOVE
Definition: winuser.h:1207

Referenced by CoWaitForMultipleHandles().

◆ com_revoke_all_ps_clsids()

static void com_revoke_all_ps_clsids ( void  )
static

Definition at line 2254 of file combase.c.

2255{
2256 struct registered_ps *cur, *cur2;
2257
2259
2261 {
2262 list_remove(&cur->entry);
2263 free(cur);
2264 }
2265
2267}

Referenced by CoUninitialize().

◆ com_revoke_class_object()

static void com_revoke_class_object ( struct registered_class entry)
static

Definition at line 3062 of file combase.c.

3063{
3064 list_remove(&entry->entry);
3065
3066 if (entry->clscontext & CLSCTX_LOCAL_SERVER)
3067 rpc_revoke_local_server(entry->rpcss_cookie);
3068
3069 IUnknown_Release(entry->object);
3070 free(entry);
3071}
HRESULT rpc_revoke_local_server(unsigned int cookie)
Definition: rpc.c:375

Referenced by apartment_revoke_all_classes(), com_revoke_local_servers(), and CoRevokeClassObject().

◆ com_revoke_local_servers()

static void com_revoke_local_servers ( void  )
static

Definition at line 3074 of file combase.c.

3075{
3076 struct registered_class *cur, *cur2;
3077
3079
3081 {
3082 if (cur->clscontext & CLSCTX_LOCAL_SERVER)
3084 }
3085
3087}

Referenced by DllMain().

◆ CoQueryClientBlanket()

HRESULT WINAPI CoQueryClientBlanket ( DWORD authn_service,
DWORD authz_service,
OLECHAR **  servername,
DWORD authn_level,
DWORD imp_level,
RPC_AUTHZ_HANDLE privs,
DWORD capabilities 
)

Definition at line 1100 of file combase.c.

1102{
1103 IServerSecurity *server_security;
1104 HRESULT hr;
1105
1106 TRACE("%p, %p, %p, %p, %p, %p, %p.\n", authn_service, authz_service, servername, authn_level, imp_level,
1107 privs, capabilities);
1108
1109 hr = CoGetCallContext(&IID_IServerSecurity, (void **)&server_security);
1110 if (SUCCEEDED(hr))
1111 {
1112 hr = IServerSecurity_QueryBlanket(server_security, authn_service, authz_service, servername, authn_level,
1113 imp_level, privs, capabilities);
1114 IServerSecurity_Release(server_security);
1115 }
1116
1117 return hr;
1118}

◆ CoQueryProxyBlanket()

HRESULT WINAPI CoQueryProxyBlanket ( IUnknown proxy,
DWORD authn_service,
DWORD authz_service,
OLECHAR **  servername,
DWORD authn_level,
DWORD imp_level,
void **  auth_info,
DWORD capabilities 
)

Definition at line 1030 of file combase.c.

1033{
1035 HRESULT hr;
1036
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);
1039
1040 hr = IUnknown_QueryInterface(proxy, &IID_IClientSecurity, (void **)&client_security);
1041 if (SUCCEEDED(hr))
1042 {
1043 hr = IClientSecurity_QueryBlanket(client_security, proxy, authn_service, authz_service, servername,
1044 authn_level, imp_level, auth_info, capabilities);
1045 IClientSecurity_Release(client_security);
1046 }
1047
1048 if (FAILED(hr)) ERR("-- failed with %#lx.\n", hr);
1049 return hr;
1050}

◆ CoRegisterChannelHook()

HRESULT WINAPI CoRegisterChannelHook ( REFGUID  guidExtension,
IChannelHook channel_hook 
)

Definition at line 3274 of file combase.c.

3275{
3276 TRACE("%s, %p\n", debugstr_guid(guidExtension), channel_hook);
3277
3278 return rpc_register_channel_hook(guidExtension, channel_hook);
3279}
HRESULT rpc_register_channel_hook(REFGUID rguid, IChannelHook *hook)
Definition: rpc.c:971

Referenced by test_channel_hook().

◆ CoRegisterClassObject()

HRESULT WINAPI CoRegisterClassObject ( REFCLSID  rclsid,
IUnknown object,
DWORD  clscontext,
DWORD  flags,
DWORD cookie 
)

Definition at line 2970 of file combase.c.

2972{
2973 static LONG next_cookie;
2974
2975 struct registered_class *newclass;
2976 IUnknown *found_object;
2977 struct apartment *apt;
2978 HRESULT hr = S_OK;
2979
2980 TRACE("%s, %p, %#lx, %#lx, %p\n", debugstr_guid(rclsid), object, clscontext, flags, cookie);
2981
2982 if (!cookie || !object)
2983 return E_INVALIDARG;
2984
2985 if (!(apt = apartment_get_current_or_mta()))
2986 {
2987 ERR("COM was not initialized\n");
2988 return CO_E_NOTINITIALIZED;
2989 }
2990
2991 *cookie = 0;
2992
2993 /* REGCLS_MULTIPLEUSE implies registering as inproc server. This is what
2994 * differentiates the flag from REGCLS_MULTI_SEPARATE. */
2996 clscontext |= CLSCTX_INPROC_SERVER;
2997
2998 /*
2999 * First, check if the class is already registered.
3000 * If it is, this should cause an error.
3001 */
3002 if ((found_object = com_get_registered_class_object(apt, rclsid, clscontext)))
3003 {
3005 {
3006 if (clscontext & CLSCTX_LOCAL_SERVER)
3007 hr = CoLockObjectExternal(found_object, TRUE, FALSE);
3008 IUnknown_Release(found_object);
3009 apartment_release(apt);
3010 return hr;
3011 }
3012
3013 IUnknown_Release(found_object);
3014 ERR("object already registered for class %s\n", debugstr_guid(rclsid));
3015 apartment_release(apt);
3016 return CO_E_OBJISREG;
3017 }
3018
3019 newclass = calloc(1, sizeof(*newclass));
3020 if (!newclass)
3021 {
3022 apartment_release(apt);
3023 return E_OUTOFMEMORY;
3024 }
3025
3026 newclass->clsid = *rclsid;
3027 newclass->apartment_id = apt->oxid;
3028 newclass->clscontext = clscontext;
3029 newclass->flags = flags;
3030
3031 if (!(newclass->cookie = InterlockedIncrement(&next_cookie)))
3032 newclass->cookie = InterlockedIncrement(&next_cookie);
3033
3034 newclass->object = object;
3035 IUnknown_AddRef(newclass->object);
3036
3040
3041 *cookie = newclass->cookie;
3042
3043 if (clscontext & CLSCTX_LOCAL_SERVER)
3044 {
3045 IStream *marshal_stream;
3046
3047 hr = apartment_get_local_server_stream(apt, &marshal_stream);
3048 if(FAILED(hr))
3049 {
3050 apartment_release(apt);
3051 return hr;
3052 }
3053
3054 hr = rpc_register_local_server(&newclass->clsid, marshal_stream, flags, &newclass->rpcss_cookie);
3055 IStream_Release(marshal_stream);
3056 }
3057
3058 apartment_release(apt);
3059 return S_OK;
3060}
HRESULT apartment_get_local_server_stream(struct apartment *apt, IStream **ret)
Definition: apartment.c:315
#define InterlockedIncrement
Definition: armddk.h:53
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
HRESULT rpc_register_local_server(REFCLSID clsid, IStream *stream, DWORD flags, unsigned int *cookie)
Definition: rpc.c:701
HRESULT WINAPI CoLockObjectExternal(IUnknown *object, BOOL lock, BOOL last_unlock_releases)
Definition: combase.c:3237
GLbitfield flags
Definition: glext.h:7161
@ REGCLS_MULTIPLEUSE
Definition: objbase.h:396
struct list entry
Definition: rpcss_main.c:48
unsigned int cookie
Definition: rpcss_main.c:50
OXID apartment_id
Definition: combase.c:125
unsigned int rpcss_cookie
Definition: combase.c:130
DWORD clscontext
Definition: combase.c:127
#define CO_E_OBJISREG
Definition: winerror.h:3928

Referenced by ATL::AtlComModuleRegisterClassObjects(), AtlModuleRegisterClassObjects(), host_object_proc(), IEWinMain(), implicit_mta_proc(), local_server_proc(), ole_server(), register_activex(), register_class_object_thread(), register_script_engine(), ATL::_ATL_OBJMAP_ENTRY30::RegisterClassObject(), RegisterTextService(), START_TEST(), StartCount(), test_BindToObject(), test_CoCreateInstanceEx(), test_CoCreateInstanceFromApp(), test_CoGetInstanceFromFile(), test_CoRegisterClassObject(), test_CoRegisterPSClsid(), test_default_handler(), test_default_handler_run(), test_delegated_methods(), test_local_server(), test_marshal_channel_buffer(), test_MkParseDisplayName(), test_register_local_server(), test_registered_object_thread_affinity(), and test_render_filter_priority().

◆ CoRegisterInitializeSpy()

HRESULT WINAPI CoRegisterInitializeSpy ( IInitializeSpy spy,
ULARGE_INTEGER cookie 
)

Definition at line 1983 of file combase.c.

1984{
1985 struct tlsdata *tlsdata;
1986 struct init_spy *entry;
1987 unsigned int id;
1988 HRESULT hr;
1989
1990 TRACE("%p, %p\n", spy, cookie);
1991
1992 if (!spy || !cookie)
1993 return E_INVALIDARG;
1994
1996 return hr;
1997
1998 hr = IInitializeSpy_QueryInterface(spy, &IID_IInitializeSpy, (void **)&spy);
1999 if (FAILED(hr))
2000 return hr;
2001
2002 entry = malloc(sizeof(*entry));
2003 if (!entry)
2004 {
2005 IInitializeSpy_Release(spy);
2006 return E_OUTOFMEMORY;
2007 }
2008
2009 entry->spy = spy;
2010
2011 id = 0;
2012 while (get_spy_entry(tlsdata, id) != NULL)
2013 {
2014 id++;
2015 }
2016
2017 entry->id = id;
2018 list_add_head(&tlsdata->spies, &entry->entry);
2019
2020 cookie->u.HighPart = GetCurrentThreadId();
2021 cookie->u.LowPart = entry->id;
2022
2023 return S_OK;
2024}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
static struct init_spy * get_spy_entry(struct tlsdata *tlsdata, unsigned int id)
Definition: combase.c:168
GLuint id
Definition: glext.h:5910
IInitializeSpy * spy
Definition: combase.c:99
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459

Referenced by Imm32CoRegisterInitializeSpy(), and test_IInitializeSpy().

◆ CoRegisterMessageFilter()

HRESULT WINAPI CoRegisterMessageFilter ( IMessageFilter filter,
IMessageFilter **  ret_filter 
)

Definition at line 2220 of file combase.c.

2221{
2222 IMessageFilter *old_filter;
2223 struct apartment *apt;
2224
2225 TRACE("%p, %p\n", filter, ret_filter);
2226
2227 apt = com_get_current_apt();
2228
2229 /* Can't set a message filter in a multi-threaded apartment */
2230 if (!apt || apt->multi_threaded)
2231 {
2232 WARN("Can't set message filter in MTA or uninitialized apt\n");
2233 return CO_E_NOT_SUPPORTED;
2234 }
2235
2236 if (filter)
2237 IMessageFilter_AddRef(filter);
2238
2239 EnterCriticalSection(&apt->cs);
2240
2241 old_filter = apt->filter;
2242 apt->filter = filter;
2243
2244 LeaveCriticalSection(&apt->cs);
2245
2246 if (ret_filter)
2247 *ret_filter = old_filter;
2248 else if (old_filter)
2249 IMessageFilter_Release(old_filter);
2250
2251 return S_OK;
2252}
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
CRITICAL_SECTION cs
IMessageFilter * filter
BOOL multi_threaded
#define CO_E_NOT_SUPPORTED
Definition: winerror.h:3510

Referenced by host_object_proc(), implicit_mta_proc(), test_channel_hook(), test_CoRegisterMessageFilter(), test_CoWaitForMultipleHandles_thread(), and test_message_filter().

◆ CoRegisterPSClsid()

HRESULT WINAPI CoRegisterPSClsid ( REFIID  riid,
REFCLSID  rclsid 
)

Definition at line 2359 of file combase.c.

2360{
2361 struct registered_ps *cur;
2362
2363 TRACE("%s, %s\n", debugstr_guid(riid), debugstr_guid(rclsid));
2364
2366 {
2367 ERR("apartment not initialised\n");
2368 return CO_E_NOTINITIALIZED;
2369 }
2370
2372
2374 {
2375 if (IsEqualIID(&cur->iid, riid))
2376 {
2377 cur->clsid = *rclsid;
2379 return S_OK;
2380 }
2381 }
2382
2383 cur = malloc(sizeof(*cur));
2384 if (!cur)
2385 {
2387 return E_OUTOFMEMORY;
2388 }
2389
2390 cur->iid = *riid;
2391 cur->clsid = *rclsid;
2393
2395
2396 return S_OK;
2397}

Referenced by implicit_mta_proc(), local_server_proc(), register_ps_clsid_thread(), test_CoGetPSClsid(), test_CoRegisterPSClsid(), test_delegated_methods(), test_marshal_channel_buffer(), and test_NdrDllGetClassObject().

◆ CoRegisterSurrogate()

HRESULT WINAPI CoRegisterSurrogate ( ISurrogate surrogate)

Definition at line 3362 of file combase.c.

3363{
3364 FIXME("%p stub\n", surrogate);
3365
3366 return E_NOTIMPL;
3367}

◆ CoRegisterSurrogateEx()

HRESULT WINAPI CoRegisterSurrogateEx ( REFGUID  guid,
void reserved 
)

Definition at line 3372 of file combase.c.

3373{
3374 FIXME("%s, %p stub\n", debugstr_guid(guid), reserved);
3375
3376 return E_NOTIMPL;
3377}

◆ CoReleaseServerProcess()

ULONG WINAPI CoReleaseServerProcess ( void  )

Definition at line 3169 of file combase.c.

3170{
3171 ULONG refs;
3172
3173 TRACE("\n");
3174
3176
3178 /* FIXME: suspend objects */
3179
3181
3182 TRACE("refs after: %ld\n", refs);
3183
3184 return refs;
3185}

Referenced by ATL::CAtlExeModuleT< T >::Unlock(), and UnlockModuleOOP().

◆ CoResumeClassObjects()

HRESULT WINAPI CoResumeClassObjects ( void  )

Definition at line 3352 of file combase.c.

3353{
3354 FIXME("stub\n");
3355
3356 return S_OK;
3357}

Referenced by test_local_server().

◆ CoRevertToSelf()

HRESULT WINAPI CoRevertToSelf ( void  )

Definition at line 1143 of file combase.c.

1144{
1145 IServerSecurity *server_security;
1146 HRESULT hr;
1147
1148 TRACE("\n");
1149
1150 hr = CoGetCallContext(&IID_IServerSecurity, (void **)&server_security);
1151 if (SUCCEEDED(hr))
1152 {
1153 hr = IServerSecurity_RevertToSelf(server_security);
1154 IServerSecurity_Release(server_security);
1155 }
1156
1157 return hr;
1158}

◆ CoRevokeClassObject()

HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject ( DWORD  cookie)

Definition at line 3107 of file combase.c.

3108{
3110 struct registered_class *cur;
3111 struct apartment *apt;
3112
3113 TRACE("%#lx\n", cookie);
3114
3115 if (!(apt = apartment_get_current_or_mta()))
3116 {
3117 ERR("COM was not initialized\n");
3118 return CO_E_NOTINITIALIZED;
3119 }
3120
3122
3124 {
3125 if (cur->cookie != cookie)
3126 continue;
3127
3128 if (cur->apartment_id == apt->oxid)
3129 {
3131 hr = S_OK;
3132 }
3133 else
3134 {
3135 ERR("called from wrong apartment, should be called from %s\n", wine_dbgstr_longlong(cur->apartment_id));
3137 }
3138
3139 break;
3140 }
3141
3143 apartment_release(apt);
3144
3145 return hr;
3146}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
#define RPC_E_WRONG_THREAD
Definition: winerror.h:3562

Referenced by ATL::AtlComModuleRevokeClassObjects(), IEWinMain(), implicit_mta_proc(), local_server_proc(), ole_server(), revoke_class_object_thread(), ATL::_ATL_OBJMAP_ENTRY30::RevokeClassObject(), START_TEST(), test_BindToObject(), test_CoCreateInstanceEx(), test_CoCreateInstanceFromApp(), test_CoGetInstanceFromFile(), test_CoRegisterClassObject(), test_CoRegisterPSClsid(), test_default_handler(), test_default_handler_run(), test_delegated_methods(), test_local_server(), test_marshal_channel_buffer(), test_MkParseDisplayName(), test_register_local_server(), test_registered_object_thread_affinity(), test_render_filter_priority(), and UnregisterTextService().

◆ CoRevokeInitializeSpy()

HRESULT WINAPI CoRevokeInitializeSpy ( ULARGE_INTEGER  cookie)

Definition at line 2029 of file combase.c.

2030{
2031 struct tlsdata *tlsdata;
2032 struct init_spy *spy;
2033 HRESULT hr;
2034
2035 TRACE("%s\n", wine_dbgstr_longlong(cookie.QuadPart));
2036
2037 if (cookie.u.HighPart != GetCurrentThreadId())
2038 return E_INVALIDARG;
2039
2041 return hr;
2042
2043 if (!(spy = get_spy_entry(tlsdata, cookie.u.LowPart))) return E_INVALIDARG;
2044
2045 IInitializeSpy_Release(spy->spy);
2046 spy->spy = NULL;
2047 if (!tlsdata->spies_lock)
2048 {
2049 list_remove(&spy->entry);
2050 free(spy);
2051 }
2052 return S_OK;
2053}
DWORD spies_lock

Referenced by Imm32CoRevokeInitializeSpy(), test_IInitializeSpy(), test_init_spies_proc(), and testinitialize_PreUninitialize().

◆ CoSetProxyBlanket()

HRESULT WINAPI CoSetProxyBlanket ( IUnknown proxy,
DWORD  authn_service,
DWORD  authz_service,
OLECHAR servername,
DWORD  authn_level,
DWORD  imp_level,
void auth_info,
DWORD  capabilities 
)

Definition at line 1055 of file combase.c.

1057{
1059 HRESULT hr;
1060
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);
1063
1064 hr = IUnknown_QueryInterface(proxy, &IID_IClientSecurity, (void **)&client_security);
1065 if (SUCCEEDED(hr))
1066 {
1067 hr = IClientSecurity_SetBlanket(client_security, proxy, authn_service, authz_service, servername, authn_level,
1068 imp_level, auth_info, capabilities);
1069 IClientSecurity_Release(client_security);
1070 }
1071
1072 if (FAILED(hr)) ERR("-- failed with %#lx.\n", hr);
1073 return hr;
1074}

Referenced by START_TEST().

◆ CoSuspendClassObjects()

HRESULT WINAPI CoSuspendClassObjects ( void  )

Definition at line 3342 of file combase.c.

3343{
3344 FIXME("\n");
3345
3346 return S_OK;
3347}

◆ CoSwitchCallContext()

HRESULT WINAPI CoSwitchCallContext ( IUnknown context,
IUnknown **  old_context 
)

Definition at line 1963 of file combase.c.

1964{
1965 struct tlsdata *tlsdata;
1966 HRESULT hr;
1967
1968 TRACE("%p, %p\n", context, old_context);
1969
1971 return hr;
1972
1973 /* Reference counts are not touched. */
1974 *old_context = tlsdata->call_state;
1976
1977 return S_OK;
1978}

◆ CoUninitialize()

void WINAPI DECLSPEC_HOTPATCH CoUninitialize ( void  )

Definition at line 2842 of file combase.c.

2843{
2844 struct tlsdata *tlsdata;
2845 struct init_spy *cursor, *next;
2846 LONG lockcount;
2847
2848 TRACE("\n");
2849
2851 return;
2852
2855 {
2856 if (cursor->spy) IInitializeSpy_PreUninitialize(cursor->spy, tlsdata->inits);
2857 }
2859
2860 /* sanity check */
2861 if (!tlsdata->inits)
2862 {
2863 ERR("Mismatched CoUninitialize\n");
2864
2867 {
2868 if (cursor->spy) IInitializeSpy_PostUninitialize(cursor->spy, tlsdata->inits);
2869 }
2871
2872 return;
2873 }
2874
2876
2877 /*
2878 * Decrease the reference count.
2879 * If we are back to 0 locks on the COM library, make sure we free
2880 * all the associated data structures.
2881 */
2882 lockcount = InterlockedExchangeAdd(&com_lockcount, -1);
2883 if (lockcount == 1)
2884 {
2885 TRACE("Releasing the COM libraries\n");
2886
2889 }
2890 else if (lockcount < 1)
2891 {
2892 ERR("Unbalanced lock count %ld\n", lockcount);
2894 }
2895
2898 {
2899 if (cursor->spy) IInitializeSpy_PostUninitialize(cursor->spy, tlsdata->inits);
2900 }
2902}
void leave_apartment(struct tlsdata *data)
Definition: apartment.c:1153
void WINAPI DestroyRunningObjectTable(void)
Definition: moniker.c:748
static void com_revoke_all_ps_clsids(void)
Definition: combase.c:2254
static unsigned __int64 next
Definition: rand_nt.c:6

Referenced by _CmdWndProc(), CRecyclerDropTarget::_DoDeleteThreadProc(), ACTION_CreateShortcuts(), AMovieDllRegisterServer2(), apartment_hostobject_thread(), bad_thread_proc(), bsc_thread(), cache_across_threads_test(), cache_InstallAssembly(), cache_UninstallAssembly(), call_script(), ChooseFolder(), cleanup(), cleanup_test(), CTipbarCoInitialize::CoUninit(), cowait_unmarshal_thread(), crash_couninitialize_proc(), CreateSecurityPage(), CreateShortcut(), CreateShortcuts(), custom_action_server(), custom_client_thread(), DestroySecurityPage(), DisplayWizard(), DllMain(), DllRegisterServer(), download_proc(), dummy_thread_proc(), duo_marshal_thread_proc(), FileExtractDialogWndProc(), get_class_object_proxy_thread(), get_class_object_thread(), get_global_interface_proc(), host_object_proc(), IEWinMain(), Imm32CoUninitialize(), implicit_mta_unmarshal_proc(), implicit_mta_use_proc(), install_wine_mono(), InstallNetworkComponent(), is_firewall_enabled(), LoadShellLinkConsoleInfo(), local_server_GetClassID(), local_server_proc(), main(), main_test(), MCIQTZ_mciClose(), MCIQTZ_mciOpen(), MsiGetShortcutTargetW(), mta_init_thread(), new_thread(), ole_server(), OLEPictureImpl_LoadWICDecoder(), OleUninitialize(), OpenControlPanelItem(), parse_config_stream(), PullPin_Thread_Stop(), query_prop(), register_class_object_thread(), register_filters(), register_ps_clsid_thread(), RegisterComCat(), revoke_class_object_thread(), RoUninitialize(), run_script(), RunDlgProc(), RunOnceExProcess(), CFindFolder::SearchThreadProc(), second_mta_thread_proc(), server(), ServiceMain(), set_firewall(), SHAddToRecentDocs(), SHCreateFromDesktop(), SHELL32_FileOperation(), ShellExecuteExW(), SHGetNameAndFlagsW(), SHLWAPI_ThreadWrapper(), ShowPerformanceOptions(), START_TEST(), CSysTray::SysTrayThreadProc(), test_call_cancellation(), test_click_make_new_folder_button(), test_cocreateinstance_proxy(), test_CoCreateInstanceEx(), test_CoCreateInstanceFromApp(), test_CoFreeUnusedLibraries(), test_CoGetApartmentType(), test_CoGetCallContext(), test_CoGetClassObject(), test_CoGetContextToken(), test_CoGetInstanceFromFile(), test_CoGetInterfaceAndReleaseStream(), test_CoGetObjectContext(), test_CoGetPSClsid(), test_CoInitializeEx(), test_CoMarshalInterface(), test_CoMarshalInterThreadInterfaceInStream(), test_controlevent(), test_CoRegisterClassObject(), test_CoRegisterMessageFilter(), test_CoRegisterPSClsid(), test_CoUnmarshalInterface(), test_CoWaitForMultipleHandles(), test_CoWaitForMultipleHandles_thread(), test_DPA_LoadStream(), test_DPA_SaveStream(), test_externalui_message(), test_GetDefaultColumn(), test_GetDefaultSearchGUID(), test_GlobalOptions(), test_iface_ptr(), test_IInitializeSpy(), test_IInitializeSpy_register2(), test_IInitializeSpy_switch_apt(), test_implicit_mta(), test_init_spies_proc(), test_inmemorystore(), test_IWinHttpRequest(), test_IWinHttpRequest_Invoke(), test_knownFolders(), test_marshal_proxy_apartment_shutdown(), test_marshal_proxy_mta_apartment_shutdown(), test_MsiSetComponentState(), test_mta_creation_thread_change_apartment(), test_mta_usage(), test_MultiThreadApartment_Thread(), test_OleInitialize_InitCounting(), test_oletlsdata(), test_packagecoltypes(), test_persistserialized(), test_printers_folder(), test_properties(), test_PSRefreshPropertySchema(), test_registered_object_thread_affinity(), test_render_with_multithread(), test_RtlQueryPackageIdentity(), test_selection(), test_set_clipboard(), test_shortcut(), test_StreamOnStreamRange(), test_stub(), test_top_level_action(), test_WICCreateColorTransform_Proxy(), TestClassesEx(), TestThread(), ATL::CAtlExeModuleT< T >::UninitializeCom(), UninitXMLDOMParser(), union_tests(), unregister_filters(), WICCreateColorTransform_Proxy(), wmain(), wWinMain(), and ComInit::~ComInit().

◆ CoWaitForMultipleHandles()

HRESULT WINAPI CoWaitForMultipleHandles ( DWORD  flags,
DWORD  timeout,
ULONG  handle_count,
HANDLE handles,
DWORD index 
)

Definition at line 2067 of file combase.c.

2069{
2070 BOOL check_apc = !!(flags & COWAIT_ALERTABLE), message_loop;
2071 struct { BOOL post; UINT code; } quit = { .post = FALSE };
2072 DWORD start_time, wait_flags = 0;
2073 struct tlsdata *tlsdata;
2074 struct apartment *apt;
2075 HRESULT hr;
2076
2077 TRACE("%#lx, %#lx, %lu, %p, %p\n", flags, timeout, handle_count, handles, index);
2078
2079 if (!index)
2080 return E_INVALIDARG;
2081
2082 *index = 0;
2083
2084 if (!handles)
2085 return E_INVALIDARG;
2086
2087 if (!handle_count)
2088 return RPC_E_NO_SYNC;
2089
2091 return hr;
2092
2093 apt = com_get_current_apt();
2094 message_loop = apt && !apt->multi_threaded;
2095
2096 if (flags & COWAIT_WAITALL)
2097 wait_flags |= MWMO_WAITALL;
2098 if (flags & COWAIT_ALERTABLE)
2099 wait_flags |= MWMO_ALERTABLE;
2100
2101 start_time = GetTickCount();
2102
2103 while (TRUE)
2104 {
2106
2107 if (now - start_time > timeout)
2108 {
2110 break;
2111 }
2112
2113 if (message_loop)
2114 {
2115 TRACE("waiting for rpc completion or window message\n");
2116
2117 res = WAIT_TIMEOUT;
2118
2119 if (check_apc)
2120 {
2121 res = WaitForMultipleObjectsEx(handle_count, handles, !!(flags & COWAIT_WAITALL), 0, TRUE);
2122 check_apc = FALSE;
2123 }
2124
2125 if (res == WAIT_TIMEOUT)
2126 res = MsgWaitForMultipleObjectsEx(handle_count, handles,
2127 timeout == INFINITE ? INFINITE : start_time + timeout - now,
2128 QS_SENDMESSAGE | QS_ALLPOSTMESSAGE | QS_PAINT, wait_flags);
2129
2130 if (res == WAIT_OBJECT_0 + handle_count) /* messages available */
2131 {
2132 int msg_count = 0;
2133 MSG msg;
2134
2135 /* call message filter */
2136
2137 if (apt->filter)
2138 {
2139 PENDINGTYPE pendingtype = tlsdata->pending_call_count_server ? PENDINGTYPE_NESTED : PENDINGTYPE_TOPLEVEL;
2140 DWORD be_handled = IMessageFilter_MessagePending(apt->filter, 0 /* FIXME */, now - start_time, pendingtype);
2141
2142 TRACE("IMessageFilter_MessagePending returned %ld\n", be_handled);
2143
2144 switch (be_handled)
2145 {
2146 case PENDINGMSG_CANCELCALL:
2147 WARN("call canceled\n");
2149 break;
2150 case PENDINGMSG_WAITNOPROCESS:
2151 case PENDINGMSG_WAITDEFPROCESS:
2152 default:
2153 /* FIXME: MSDN is very vague about the difference
2154 * between WAITNOPROCESS and WAITDEFPROCESS - there
2155 * appears to be none, so it is possibly a left-over
2156 * from the 16-bit world. */
2157 break;
2158 }
2159 }
2160
2161 if (!apt->win)
2162 {
2163 /* If window is NULL on apartment, peek at messages so that it will not trigger
2164 * MsgWaitForMultipleObjects next time. */
2165 PeekMessageW(NULL, NULL, 0, 0, PM_QS_POSTMESSAGE | PM_NOREMOVE | PM_NOYIELD);
2166 }
2167
2168 /* Some apps (e.g. Visio 2010) don't handle WM_PAINT properly and loop forever,
2169 * so after processing 100 messages we go back to checking the wait handles */
2170 while (msg_count++ < 100 && com_peek_message(apt, &msg))
2171 {
2172 if (msg.message == WM_QUIT)
2173 {
2174 TRACE("Received WM_QUIT message\n");
2175 quit.post = TRUE;
2176 quit.code = msg.wParam;
2177 }
2178 else
2179 {
2180 TRACE("Received message whilst waiting for RPC: 0x%04x\n", msg.message);
2183 }
2184 }
2185 continue;
2186 }
2187 }
2188 else
2189 {
2190 TRACE("Waiting for rpc completion\n");
2191
2193 (timeout == INFINITE) ? INFINITE : start_time + timeout - now, !!(flags & COWAIT_ALERTABLE));
2194 }
2195
2196 switch (res)
2197 {
2198 case WAIT_TIMEOUT:
2200 break;
2201 case WAIT_FAILED:
2203 break;
2204 default:
2205 *index = res;
2206 break;
2207 }
2208 break;
2209 }
2210 if (quit.post) PostQuitMessage(quit.code);
2211
2212 TRACE("-- %#lx\n", hr);
2213
2214 return hr;
2215}
void quit(int argc, const char *argv[])
Definition: cmds.c:1606
#define WAIT_TIMEOUT
Definition: dderror.h:14
static BOOL com_peek_message(struct apartment *apt, MSG *msg)
Definition: combase.c:2055
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
Definition: sync.c:182
unsigned long DWORD
Definition: ntddk_ex.h:95
time_t now
Definition: finger.c:65
GLuint res
Definition: glext.h:9613
GLuint index
Definition: glext.h:6031
unsigned int UINT
Definition: ndis.h:50
@ COWAIT_ALERTABLE
Definition: objbase.h:714
@ COWAIT_WAITALL
Definition: objbase.h:713
Definition: inflate.c:139
Definition: dhcpd.h:248
LONG pending_call_count_server
DWORD WINAPI WaitForMultipleObjectsEx(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds, IN BOOL bAlertable)
Definition: synch.c:169
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
static EFI_HANDLE * handles
Definition: uefidisk.c:118
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define WAIT_OBJECT_0
Definition: winbase.h:383
#define WAIT_FAILED
Definition: winbase.h:390
#define RPC_E_CALL_CANCELED
Definition: winerror.h:3531
#define RPC_S_CALLPENDING
Definition: winerror.h:3569
#define RPC_E_NO_SYNC
Definition: winerror.h:3580
#define QS_SENDMESSAGE
Definition: winuser.h:891
#define WM_QUIT
Definition: winuser.h:1651
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define MWMO_ALERTABLE
Definition: winuser.h:920
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define QS_ALLPOSTMESSAGE
Definition: winuser.h:893
DWORD WINAPI MsgWaitForMultipleObjectsEx(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask, _In_ DWORD dwFlags)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define QS_PAINT
Definition: winuser.h:890
#define MWMO_WAITALL
Definition: winuser.h:919
#define PM_NOREMOVE
Definition: winuser.h:1206

Referenced by ClientRpcChannelBuffer_SendReceive(), ISynchronize_fnWait(), local_server_proc(), rpc_get_local_class_object(), ShellPropSheetDialog::ShowAsync(), test_CoWaitForMultipleHandles(), and test_CoWaitForMultipleHandles_thread().

◆ create_classes_key()

static LSTATUS create_classes_key ( HKEY  hkey,
const WCHAR name,
REGSAM  access,
HKEY retkey 
)
static

Definition at line 254 of file combase.c.

255{
258
259 if (!(hkey = get_classes_root_hkey(hkey, access)))
261
262 attr.Length = sizeof(attr);
263 attr.RootDirectory = hkey;
264 attr.ObjectName = &nameW;
265#ifdef __REACTOS__
266 attr.Attributes = OBJ_CASE_INSENSITIVE;
267#else
268 attr.Attributes = 0;
269#endif
270 attr.SecurityDescriptor = NULL;
271 attr.SecurityQualityOfService = NULL;
273
274 return RtlNtStatusToDosError(create_key(retkey, access, &attr));
275}
static const WCHAR nameW[]
Definition: main.c:49
static HKEY get_classes_root_hkey(HKEY hkey, REGSAM access)
Definition: combase.c:277
static NTSTATUS create_key(HKEY *retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr)
Definition: combase.c:181
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
Definition: cookie.c:202
Definition: name.c:39
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)

Referenced by COMCAT_ICatRegister_RegisterCategories(), COMCAT_RegisterClassCategories(), and get_classes_root_hkey().

◆ create_classes_root_hkey()

static HKEY create_classes_root_hkey ( DWORD  access)
static

Definition at line 220 of file combase.c.

221{
222 HKEY hkey, ret = 0;
224 UNICODE_STRING name = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Classes");
225
226 attr.Length = sizeof(attr);
227 attr.RootDirectory = 0;
228 attr.ObjectName = &name;
229#ifdef __REACTOS__
230 attr.Attributes = OBJ_CASE_INSENSITIVE;
231#else
232 attr.Attributes = 0;
233#endif
234 attr.SecurityDescriptor = NULL;
235 attr.SecurityQualityOfService = NULL;
236
237 if (create_key( &hkey, access, &attr )) return 0;
238 TRACE( "%s -> %p\n", debugstr_w(attr.ObjectName->Buffer), hkey );
239
240 if (!(access & KEY_WOW64_64KEY))
241 {
242 if (!(ret = InterlockedCompareExchangePointer( (void **)&classes_root_hkey, hkey, 0 )))
243 ret = hkey;
244 else
245 NtClose( hkey ); /* somebody beat us to it */
246 }
247 else
248 ret = hkey;
249 return ret;
250}
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
static HKEY classes_root_hkey
Definition: combase.c:218
return ret
Definition: mutex.c:146
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402

Referenced by get_classes_root_hkey().

◆ create_key()

static NTSTATUS create_key ( HKEY retkey,
ACCESS_MASK  access,
const OBJECT_ATTRIBUTES attr 
)
static

Definition at line 181 of file combase.c.

182{
183 NTSTATUS status = NtCreateKey((HANDLE *)retkey, access, attr, 0, NULL, 0, NULL);
184
186 {
187 HANDLE subkey;
188 WCHAR *buffer = attr->ObjectName->Buffer;
189 DWORD pos = 0, i = 0, len = attr->ObjectName->Length / sizeof(WCHAR);
191 OBJECT_ATTRIBUTES attr2 = *attr;
192
193 while (i < len && buffer[i] != '\\') i++;
194 if (i == len) return status;
195
196 attr2.ObjectName = &str;
197
198 while (i < len)
199 {
200 str.Buffer = buffer + pos;
201 str.Length = (i - pos) * sizeof(WCHAR);
202 status = NtCreateKey(&subkey, access, &attr2, 0, NULL, 0, NULL);
203 if (attr2.RootDirectory != attr->RootDirectory) NtClose(attr2.RootDirectory);
204 if (status) return status;
205 attr2.RootDirectory = subkey;
206 while (i < len && buffer[i] == '\\') i++;
207 pos = i;
208 while (i < len && buffer[i] != '\\') i++;
209 }
210 str.Buffer = buffer + pos;
211 str.Length = (i - pos) * sizeof(WCHAR);
212 status = NtCreateKey((HANDLE *)retkey, access, &attr2, 0, NULL, 0, NULL);
213 if (attr2.RootDirectory != attr->RootDirectory) NtClose(attr2.RootDirectory);
214 }
215 return status;
216}
LONG NTSTATUS
Definition: precomp.h:26
GLuint buffer
Definition: glext.h:5915
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
Definition: glfuncs.h:248
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)
Definition: ntapi.c:240
HANDLE RootDirectory
Definition: umtypes.h:186
PUNICODE_STRING ObjectName
Definition: umtypes.h:187
#define STATUS_OBJECT_NAME_NOT_FOUND
Definition: udferr_usr.h:149

Referenced by create_classes_key(), and create_classes_root_hkey().

◆ DestroyRunningObjectTable()

void WINAPI DestroyRunningObjectTable ( void  )

Definition at line 748 of file moniker.c.

749{
750 struct rot_entry *rot_entry, *cursor2;
751
752 TRACE("\n");
753
756 {
759 }
761}
static void rot_entry_delete(struct rot_entry *rot_entry)
Definition: moniker.c:105
static RunningObjectTableImpl rot
Definition: moniker.c:710
struct list rot
Definition: moniker.c:68
CRITICAL_SECTION lock
Definition: moniker.c:69
Definition: irotp.c:37
struct list entry
Definition: irotp.c:38

Referenced by CoUninitialize().

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
void **  obj 
)

Definition at line 3406 of file combase.c.

3407{
3408 TRACE("%s, %s, %p.\n", debugstr_guid(rclsid), debugstr_guid(riid), obj);
3409
3410 *obj = NULL;
3411
3412 if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions))
3413 return IClassFactory_QueryInterface(&global_options_factory, riid, obj);
3414
3416}
static IClassFactory global_options_factory
Definition: combase.c:589
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hinstDLL,
DWORD  reason,
LPVOID  reserved 
)

Definition at line 3382 of file combase.c.

3383{
3384 TRACE("%p, %#lx, %p\n", hinstDLL, reason, reserved);
3385
3386 switch (reason)
3387 {
3388 case DLL_PROCESS_ATTACH:
3389 hProxyDll = hinstDLL;
3390 break;
3391 case DLL_PROCESS_DETACH:
3393 if (reserved) break;
3397 break;
3398 case DLL_THREAD_DETACH:
3400 break;
3401 }
3402
3403 return TRUE;
3404}
void apartment_global_cleanup(void)
Definition: apartment.c:1289
void rpc_unregister_channel_hooks(void)
Definition: rpc.c:990
static void com_cleanup_tlsdata(void)
Definition: combase.c:416
static void com_revoke_local_servers(void)
Definition: combase.c:3074
HINSTANCE hProxyDll
Definition: combase.c:40
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
#define DLL_THREAD_DETACH
Definition: compat.h:133
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)

◆ FreePropVariantArray()

HRESULT WINAPI FreePropVariantArray ( ULONG  count,
PROPVARIANT *  rgvars 
)

Definition at line 601 of file combase.c.

602{
603 ULONG i;
604
605 TRACE("%lu, %p.\n", count, rgvars);
606
607 if (!rgvars)
608 return E_INVALIDARG;
609
610 for (i = 0; i < count; ++i)
611 PropVariantClear(&rgvars[i]);
612
613 return S_OK;
614}
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
Definition: combase.c:709

Referenced by PropVariantClear().

◆ get_builtin_class_factory()

static HRESULT get_builtin_class_factory ( REFCLSID  rclsid,
REFIID  riid,
void **  obj 
)
static

Definition at line 591 of file combase.c.

592{
593 if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions))
594 return IClassFactory_QueryInterface(&global_options_factory, riid, obj);
595 return E_UNEXPECTED;
596}

Referenced by com_get_class_object().

◆ get_classes_root_hkey()

static HKEY get_classes_root_hkey ( HKEY  hkey,
REGSAM  access 
)
static

Definition at line 277 of file combase.c.

278{
279 HKEY ret = hkey;
280 const BOOL is_win64 = sizeof(void*) > sizeof(int);
281 const BOOL force_wow32 = is_win64 && (access & KEY_WOW64_32KEY);
282
283 if (hkey == HKEY_CLASSES_ROOT &&
286 if (force_wow32 && ret && ret == classes_root_hkey)
287 {
288 access &= ~KEY_WOW64_32KEY;
289 if (create_classes_key(classes_root_hkey, L"Wow6432Node", access, &hkey))
290 return 0;
291 ret = hkey;
292 }
293
294 return ret;
295}
static LSTATUS create_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
Definition: combase.c:254
static HKEY create_classes_root_hkey(DWORD access)
Definition: combase.c:220
static const BOOL is_win64
Definition: kernelbase.h:49

Referenced by create_classes_key(), and open_classes_key().

◆ get_ps_clsid_from_registry()

static HRESULT get_ps_clsid_from_registry ( const WCHAR path,
REGSAM  access,
CLSID pclsid 
)
static

Definition at line 2269 of file combase.c.

2270{
2272 HKEY hkey;
2273 DWORD len;
2274
2275 access |= KEY_READ;
2276
2278 return REGDB_E_IIDNOTREG;
2279
2280 len = sizeof(value);
2281 if (ERROR_SUCCESS != RegQueryValueExW(hkey, NULL, NULL, NULL, (BYTE *)value, &len))
2282 return REGDB_E_IIDNOTREG;
2283 RegCloseKey(hkey);
2284
2285 if (CLSIDFromString(value, pclsid) != NOERROR)
2286 return REGDB_E_IIDNOTREG;
2287
2288 return S_OK;
2289}
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
Definition: pdh_main.c:96
#define REGDB_E_IIDNOTREG
Definition: winerror.h:3802
#define NOERROR
Definition: winerror.h:3448

Referenced by CoGetPSClsid().

◆ get_spy_entry()

static struct init_spy * get_spy_entry ( struct tlsdata tlsdata,
unsigned int  id 
)
static

Definition at line 168 of file combase.c.

169{
170 struct init_spy *spy;
171
173 {
174 if (id == spy->id && spy->spy)
175 return spy;
176 }
177
178 return NULL;
179}

Referenced by CoRegisterInitializeSpy(), and CoRevokeInitializeSpy().

◆ global_options_AddRef()

static ULONG WINAPI global_options_AddRef ( IGlobalOptions iface)
static

Definition at line 478 of file combase.c.

479{
482
483 TRACE("%p, refcount %ld.\n", iface, refcount);
484
485 return refcount;
486}
static struct global_options * impl_from_IGlobalOptions(IGlobalOptions *iface)
Definition: combase.c:455
LONG refcount
Definition: combase.c:452

◆ global_options_CreateInstance()

static HRESULT WINAPI global_options_CreateInstance ( IClassFactory iface,
IUnknown outer,
REFIID  riid,
void **  ppv 
)
static

Definition at line 560 of file combase.c.

561{
562 struct global_options *object;
563 HRESULT hr;
564
565 TRACE("%p, %s, %p.\n", outer, debugstr_guid(riid), ppv);
566
567 if (outer)
568 return E_INVALIDARG;
569
570 if (!(object = malloc(sizeof(*object))))
571 return E_OUTOFMEMORY;
572 object->IGlobalOptions_iface.lpVtbl = &global_options_vtbl;
573 object->refcount = 1;
574
575 hr = IGlobalOptions_QueryInterface(&object->IGlobalOptions_iface, riid, ppv);
576 IGlobalOptions_Release(&object->IGlobalOptions_iface);
577 return hr;
578}
static const IGlobalOptionsVtbl global_options_vtbl
Definition: combase.c:520

◆ global_options_Query()

static HRESULT WINAPI global_options_Query ( IGlobalOptions iface,
GLOBALOPT_PROPERTIES  property,
ULONG_PTR value 
)
static

Definition at line 508 of file combase.c.

509{
510 TRACE("%p, %u, %p.\n", iface, property, value);
511
512 if (property < COMGLB_EXCEPTION_HANDLING || property > COMGLB_PROPERTIES_RESERVED3)
513 return E_INVALIDARG;
514
516
517 return S_OK;
518}

◆ global_options_QueryInterface()

static HRESULT WINAPI global_options_QueryInterface ( IGlobalOptions iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 460 of file combase.c.

461{
462 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), ppv);
463
464 if (IsEqualGUID(&IID_IGlobalOptions, riid) || IsEqualGUID(&IID_IUnknown, riid))
465 {
466 *ppv = iface;
467 }
468 else
469 {
470 *ppv = NULL;
471 return E_NOINTERFACE;
472 }
473
474 IUnknown_AddRef((IUnknown *)*ppv);
475 return S_OK;
476}

◆ global_options_Release()

static ULONG WINAPI global_options_Release ( IGlobalOptions iface)
static

Definition at line 488 of file combase.c.

489{
492
493 TRACE("%p, refcount %ld.\n", iface, refcount);
494
495 if (!refcount)
496 free(options);
497
498 return refcount;
499}
#define InterlockedDecrement
Definition: armddk.h:52

◆ global_options_Set()

static HRESULT WINAPI global_options_Set ( IGlobalOptions iface,
GLOBALOPT_PROPERTIES  property,
ULONG_PTR  value 
)
static

Definition at line 501 of file combase.c.

502{
503 FIXME("%p, %u, %Ix.\n", iface, property, value);
504
505 return S_OK;
506}

◆ guid_from_string()

static BOOL guid_from_string ( LPCWSTR  s,
GUID id 
)
static

Definition at line 1347 of file combase.c.

1348{
1349 int i;
1350
1351 if (!s || s[0] != '{')
1352 {
1353 memset(id, 0, sizeof(*id));
1354 if (!s) return TRUE;
1355 return FALSE;
1356 }
1357
1358 TRACE("%s -> %p\n", debugstr_w(s), id);
1359
1360 /* In form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
1361
1362 id->Data1 = 0;
1363 for (i = 1; i < 9; ++i)
1364 {
1365 if (!is_valid_hex(s[i])) return FALSE;
1366 id->Data1 = (id->Data1 << 4) | guid_conv_table[s[i]];
1367 }
1368 if (s[9] != '-') return FALSE;
1369
1370 id->Data2 = 0;
1371 for (i = 10; i < 14; ++i)
1372 {
1373 if (!is_valid_hex(s[i])) return FALSE;
1374 id->Data2 = (id->Data2 << 4) | guid_conv_table[s[i]];
1375 }
1376 if (s[14] != '-') return FALSE;
1377
1378 id->Data3 = 0;
1379 for (i = 15; i < 19; ++i)
1380 {
1381 if (!is_valid_hex(s[i])) return FALSE;
1382 id->Data3 = (id->Data3 << 4) | guid_conv_table[s[i]];
1383 }
1384 if (s[19] != '-') return FALSE;
1385
1386 for (i = 20; i < 37; i += 2)
1387 {
1388 if (i == 24)
1389 {
1390 if (s[i] != '-') return FALSE;
1391 i++;
1392 }
1393 if (!is_valid_hex(s[i]) || !is_valid_hex(s[i + 1])) return FALSE;
1394 id->Data4[(i - 20) / 2] = guid_conv_table[s[i]] << 4 | guid_conv_table[s[i + 1]];
1395 }
1396
1397 if (s[37] == '}' && s[38] == '\0')
1398 return TRUE;
1399
1400 return FALSE;
1401}
static BOOL is_valid_hex(WCHAR c)
Definition: combase.c:1327
static const BYTE guid_conv_table[256]
Definition: combase.c:1336
GLdouble s
Definition: gl.h:2039

Referenced by clsid_from_string_reg(), CLSIDFromString(), and IIDFromString().

◆ IIDFromString()

HRESULT WINAPI IIDFromString ( LPCOLESTR  str,
IID iid 
)

Definition at line 1492 of file combase.c.

1493{
1494 TRACE("%s, %p\n", debugstr_w(str), iid);
1495
1496 if (!str)
1497 {
1498 memset(iid, 0, sizeof(*iid));
1499 return S_OK;
1500 }
1501
1502 /* length mismatch is a special case */
1503 if (lstrlenW(str) + 1 != CHARS_IN_GUID)
1504 return E_INVALIDARG;
1505
1506 if (str[0] != '{')
1507 return CO_E_IIDSTRING;
1508
1509 return guid_from_string(str, iid) ? S_OK : CO_E_IIDSTRING;
1510}
#define CO_E_IIDSTRING
Definition: winerror.h:3920

Referenced by FindExeCplClass(), StreamingDeviceSetupW(), test_dump_typelib(), and test_IIDFromString().

◆ impl_from_IComThreadingInfo()

static struct thread_context * impl_from_IComThreadingInfo ( IComThreadingInfo iface)
inlinestatic

Definition at line 2407 of file combase.c.

2408{
2409 return CONTAINING_RECORD(iface, struct thread_context, IComThreadingInfo_iface);
2410}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by thread_context_info_AddRef(), thread_context_info_QueryInterface(), and thread_context_info_Release().

◆ impl_from_IContextCallback()

static struct thread_context * impl_from_IContextCallback ( IContextCallback iface)
inlinestatic

Definition at line 2412 of file combase.c.

2413{
2414 return CONTAINING_RECORD(iface, struct thread_context, IContextCallback_iface);
2415}

Referenced by thread_context_callback_AddRef(), thread_context_callback_QueryInterface(), and thread_context_callback_Release().

◆ impl_from_IGlobalOptions()

static struct global_options * impl_from_IGlobalOptions ( IGlobalOptions iface)
inlinestatic

Definition at line 455 of file combase.c.

456{
457 return CONTAINING_RECORD(iface, struct global_options, IGlobalOptions_iface);
458}

Referenced by global_options_AddRef(), and global_options_Release().

◆ impl_from_IObjContext()

static struct thread_context * impl_from_IObjContext ( IObjContext iface)
inlinestatic

Definition at line 2417 of file combase.c.

2418{
2419 return CONTAINING_RECORD(iface, struct thread_context, IObjContext_iface);
2420}

Referenced by thread_object_context_AddRef(), thread_object_context_QueryInterface(), and thread_object_context_Release().

◆ init_multi_qi()

static void init_multi_qi ( DWORD  count,
MULTI_QI *  mqi,
HRESULT  hr 
)
static

Definition at line 1534 of file combase.c.

1535{
1536 ULONG i;
1537
1538 for (i = 0; i < count; i++)
1539 {
1540 mqi[i].pItf = NULL;
1541 mqi[i].hr = hr;
1542 }
1543}

Referenced by CoCreateInstanceEx(), CoGetInstanceFromFile(), and CoGetInstanceFromIStorage().

◆ InternalIsProcessInitialized()

BOOL WINAPI InternalIsProcessInitialized ( void  )

Definition at line 391 of file combase.c.

392{
393 struct apartment *apt;
394
395 if (!(apt = apartment_get_current_or_mta()))
396 return FALSE;
398
399 return TRUE;
400}

Referenced by CoGetContextToken(), CoGetPSClsid(), CoRegisterPSClsid(), GetRunningObjectTable(), and RoGetAgileReference().

◆ InternalTlsAllocData()

HRESULT WINAPI InternalTlsAllocData ( struct tlsdata **  data)

Definition at line 405 of file combase.c.

406{
407 if (!(*data = calloc(1, sizeof(**data))))
408 return E_OUTOFMEMORY;
409
410 list_init(&(*data)->spies);
411 NtCurrentTeb()->ReservedForOle = *data;
412
413 return S_OK;
414}
static void list_init(struct list_entry *head)
Definition: list.h:51

Referenced by com_get_tlsdata().

◆ is_valid_hex()

static BOOL is_valid_hex ( WCHAR  c)
inlinestatic

Definition at line 1327 of file combase.c.

1328{
1329 if (!(((c >= '0') && (c <= '9')) ||
1330 ((c >= 'a') && (c <= 'f')) ||
1331 ((c >= 'A') && (c <= 'F'))))
1332 return FALSE;
1333 return TRUE;
1334}
const GLubyte * c
Definition: glext.h:8905

Referenced by guid_from_string().

◆ lock_init_spies()

static void lock_init_spies ( struct tlsdata tlsdata)
inlinestatic

Definition at line 2771 of file combase.c.

2772{
2774}

Referenced by CoInitializeEx(), and CoUninitialize().

◆ Ole32DllGetClassObject()

HRESULT WINAPI Ole32DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
void **  obj 
)

Definition at line 229 of file oleproxy.c.

230{
232 return IClassFactory_QueryInterface(&GlobalInterfaceTableCF, riid, obj);
233 else if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent))
234 return IClassFactory_QueryInterface(&ManualResetEventCF, riid, obj);
235 else if (IsEqualCLSID(rclsid, &CLSID_InProcFreeMarshaler))
236 return FTMarshalCF_Create(riid, obj);
237 else
239}
HRESULT FTMarshalCF_Create(REFIID riid, LPVOID *ppv)
Definition: ftmarshal.c:99
IClassFactory GlobalInterfaceTableCF
Definition: oleproxy.c:171
IClassFactory ManualResetEventCF
Definition: oleproxy.c:182

Referenced by com_get_class_object().

◆ open_appidkey_from_clsid()

HRESULT open_appidkey_from_clsid ( REFCLSID  clsid,
REGSAM  access,
HKEY subkey 
)

Definition at line 353 of file combase.c.

354{
355 static const WCHAR appidkeyW[] = L"AppId\\";
356 DWORD res;
358 WCHAR keyname[ARRAY_SIZE(appidkeyW) + CHARS_IN_GUID];
359 DWORD size;
360 HKEY hkey;
361 DWORD type;
362 HRESULT hr;
363
364 /* read the AppID value under the class's key */
366 if (FAILED(hr))
367 return hr;
368
369 size = sizeof(buf);
370 res = RegQueryValueExW(hkey, L"AppId", NULL, &type, (LPBYTE)buf, &size);
371 RegCloseKey(hkey);
373 return REGDB_E_KEYMISSING;
374 else if (res != ERROR_SUCCESS || type!=REG_SZ)
375 return REGDB_E_READREGDB;
376
377 lstrcpyW(keyname, appidkeyW);
378 lstrcatW(keyname, buf);
379 res = open_classes_key(HKEY_CLASSES_ROOT, keyname, access, subkey);
381 return REGDB_E_KEYMISSING;
382 else if (res != ERROR_SUCCESS)
383 return REGDB_E_READREGDB;
384
385 return S_OK;
386}
GLsizeiptr size
Definition: glext.h:5919
#define REG_SZ
Definition: layer.c:22
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
unsigned char * LPBYTE
Definition: typedefs.h:53
#define REGDB_E_READREGDB
Definition: winerror.h:3797

Referenced by create_local_service(), and create_surrogate_server().

◆ open_classes_key()

static LSTATUS open_classes_key ( HKEY  hkey,
const WCHAR name,
REGSAM  access,
HKEY retkey 
)
static

Definition at line 297 of file combase.c.

298{
301
302 if (!(hkey = get_classes_root_hkey(hkey, access)))
304
305 attr.Length = sizeof(attr);
306 attr.RootDirectory = hkey;
307 attr.ObjectName = &nameW;
308#ifdef __REACTOS__
309 attr.Attributes = OBJ_CASE_INSENSITIVE;
310#else
311 attr.Attributes = 0;
312#endif
313 attr.SecurityDescriptor = NULL;
314 attr.SecurityQualityOfService = NULL;
316
317 return RtlNtStatusToDosError(NtOpenKey((HANDLE *)retkey, access, &attr));
318}
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: ntapi.c:336

Referenced by CATIDEnumGUID_Clone(), CATIDEnumGUID_Construct(), clsid_from_string_reg(), CLSIDEnumGUID_Clone(), CLSIDEnumGUID_Construct(), CLSIDEnumGUID_Next(), COMCAT_ICatInformation_GetCategoryDesc(), COMCAT_ICatInformation_IsClassOfCategories(), COMCAT_ICatRegister_UnRegisterCategories(), COMCAT_IEnumCATEGORYINFO_Clone(), COMCAT_IEnumCATEGORYINFO_Next(), COMCAT_IsClassOfCategories(), COMCAT_UnRegisterClassCategories(), EnumCATEGORYINFO_Construct(), get_ps_clsid_from_registry(), OLECONVERT_CreateCompObjStream(), OleRegGetMiscStatus(), open_appidkey_from_clsid(), and open_key_for_clsid().

◆ open_key_for_clsid()

HRESULT open_key_for_clsid ( REFCLSID  clsid,
const WCHAR keyname,
REGSAM  access,
HKEY subkey 
)

Definition at line 320 of file combase.c.

321{
322 static const WCHAR clsidW[] = L"CLSID\\";
324 LONG res;
325 HKEY key;
326
330
332 return REGDB_E_CLASSNOTREG;
333 else if (res != ERROR_SUCCESS)
334 return REGDB_E_READREGDB;
335
336 if (!keyname)
337 {
338 *subkey = key;
339 return S_OK;
340 }
341
342 res = open_classes_key(key, keyname, access, subkey);
345 return REGDB_E_KEYMISSING;
346 else if (res != ERROR_SUCCESS)
347 return REGDB_E_READREGDB;
348
349 return S_OK;
350}
static const WCHAR clsidW[]
Definition: copy.c:22

Referenced by CoGetTreatAsClass(), com_get_class_object(), create_server(), create_surrogate_server(), open_appidkey_from_clsid(), and ProgIDFromCLSID().

◆ ProgIDFromCLSID()

HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID ( REFCLSID  clsid,
LPOLESTR progid 
)

Definition at line 1262 of file combase.c.

1263{
1264 ACTCTX_SECTION_KEYED_DATA data;
1265 LONG progidlen = 0;
1266 HKEY hkey;
1267 REGSAM opposite = (sizeof(void *) > sizeof(int)) ? KEY_WOW64_32KEY : KEY_WOW64_64KEY;
1268 BOOL is_wow64;
1269 HRESULT hr;
1270
1271 if (!progid)
1272 return E_INVALIDARG;
1273
1274 *progid = NULL;
1275
1276 data.cbSize = sizeof(data);
1277 if (FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION,
1278 clsid, &data))
1279 {
1280 struct comclassredirect_data *comclass = (struct comclassredirect_data *)data.lpData;
1281 if (comclass->progid_len)
1282 {
1283 WCHAR *ptrW;
1284
1285 *progid = CoTaskMemAlloc(comclass->progid_len + sizeof(WCHAR));
1286 if (!*progid) return E_OUTOFMEMORY;
1287
1288 ptrW = (WCHAR *)((BYTE *)comclass + comclass->progid_offset);
1289 memcpy(*progid, ptrW, comclass->progid_len + sizeof(WCHAR));
1290 return S_OK;
1291 }
1292 else
1293 return REGDB_E_CLASSNOTREG;
1294 }
1295
1296 hr = open_key_for_clsid(clsid, L"ProgID", KEY_READ, &hkey);
1297 if (FAILED(hr) && (opposite == KEY_WOW64_32KEY || (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)))
1298 {
1299 hr = open_key_for_clsid(clsid, L"ProgID", opposite | KEY_READ, &hkey);
1300 if (FAILED(hr))
1301 return hr;
1302 }
1303
1304 if (RegQueryValueW(hkey, NULL, NULL, &progidlen))
1306
1307 if (hr == S_OK)
1308 {
1309 *progid = CoTaskMemAlloc(progidlen * sizeof(WCHAR));
1310 if (*progid)
1311 {
1312 if (RegQueryValueW(hkey, NULL, *progid, &progidlen))
1313 {
1316 *progid = NULL;
1317 }
1318 }
1319 else
1320 hr = E_OUTOFMEMORY;
1321 }
1322
1323 RegCloseKey(hkey);
1324 return hr;
1325}
if(dx< 0)
Definition: linetemp.h:194
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

Referenced by g2s(), guid2string(), OLECONVERT_GetOLE10ProgID(), render_embed_source_hack(), test_ProgIDFromCLSID(), and WriteFmtUserTypeStg().

◆ propvar_free_cf_array()

static void propvar_free_cf_array ( ULONG  count,
CLIPDATA *  data 
)
static

Definition at line 699 of file combase.c.

700{
701 ULONG i;
702 for (i = 0; i < count; ++i)
703 CoTaskMemFree(data[i].pClipData);
704}

Referenced by PropVariantClear().

◆ propvar_validatetype()

static HRESULT propvar_validatetype ( VARTYPE  vt)
static

Definition at line 616 of file combase.c.

617{
618 switch (vt)
619 {
620 case VT_EMPTY:
621 case VT_NULL:
622 case VT_I1:
623 case VT_I2:
624 case VT_I4:
625 case VT_I8:
626 case VT_R4:
627 case VT_R8:
628 case VT_CY:
629 case VT_DATE:
630 case VT_BSTR:
631 case VT_ERROR:
632 case VT_BOOL:
633 case VT_DECIMAL:
634 case VT_UI1:
635 case VT_UI2:
636 case VT_UI4:
637 case VT_UI8:
638 case VT_INT:
639 case VT_UINT:
640 case VT_LPSTR:
641 case VT_LPWSTR:
642 case VT_FILETIME:
643 case VT_BLOB:
644 case VT_DISPATCH:
645 case VT_UNKNOWN:
646 case VT_STREAM:
647 case VT_STORAGE:
649 case VT_STORED_OBJECT:
650 case VT_BLOB_OBJECT:
651 case VT_CF:
652 case VT_CLSID:
653 case VT_I1|VT_VECTOR:
654 case VT_I2|VT_VECTOR:
655 case VT_I4|VT_VECTOR:
656 case VT_I8|VT_VECTOR:
657 case VT_R4|VT_VECTOR:
658 case VT_R8|VT_VECTOR:
659 case VT_CY|VT_VECTOR:
660 case VT_DATE|VT_VECTOR:
661 case VT_BSTR|VT_VECTOR:
662 case VT_ERROR|VT_VECTOR:
663 case VT_BOOL|VT_VECTOR:
665 case VT_UI1|VT_VECTOR:
666 case VT_UI2|VT_VECTOR:
667 case VT_UI4|VT_VECTOR:
668 case VT_UI8|VT_VECTOR:
669 case VT_LPSTR|VT_VECTOR:
670 case VT_LPWSTR|VT_VECTOR:
672 case VT_CF|VT_VECTOR:
673 case VT_CLSID|VT_VECTOR:
674 case VT_ARRAY|VT_I1:
675 case VT_ARRAY|VT_UI1:
676 case VT_ARRAY|VT_I2:
677 case VT_ARRAY|VT_UI2:
678 case VT_ARRAY|VT_I4:
679 case VT_ARRAY|VT_UI4:
680 case VT_ARRAY|VT_INT:
681 case VT_ARRAY|VT_UINT:
682 case VT_ARRAY|VT_R4:
683 case VT_ARRAY|VT_R8:
684 case VT_ARRAY|VT_CY:
685 case VT_ARRAY|VT_DATE:
686 case VT_ARRAY|VT_BSTR:
687 case VT_ARRAY|VT_BOOL:
688 case VT_ARRAY|VT_DECIMAL:
690 case VT_ARRAY|VT_UNKNOWN:
691 case VT_ARRAY|VT_ERROR:
692 case VT_ARRAY|VT_VARIANT:
693 return S_OK;
694 }
695 WARN("Bad type %d\n", vt);
697}
@ VT_BLOB
Definition: compat.h:2330
@ VT_UI8
Definition: compat.h:2315
@ VT_BLOB_OBJECT
Definition: compat.h:2335
@ VT_BSTR
Definition: compat.h:2303
@ VT_INT
Definition: compat.h:2316
@ VT_LPSTR
Definition: compat.h:2324
@ VT_R4
Definition: compat.h:2299
@ VT_NULL
Definition: compat.h:2296
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_UI2
Definition: compat.h:2312
@ VT_DECIMAL
Definition: compat.h:2309
@ VT_ERROR
Definition: compat.h:2305
@ VT_CLSID
Definition: compat.h:2337
@ VT_STREAM
Definition: compat.h:2331
@ VT_ARRAY
Definition: compat.h:2341
@ VT_STORED_OBJECT
Definition: compat.h:2334
@ VT_LPWSTR
Definition: compat.h:2325
@ VT_R8
Definition: compat.h:2300
@ VT_CY
Definition: compat.h:2301
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I8
Definition: compat.h:2314
@ VT_I1
Definition: compat.h:2310
@ VT_I4
Definition: compat.h:2298
@ VT_CF
Definition: compat.h:2336
@ VT_STORAGE
Definition: compat.h:2332
@ VT_FILETIME
Definition: compat.h:2329
@ VT_DATE
Definition: compat.h:2302
@ VT_BOOL
Definition: compat.h:2306
@ VT_STREAMED_OBJECT
Definition: compat.h:2333
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UINT
Definition: compat.h:2317
@ VT_EMPTY
Definition: compat.h:2295
@ VT_VECTOR
Definition: compat.h:2340
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define STG_E_INVALIDPARAMETER
Definition: winerror.h:3675

Referenced by PropVariantClear(), and PropVariantCopy().

◆ PropVariantClear()

HRESULT WINAPI PropVariantClear ( PROPVARIANT *  pvar)

Definition at line 709 of file combase.c.

710{
711 HRESULT hr;
712
713 TRACE("%p.\n", pvar);
714
715 if (!pvar)
716 return S_OK;
717
718 hr = propvar_validatetype(pvar->vt);
719 if (FAILED(hr))
720 {
721 memset(pvar, 0, sizeof(*pvar));
722 return hr;
723 }
724
725 switch (pvar->vt)
726 {
727 case VT_EMPTY:
728 case VT_NULL:
729 case VT_I1:
730 case VT_I2:
731 case VT_I4:
732 case VT_I8:
733 case VT_R4:
734 case VT_R8:
735 case VT_CY:
736 case VT_DATE:
737 case VT_ERROR:
738 case VT_BOOL:
739 case VT_DECIMAL:
740 case VT_UI1:
741 case VT_UI2:
742 case VT_UI4:
743 case VT_UI8:
744 case VT_INT:
745 case VT_UINT:
746 case VT_FILETIME:
747 break;
748 case VT_DISPATCH:
749 case VT_UNKNOWN:
750 case VT_STREAM:
752 case VT_STORAGE:
753 case VT_STORED_OBJECT:
754 if (pvar->pStream)
755 IStream_Release(pvar->pStream);
756 break;
757 case VT_CLSID:
758 case VT_LPSTR:
759 case VT_LPWSTR:
760 /* pick an arbitrary typed pointer - we don't care about the type
761 * as we are just freeing it */
762 CoTaskMemFree(pvar->puuid);
763 break;
764 case VT_BLOB:
765 case VT_BLOB_OBJECT:
766 CoTaskMemFree(pvar->blob.pBlobData);
767 break;
768 case VT_BSTR:
769 SysFreeString(pvar->bstrVal);
770 break;
771 case VT_CF:
772 if (pvar->pclipdata)
773 {
774 propvar_free_cf_array(1, pvar->pclipdata);
775 CoTaskMemFree(pvar->pclipdata);
776 }
777 break;
778 default:
779 if (pvar->vt & VT_VECTOR)
780 {
781 ULONG i;
782
783 switch (pvar->vt & ~VT_VECTOR)
784 {
785 case VT_VARIANT:
786 FreePropVariantArray(pvar->capropvar.cElems, pvar->capropvar.pElems);
787 break;
788 case VT_CF:
789 propvar_free_cf_array(pvar->caclipdata.cElems, pvar->caclipdata.pElems);
790 break;
791 case VT_BSTR:
792 for (i = 0; i < pvar->cabstr.cElems; i++)
793 SysFreeString(pvar->cabstr.pElems[i]);
794 break;
795 case VT_LPSTR:
796 for (i = 0; i < pvar->calpstr.cElems; i++)
797 CoTaskMemFree(pvar->calpstr.pElems[i]);
798 break;
799 case VT_LPWSTR:
800 for (i = 0; i < pvar->calpwstr.cElems; i++)
801 CoTaskMemFree(pvar->calpwstr.pElems[i]);
802 break;
803 }
804 if (pvar->vt & ~VT_VECTOR)
805 {
806 /* pick an arbitrary VT_VECTOR structure - they all have the same
807 * memory layout */
808 CoTaskMemFree(pvar->capropvar.pElems);
809 }
810 }
811 else if (pvar->vt & VT_ARRAY)
812 hr = SafeArrayDestroy(pvar->parray);
813 else
814 {
815 WARN("Invalid/unsupported type %d\n", pvar->vt);
817 }
818 }
819
820 memset(pvar, 0, sizeof(*pvar));
821 return hr;
822}
static HRESULT propvar_validatetype(VARTYPE vt)
Definition: combase.c:616
static void propvar_free_cf_array(ULONG count, CLIPDATA *data)
Definition: combase.c:699
HRESULT WINAPI FreePropVariantArray(ULONG count, PROPVARIANT *rgvars)
Definition: combase.c:601
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
Definition: safearray.c:1347
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271

Referenced by check_tiff_format(), compare_metadata(), destroy_format(), free_header(), FreePropVariantArray(), GdipGetAllPropertyItems(), GdipGetPropertyItem(), GdipGetPropertyItemSize(), GdipGetPropertySize(), get_bool_property(), get_next_reader(), get_property(), get_token(), get_ulong_by_index(), InitPropVariantFromStringVector(), MetadataHandler_FreeItems(), MimeBody_GetProp(), MMDevice_Create(), MMDevice_GetPropValue(), mqr_GetMetadataByName(), on_mime_message_available(), PersistFile_Save(), png_metadata_reader(), PropertyStorage_PropertyDestroy(), PropertyStorage_ReadFromStream(), PropertyStorage_StorePropWithId(), PropertyStore_SetValue(), PropertyStore_SetValueAndState(), PropVariantCompareEx(), set_driver_prop_value(), test_BodyDeleteProp(), test_convert(), test_copy(), test_CreateMessage(), test_CreateMetadataWriterFromReader(), test_deviceinterface(), test_first_device(), test_ifd_content(), test_InitPropVariantFromBuffer(), test_InitPropVariantFromCLSID(), test_InitPropVariantFromStringVector(), test_intconversions(), test_MessageGetPropInfo(), test_MessageOptions(), test_MessageSetProp(), test_metadata_APE(), test_metadata_App1(), test_metadata_cHRM(), test_metadata_gAMA(), test_metadata_gif(), test_metadata_GIF_comment(), test_metadata_hIST(), test_metadata_tEXt(), test_metadata_unknown(), test_propertystore(), test_propertytovariant(), test_PropVariantChangeType_LPWSTR(), test_PropVariantToBSTR(), test_PropVariantToBuffer(), test_PropVariantToDouble(), test_PropVariantToGUID(), test_PropVariantToString(), test_PropVariantToStringAlloc(), test_PropVariantToVariant(), test_queryreader(), test_validtypes(), test_VariantToPropVariant(), testCodepage(), and testPropsHelper().

◆ PropVariantCopy()

HRESULT WINAPI PropVariantCopy ( PROPVARIANT *  pvarDest,
const PROPVARIANT *  pvarSrc 
)

Definition at line 827 of file combase.c.

828{
829 ULONG len;
830 HRESULT hr;
831
832 TRACE("%p, %p vt %04x.\n", pvarDest, pvarSrc, pvarSrc->vt);
833
834 hr = propvar_validatetype(pvarSrc->vt);
835 if (FAILED(hr))
836 return DISP_E_BADVARTYPE;
837
838 /* this will deal with most cases */
839 *pvarDest = *pvarSrc;
840
841 switch (pvarSrc->vt)
842 {
843 case VT_EMPTY:
844 case VT_NULL:
845 case VT_I1:
846 case VT_UI1:
847 case VT_I2:
848 case VT_UI2:
849 case VT_BOOL:
850 case VT_DECIMAL:
851 case VT_I4:
852 case VT_UI4:
853 case VT_R4:
854 case VT_ERROR:
855 case VT_I8:
856 case VT_UI8:
857 case VT_INT:
858 case VT_UINT:
859 case VT_R8:
860 case VT_CY:
861 case VT_DATE:
862 case VT_FILETIME:
863 break;
864 case VT_DISPATCH:
865 case VT_UNKNOWN:
866 case VT_STREAM:
868 case VT_STORAGE:
869 case VT_STORED_OBJECT:
870 if (pvarDest->pStream)
871 IStream_AddRef(pvarDest->pStream);
872 break;
873 case VT_CLSID:
874 pvarDest->puuid = CoTaskMemAlloc(sizeof(CLSID));
875 *pvarDest->puuid = *pvarSrc->puuid;
876 break;
877 case VT_LPSTR:
878 if (pvarSrc->pszVal)
879 {
880 len = strlen(pvarSrc->pszVal);
881 pvarDest->pszVal = CoTaskMemAlloc((len+1)*sizeof(CHAR));
882 CopyMemory(pvarDest->pszVal, pvarSrc->pszVal, (len+1)*sizeof(CHAR));
883 }
884 break;
885 case VT_LPWSTR:
886 if (pvarSrc->pwszVal)
887 {
888 len = lstrlenW(pvarSrc->pwszVal);
889 pvarDest->pwszVal = CoTaskMemAlloc((len+1)*sizeof(WCHAR));
890 CopyMemory(pvarDest->pwszVal, pvarSrc->pwszVal, (len+1)*sizeof(WCHAR));
891 }
892 break;
893 case VT_BLOB:
894 case VT_BLOB_OBJECT:
895 if (pvarSrc->blob.pBlobData)
896 {
897 len = pvarSrc->blob.cbSize;
898 pvarDest->blob.pBlobData = CoTaskMemAlloc(len);
899 CopyMemory(pvarDest->blob.pBlobData, pvarSrc->blob.pBlobData, len);
900 }
901 break;
902 case VT_BSTR:
903 pvarDest->bstrVal = SysAllocString(pvarSrc->bstrVal);
904 break;
905 case VT_CF:
906 if (pvarSrc->pclipdata)
907 {
908 len = pvarSrc->pclipdata->cbSize - sizeof(pvarSrc->pclipdata->ulClipFmt);
909 pvarDest->pclipdata = CoTaskMemAlloc(sizeof (CLIPDATA));
910 pvarDest->pclipdata->cbSize = pvarSrc->pclipdata->cbSize;
911 pvarDest->pclipdata->ulClipFmt = pvarSrc->pclipdata->ulClipFmt;
912 pvarDest->pclipdata->pClipData = CoTaskMemAlloc(len);
913 CopyMemory(pvarDest->pclipdata->pClipData, pvarSrc->pclipdata->pClipData, len);
914 }
915 break;
916 default:
917 if (pvarSrc->vt & VT_VECTOR)
918 {
919 int elemSize;
920 ULONG i;
921
922 switch (pvarSrc->vt & ~VT_VECTOR)
923 {
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;
945
946 default:
947 FIXME("Invalid element type: %ul\n", pvarSrc->vt & ~VT_VECTOR);
948 return E_INVALIDARG;
949 }
950 len = pvarSrc->capropvar.cElems;
951 pvarDest->capropvar.pElems = len ? CoTaskMemAlloc(len * elemSize) : NULL;
952 if (pvarSrc->vt == (VT_VECTOR | VT_VARIANT))
953 {
954 for (i = 0; i < len; i++)
955 PropVariantCopy(&pvarDest->capropvar.pElems[i], &pvarSrc->capropvar.pElems[i]);
956 }
957 else if (pvarSrc->vt == (VT_VECTOR | VT_CF))
958 {
959 FIXME("Copy clipformats\n");
960 }
961 else if (pvarSrc->vt == (VT_VECTOR | VT_BSTR))
962 {
963 for (i = 0; i < len; i++)
964 pvarDest->cabstr.pElems[i] = SysAllocString(pvarSrc->cabstr.pElems[i]);
965 }
966 else if (pvarSrc->vt == (VT_VECTOR | VT_LPSTR))
967 {
968 size_t strLen;
969 for (i = 0; i < len; i++)
970 {
971 strLen = lstrlenA(pvarSrc->calpstr.pElems[i]) + 1;
972 pvarDest->calpstr.pElems[i] = CoTaskMemAlloc(strLen);
973 memcpy(pvarDest->calpstr.pElems[i],
974 pvarSrc->calpstr.pElems[i], strLen);
975 }
976 }
977 else if (pvarSrc->vt == (VT_VECTOR | VT_LPWSTR))
978 {
979 size_t strLen;
980 for (i = 0; i < len; i++)
981 {
982 strLen = (lstrlenW(pvarSrc->calpwstr.pElems[i]) + 1) *
983 sizeof(WCHAR);
984 pvarDest->calpstr.pElems[i] = CoTaskMemAlloc(strLen);
985 memcpy(pvarDest->calpstr.pElems[i],
986 pvarSrc->calpstr.pElems[i], strLen);
987 }
988 }
989 else
990 CopyMemory(pvarDest->capropvar.pElems, pvarSrc->capropvar.pElems, len * elemSize);
991 }
992 else if (pvarSrc->vt & VT_ARRAY)
993 {
994 pvarDest->uhVal.QuadPart = 0;
995 return SafeArrayCopy(pvarSrc->parray, &pvarDest->parray);
996 }
997 else
998 WARN("Invalid/unsupported type %d\n", pvarSrc->vt);
999 }
1000
1001 return S_OK;
1002}
HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc)
Definition: combase.c:827
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
Definition: safearray.c:1379
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define CopyMemory
Definition: minwinbase.h:29
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
#define DISP_E_BADVARTYPE
Definition: winerror.h:3620
char CHAR
Definition: xmlstorage.h:175

Referenced by IPropertyStorage_fnWriteMultiple(), MetadataHandler_GetValue(), MetadataHandler_GetValueByIndex(), MetadataHandlerEnum_Next(), MimeBody_SetProp(), PropertyStorage_PropVariantCopy(), PropertyStore_GetValue(), PropertyStore_GetValueAndState(), PropertyStore_SetValue(), PropertyStore_SetValueAndState(), PropVariantChangeType(), PropVariantCopy(), test_copy(), and test_validtypes().

◆ return_multi_qi()

static HRESULT return_multi_qi ( IUnknown unk,
DWORD  count,
MULTI_QI *  mqi,
BOOL  include_unk 
)
static

Definition at line 1545 of file combase.c.

1546{
1547 ULONG index = 0, fetched = 0;
1548
1549 if (include_unk)
1550 {
1551 mqi[0].hr = S_OK;
1552 mqi[0].pItf = unk;
1553 index = fetched = 1;
1554 }
1555
1556 for (; index < count; index++)
1557 {
1558 mqi[index].hr = IUnknown_QueryInterface(unk, mqi[index].pIID, (void **)&mqi[index].pItf);
1559 if (mqi[index].hr == S_OK)
1560 fetched++;
1561 }
1562
1563 if (!include_unk)
1564 IUnknown_Release(unk);
1565
1566 if (fetched == 0)
1567 return E_NOINTERFACE;
1568
1569 return fetched == count ? S_OK : CO_S_NOTALLINTERFACES;
1570}
#define index(s, c)
Definition: various.h:29
#define CO_S_NOTALLINTERFACES
Definition: winerror.h:4211

Referenced by CoCreateInstanceEx(), CoGetInstanceFromFile(), and CoGetInstanceFromIStorage().

◆ StringFromCLSID()

HRESULT WINAPI StringFromCLSID ( REFCLSID  clsid,
LPOLESTR str 
)

Definition at line 1515 of file combase.c.

1516{
1517 if (!(*str = CoTaskMemAlloc(CHARS_IN_GUID * sizeof(WCHAR)))) return E_OUTOFMEMORY;
1519 return S_OK;
1520}

Referenced by ApplyOrCancelChanges(), BindProtocol_StartEx(), CEnumMediaTypes_fnConstructor(), CEnumTuningSpaces_fnConstructor(), CKsProxy_Constructor(), CNetworkProvider_fnConstructor(), CPin_fnConstructor(), CreateNotificationObject(), CScanningTunner_fnConstructor(), CTuneRequest_fnConstructor(), CTuningSpace_fnConstructor(), CTuningSpaceContainer_fnConstructor(), CNetConnection::Disconnect(), DllRegisterServer(), DllUnregisterServer(), EnumerateNetworkComponent(), FilterMapper3_CreateCategory(), FilterMapper3_RegisterFilter(), FilterMapper3_UnregisterFilter(), FilterMapper_RegisterFilter(), FilterMapper_RegisterPin(), FilterMapper_RegisterPinType(), FilterMapper_UnregisterFilter(), FilterMapper_UnregisterPin(), FM2_WriteClsid(), CTuningSpace::get_NetworkType(), CNetConnectionPropertyUi::GetDeviceInstanceID(), CBDADeviceControl::GetNodeDescriptors(), CBDADeviceControl::GetNodeInterfaces(), CNetConnection::GetProperties(), HCR_GetClassNameA(), HCR_GetClassNameW(), HCR_GetFolderAttributes(), INetCfgComponentControl_fnApplyRegistryChanges(), Initialize(), InitializePropertyDialog(), CKsProxy::IsFormatSupported(), COutputPin::KsProperty(), CNetConnectionPropertyUi::LANPropertiesUIDlg(), load_mapping_settings(), LoadDNSSettings(), LoadFilterSettings(), CInputPin::LoadProxyPlugins(), COutputPin::LoadProxyPlugins(), CKsProxy::LoadProxyPlugins(), CControlNode::QueryInterface(), CBDADigitalDemodulator::QueryInterface(), CBDAFrequencyFilter::QueryInterface(), CBDALNBInfo::QueryInterface(), CInputPin::QueryInterface(), COutputPin::QueryInterface(), CKsProxy::QueryInterface(), CNetworkProvider::QueryInterface(), CPin::QueryInterface(), CScanningTunner::QueryInterface(), CEnumTuningSpaces::QueryInterface(), CTuneRequest::QueryInterface(), CTuningSpace::QueryInterface(), CTuningSpaceContainer::QueryInterface(), CKsProxy::QueryVendorInfo(), reg_context_menu_handler(), reg_icon_overlay(), reg_prop_sheet_handler(), reg_unreg_wine_test_class(), register_clsid(), CNetConnection::Rename(), save_mapping_settings(), SHGetObjectCompatFlags(), TestCommandLine(), unregister_clsid(), and anonymous_namespace{mstscax.cpp}::UUIDToString().

◆ StringFromGUID2()

INT WINAPI StringFromGUID2 ( REFGUID  guid,
LPOLESTR  str,
INT  cmax 
)

Definition at line 1525 of file combase.c.

1526{
1527 if (!guid || cmax < CHARS_IN_GUID) return 0;
1528 swprintf(str, CHARS_IN_GUID, L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid->Data1,
1529 guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
1530 guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
1531 return CHARS_IN_GUID;
1532}
#define swprintf
Definition: precomp.h:40

Referenced by CBandSiteMenu::_CreateMenuPart(), _SHGetUserProfilePath(), _SHRegisterFolders(), add_userkey(), AddClsidKeyToArray(), CInputProcessorProfiles::AddLanguageProfile(), ATL::AtlRegisterClassCategoriesHelper(), AtlRegisterClassCategoriesHelper(), audiomediastream_create(), CShellBrowser::BuildExplorerBandCategory(), CComCatCachedCategory::CacheDSA(), CATIDEnumGUID_Construct(), ATL::CComBSTR::CComBSTR(), CoGetPSClsid(), COM_OpenKeyForCLSID(), COMCAT_ICatInformation_GetCategoryDesc(), COMCAT_ICatInformation_IsClassOfCategories(), COMCAT_ICatRegister_RegisterCategories(), COMCAT_ICatRegister_UnRegisterCategories(), COMCAT_PrepareClassCategories(), COMCAT_RegisterClassCategories(), COMCAT_UnRegisterClassCategories(), compose_base85_guid(), CoTreatAsClass(), create_EnumMoniker(), create_monodata(), create_PropertyBag(), create_surrogate_server(), create_test_guid(), CreateComponentEnumerator(), CreateComponentInfo(), CreateTipText(), DCMA_InsertMenuItems(), ddrawmediastream_create(), DEVENUM_CreateAMCategoryKey(), DEVENUM_ICreateDevEnum_CreateClassEnumerator(), DEVENUM_IEnumMoniker_Next(), DEVENUM_IMediaCatMoniker_GetDisplayName(), do_typelib_reg_key(), Dump(), CInputProcessorProfiles::EnableLanguageProfile(), CInputProcessorProfiles::EnableLanguageProfileByDefault(), enum_compartments(), expect_guid(), fill_display_information_d3d(), find_typelib_key(), CCategoryMgr::FindClosestCategory(), FormatGUIDKey(), g2s(), get_interface_key(), get_typelib_key(), GetActiveObject(), CInputProcessorProfiles::GetDefaultLanguageProfile(), CDefView::GetDefaultViewStream(), guid2string(), CCleanupHandler::Initialize(), InitPropVariantFromGUIDAsString(), InitVariantFromGUIDAsString(), CInputProcessorProfiles::IsEnabledLanguageProfile(), LoadAndInitialize(), CComCatCachedCategory::LoadFromRegistry(), CFindFolder::MessageSFVCB(), MMDevice_Create(), MMDevPropStore_GetValue(), MMDevPropStore_OpenPropKey(), MSI_ProvideQualifiedComponentEx(), MsiDecomposeDescriptorW(), OleSetAutoConvert(), CSearchBar::OnSearchButtonClicked(), open_key_for_clsid(), PB_Read(), Print(), PropVariantToStringAlloc(), query_feature_state(), CLoggingServiceProvider::QueryService(), CDummyPropertyBag::Read(), read_metadata_patterns(), CInputProcessorProfiles::Register(), register_categories(), register_coclasses(), register_codec(), register_converters(), register_decoders(), register_dsound_devices(), register_encoders(), register_interfaces(), register_key_guid(), register_mediatypes_extension(), register_mediatypes_parsing(), register_metadatareaders(), register_pixelformats(), register_server(), RegisterActiveObject(), CCategoryMgr::RegisterCategory(), RegisterComponent(), CLangBarItemList::SaveItem(), SdbInstall(), SdbUninstall(), CInputProcessorProfiles::SetDefaultLanguageProfile(), ATL::CRegKey::SetGUIDValue(), SetupRegisterAllClasses(), SHDOCVW_GetShellInstanceObjectClassObject(), SHELL32_ShowShellExtensionProperties(), SHELL_QueryCLSIDValue(), StringFromCLSID(), StringFromGUID2A(), test_codec(), test_directshow_filter(), test_dmo(), test_dsound(), test_legacy_filter(), test_legacy_filter_registration(), test_lsa(), test_media_streams(), test_metadata_gif(), test_midiout(), test_OleDoAutoConvert(), test_OleRegGetUserType(), test_QueryPathOfRegTypeLib(), test_register_typelib(), test_StringFromGUID2(), test_stub(), test_vfw(), test_wavein(), test_waveout(), TLB_register_interface(), CInputProcessorProfiles::Unregister(), unregister_categories(), unregister_coclasses(), unregister_converters(), unregister_decoders(), unregister_encoders(), unregister_interfaces(), unregister_mediatypes_parsing(), unregister_metadatareaders(), unregister_pixelformats(), unregister_server(), CCategoryMgr::UnregisterCategory(), UnregisterComponent(), and WICConvertBitmapSource().

◆ thread_context_callback_AddRef()

static ULONG WINAPI thread_context_callback_AddRef ( IContextCallback iface)
static

Definition at line 2538 of file combase.c.

2539{
2541 return IComThreadingInfo_AddRef(&context->IComThreadingInfo_iface);
2542}
static struct thread_context * impl_from_IContextCallback(IContextCallback *iface)
Definition: combase.c:2412

◆ thread_context_callback_ContextCallback()

static HRESULT WINAPI thread_context_callback_ContextCallback ( IContextCallback iface,
PFNCONTEXTCALL  callback,
ComCallData param,
REFIID  riid,
int  method,
IUnknown punk 
)
static

Definition at line 2550 of file combase.c.

2552{
2553 FIXME("%p, %p, %p, %s, %d, %p\n", iface, callback, param, debugstr_guid(riid), method, punk);
2554
2555 return E_NOTIMPL;
2556}
method
Definition: dragdrop.c:54
GLfloat param
Definition: glext.h:5796
static IPrintDialogCallback callback
Definition: printdlg.c:326
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158

◆ thread_context_callback_QueryInterface()

static HRESULT WINAPI thread_context_callback_QueryInterface ( IContextCallback iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 2532 of file combase.c.

2533{
2535 return IComThreadingInfo_QueryInterface(&context->IComThreadingInfo_iface, riid, obj);
2536}

◆ thread_context_callback_Release()

static ULONG WINAPI thread_context_callback_Release ( IContextCallback iface)
static

Definition at line 2544 of file combase.c.

2545{
2547 return IComThreadingInfo_Release(&context->IComThreadingInfo_iface);
2548}

◆ thread_context_info_AddRef()

static ULONG WINAPI thread_context_info_AddRef ( IComThreadingInfo iface)
static

Definition at line 2452 of file combase.c.

2453{
2455 return InterlockedIncrement(&context->refcount);
2456}
static struct thread_context * impl_from_IComThreadingInfo(IComThreadingInfo *iface)
Definition: combase.c:2407

◆ thread_context_info_GetCurrentApartmentType()

static HRESULT WINAPI thread_context_info_GetCurrentApartmentType ( IComThreadingInfo iface,
APTTYPE *  apttype 
)
static

Definition at line 2473 of file combase.c.

2474{
2476
2477 TRACE("%p\n", apttype);
2478
2479 return CoGetApartmentType(apttype, &qualifier);
2480}
HRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier)
Definition: combase.c:2928
enum _APTTYPEQUALIFIER APTTYPEQUALIFIER

◆ thread_context_info_GetCurrentLogicalThreadId()

static HRESULT WINAPI thread_context_info_GetCurrentLogicalThreadId ( IComThreadingInfo iface,
GUID logical_thread_id 
)
static

Definition at line 2507 of file combase.c.

2508{
2509 TRACE("%p\n", logical_thread_id);
2510
2511 return CoGetCurrentLogicalThreadId(logical_thread_id);
2512}
HRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id)
Definition: combase.c:2714

◆ thread_context_info_GetCurrentThreadType()

static HRESULT WINAPI thread_context_info_GetCurrentThreadType ( IComThreadingInfo iface,
THDTYPE thdtype 
)
static

Definition at line 2482 of file combase.c.

2483{
2485 APTTYPE apttype;
2486 HRESULT hr;
2487
2488 hr = CoGetApartmentType(&apttype, &qualifier);
2489 if (FAILED(hr))
2490 return hr;
2491
2492 TRACE("%p\n", thdtype);
2493
2494 switch (apttype)
2495 {
2496 case APTTYPE_STA:
2497 case APTTYPE_MAINSTA:
2498 *thdtype = THDTYPE_PROCESSMESSAGES;
2499 break;
2500 default:
2501 *thdtype = THDTYPE_BLOCKMESSAGES;
2502 break;
2503 }
2504 return S_OK;
2505}
@ THDTYPE_PROCESSMESSAGES
@ THDTYPE_BLOCKMESSAGES

◆ thread_context_info_QueryInterface()

static HRESULT WINAPI thread_context_info_QueryInterface ( IComThreadingInfo iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 2422 of file combase.c.

2423{
2425
2426 *obj = NULL;
2427
2428 if (IsEqualIID(riid, &IID_IComThreadingInfo) ||
2430 {
2431 *obj = &context->IComThreadingInfo_iface;
2432 }
2433 else if (IsEqualIID(riid, &IID_IContextCallback))
2434 {
2435 *obj = &context->IContextCallback_iface;
2436 }
2437 else if (IsEqualIID(riid, &IID_IObjContext))
2438 {
2439 *obj = &context->IObjContext_iface;
2440 }
2441
2442 if (*obj)
2443 {
2444 IUnknown_AddRef((IUnknown *)*obj);
2445 return S_OK;
2446 }
2447
2448 FIXME("interface not implemented %s\n", debugstr_guid(riid));
2449 return E_NOINTERFACE;
2450}

◆ thread_context_info_Release()

static ULONG WINAPI thread_context_info_Release ( IComThreadingInfo iface)
static

Definition at line 2458 of file combase.c.

2459{
2461
2462 /* Context instance is initially created with CoGetContextToken() with refcount set to 0,
2463 releasing context while refcount is at 0 destroys it. */
2464 if (!context->refcount)
2465 {
2466 free(context);
2467 return 0;
2468 }
2469
2470 return InterlockedDecrement(&context->refcount);
2471}

◆ thread_context_info_SetCurrentLogicalThreadId()

static HRESULT WINAPI thread_context_info_SetCurrentLogicalThreadId ( IComThreadingInfo iface,
REFGUID  logical_thread_id 
)
static

Definition at line 2514 of file combase.c.

2515{
2516 FIXME("%s stub\n", debugstr_guid(logical_thread_id));
2517
2518 return E_NOTIMPL;
2519}

◆ thread_object_context_AddRef()

static ULONG WINAPI thread_object_context_AddRef ( IObjContext iface)
static

Definition at line 2572 of file combase.c.

2573{
2575 return IComThreadingInfo_AddRef(&context->IComThreadingInfo_iface);
2576}
static struct thread_context * impl_from_IObjContext(IObjContext *iface)
Definition: combase.c:2417

◆ thread_object_context_EnumContextProps()

static HRESULT WINAPI thread_object_context_EnumContextProps ( IObjContext iface,
IEnumContextProps **  props 
)
static

Definition at line 2605 of file combase.c.

2606{
2607 FIXME("%p, %p\n", iface, props);
2608
2609 return E_NOTIMPL;
2610}
static const WCHAR props[]
Definition: wbemdisp.c:288

◆ thread_object_context_GetProperty()

static HRESULT WINAPI thread_object_context_GetProperty ( IObjContext iface,
REFGUID  propid,
CPFLAGS flags,
IUnknown **  punk 
)
static

Definition at line 2598 of file combase.c.

2599{
2600 FIXME("%p, %s, %p, %p\n", iface, debugstr_guid(propid), flags, punk);
2601
2602 return E_NOTIMPL;
2603}

◆ thread_object_context_QueryInterface()

static HRESULT WINAPI thread_object_context_QueryInterface ( IObjContext iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 2566 of file combase.c.

2567{
2569 return IComThreadingInfo_QueryInterface(&context->IComThreadingInfo_iface, riid, obj);
2570}

◆ thread_object_context_Release()

static ULONG WINAPI thread_object_context_Release ( IObjContext iface)
static

Definition at line 2578 of file combase.c.

2579{
2581 return IComThreadingInfo_Release(&context->IComThreadingInfo_iface);
2582}

◆ thread_object_context_RemoveProperty()

static HRESULT WINAPI thread_object_context_RemoveProperty ( IObjContext iface,
REFGUID  propid 
)
static

Definition at line 2591 of file combase.c.

2592{
2593 FIXME("%p, %s\n", iface, debugstr_guid(propid));
2594
2595 return E_NOTIMPL;
2596}

◆ thread_object_context_Reserved1()

static void WINAPI thread_object_context_Reserved1 ( IObjContext iface)
static

Definition at line 2612 of file combase.c.

2613{
2614 FIXME("%p\n", iface);
2615}

◆ thread_object_context_Reserved2()

static void WINAPI thread_object_context_Reserved2 ( IObjContext iface)
static

Definition at line 2617 of file combase.c.

2618{
2619 FIXME("%p\n", iface);
2620}

◆ thread_object_context_Reserved3()

static void WINAPI thread_object_context_Reserved3 ( IObjContext iface)
static

Definition at line 2622 of file combase.c.

2623{
2624 FIXME("%p\n", iface);
2625}

◆ thread_object_context_Reserved4()

static void WINAPI thread_object_context_Reserved4 ( IObjContext iface)
static

Definition at line 2627 of file combase.c.

2628{
2629 FIXME("%p\n", iface);
2630}

◆ thread_object_context_Reserved5()

static void WINAPI thread_object_context_Reserved5 ( IObjContext iface)
static

Definition at line 2632 of file combase.c.

2633{
2634 FIXME("%p\n", iface);
2635}

◆ thread_object_context_Reserved6()

static void WINAPI thread_object_context_Reserved6 ( IObjContext iface)
static

Definition at line 2637 of file combase.c.

2638{
2639 FIXME("%p\n", iface);
2640}

◆ thread_object_context_Reserved7()

static void WINAPI thread_object_context_Reserved7 ( IObjContext iface)
static

Definition at line 2642 of file combase.c.

2643{
2644 FIXME("%p\n", iface);
2645}

◆ thread_object_context_SetProperty()

static HRESULT WINAPI thread_object_context_SetProperty ( IObjContext iface,
REFGUID  propid,
CPFLAGS  flags,
IUnknown punk 
)
static

Definition at line 2584 of file combase.c.

2585{
2586 FIXME("%p, %s, %lx, %p\n", iface, debugstr_guid(propid), flags, punk);
2587
2588 return E_NOTIMPL;
2589}

◆ unlock_init_spies()

static void unlock_init_spies ( struct tlsdata tlsdata)
static

Definition at line 2776 of file combase.c.

2777{
2778 struct init_spy *spy, *next;
2779
2780 if (--tlsdata->spies_lock) return;
2781
2783 {
2784 if (spy->spy) continue;
2785 list_remove(&spy->entry);
2786 free(spy);
2787 }
2788}

Referenced by CoInitializeEx(), and CoUninitialize().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ole  )

Variable Documentation

◆ classes_root_hkey

HKEY classes_root_hkey
static

Definition at line 218 of file combase.c.

Referenced by create_classes_root_hkey(), and get_classes_root_hkey().

◆ com_lockcount

LONG com_lockcount
static

Definition at line 51 of file combase.c.

Referenced by CoInitializeEx(), and CoUninitialize().

◆ com_server_process_refcount

LONG com_server_process_refcount
static

Definition at line 53 of file combase.c.

Referenced by CoAddRefServerProcess(), and CoReleaseServerProcess().

◆ cs_registered_ps

static CRITICAL_SECTION cs_registered_ps = { &psclsid_cs_debug, -1, 0, 0, 0, 0 }
static

Definition at line 112 of file combase.c.

Referenced by CoGetPSClsid(), com_revoke_all_ps_clsids(), and CoRegisterPSClsid().

◆ global_options

Definition at line 42 of file combase.c.

◆ global_options_factory

IClassFactory global_options_factory = { &global_options_factory_vtbl }
static

Definition at line 589 of file combase.c.

Referenced by DllGetClassObject(), and get_builtin_class_factory().

◆ global_options_factory_vtbl

const IClassFactoryVtbl global_options_factory_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI class_factory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: combase.c:553
static ULONG WINAPI class_factory_Release(IClassFactory *iface)
Definition: combase.c:548
static HRESULT WINAPI global_options_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: combase.c:560
static ULONG WINAPI class_factory_AddRef(IClassFactory *iface)
Definition: combase.c:543
static HRESULT WINAPI class_factory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: combase.c:529

Definition at line 580 of file combase.c.

◆ global_options_vtbl

const IGlobalOptionsVtbl global_options_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI global_options_Set(IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR value)
Definition: combase.c:501
static HRESULT WINAPI global_options_Query(IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR *value)
Definition: combase.c:508
static ULONG WINAPI global_options_Release(IGlobalOptions *iface)
Definition: combase.c:488
static ULONG WINAPI global_options_AddRef(IGlobalOptions *iface)
Definition: combase.c:478
static HRESULT WINAPI global_options_QueryInterface(IGlobalOptions *iface, REFIID riid, void **ppv)
Definition: combase.c:460

Definition at line 520 of file combase.c.

Referenced by global_options_CreateInstance().

◆ guid_conv_table

const BYTE guid_conv_table[256]
static
Initial value:
=
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
}

Definition at line 1336 of file combase.c.

Referenced by guid_from_string().

◆ hProxyDll

◆ psclsid_cs_debug

CRITICAL_SECTION_DEBUG psclsid_cs_debug
static
Initial value:
=
{
0, 0, { (DWORD_PTR)(__FILE__ ": cs_registered_psclsid_list") }
}
static CRITICAL_SECTION_DEBUG psclsid_cs_debug
Definition: combase.c:113
#define DWORD_PTR
Definition: treelist.c:76

Definition at line 113 of file combase.c.

◆ registered_classes

struct list registered_classes = LIST_INIT(registered_classes)
static

◆ registered_classes_cs

◆ registered_classes_cs_debug

CRITICAL_SECTION_DEBUG registered_classes_cs_debug
static
Initial value:
=
{
0, 0, { (DWORD_PTR)(__FILE__ ": registered_classes_cs") }
}
static CRITICAL_SECTION_DEBUG registered_classes_cs_debug
Definition: combase.c:136

Definition at line 136 of file combase.c.

◆ registered_proxystubs

struct list registered_proxystubs = LIST_INIT(registered_proxystubs)
static

Definition at line 110 of file combase.c.

Referenced by CoGetPSClsid(), com_revoke_all_ps_clsids(), and CoRegisterPSClsid().

◆ thread_context_callback_vtbl

const IContextCallbackVtbl thread_context_callback_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI thread_context_callback_ContextCallback(IContextCallback *iface, PFNCONTEXTCALL callback, ComCallData *param, REFIID riid, int method, IUnknown *punk)
Definition: combase.c:2550
static ULONG WINAPI thread_context_callback_Release(IContextCallback *iface)
Definition: combase.c:2544
static HRESULT WINAPI thread_context_callback_QueryInterface(IContextCallback *iface, REFIID riid, void **obj)
Definition: combase.c:2532
static ULONG WINAPI thread_context_callback_AddRef(IContextCallback *iface)
Definition: combase.c:2538

Definition at line 2558 of file combase.c.

Referenced by CoGetContextToken().

◆ thread_context_info_vtbl

const IComThreadingInfoVtbl thread_context_info_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI thread_context_info_GetCurrentApartmentType(IComThreadingInfo *iface, APTTYPE *apttype)
Definition: combase.c:2473
static HRESULT WINAPI thread_context_info_QueryInterface(IComThreadingInfo *iface, REFIID riid, void **obj)
Definition: combase.c:2422
static HRESULT WINAPI thread_context_info_SetCurrentLogicalThreadId(IComThreadingInfo *iface, REFGUID logical_thread_id)
Definition: combase.c:2514
static ULONG WINAPI thread_context_info_Release(IComThreadingInfo *iface)
Definition: combase.c:2458
static HRESULT WINAPI thread_context_info_GetCurrentThreadType(IComThreadingInfo *iface, THDTYPE *thdtype)
Definition: combase.c:2482
static ULONG WINAPI thread_context_info_AddRef(IComThreadingInfo *iface)
Definition: combase.c:2452
static HRESULT WINAPI thread_context_info_GetCurrentLogicalThreadId(IComThreadingInfo *iface, GUID *logical_thread_id)
Definition: combase.c:2507

Definition at line 2521 of file combase.c.

Referenced by CoGetContextToken().

◆ thread_object_context_vtbl

const IObjContextVtbl thread_object_context_vtbl
static
Initial value:
=
{
}
static void WINAPI thread_object_context_Reserved6(IObjContext *iface)
Definition: combase.c:2637
static HRESULT WINAPI thread_object_context_QueryInterface(IObjContext *iface, REFIID riid, void **obj)
Definition: combase.c:2566
static ULONG WINAPI thread_object_context_AddRef(IObjContext *iface)
Definition: combase.c:2572
static void WINAPI thread_object_context_Reserved4(IObjContext *iface)
Definition: combase.c:2627
static void WINAPI thread_object_context_Reserved3(IObjContext *iface)
Definition: combase.c:2622
static void WINAPI thread_object_context_Reserved5(IObjContext *iface)
Definition: combase.c:2632
static ULONG WINAPI thread_object_context_Release(IObjContext *iface)
Definition: combase.c:2578
static void WINAPI thread_object_context_Reserved7(IObjContext *iface)
Definition: combase.c:2642
static HRESULT WINAPI thread_object_context_GetProperty(IObjContext *iface, REFGUID propid, CPFLAGS *flags, IUnknown **punk)
Definition: combase.c:2598
static HRESULT WINAPI thread_object_context_SetProperty(IObjContext *iface, REFGUID propid, CPFLAGS flags, IUnknown *punk)
Definition: combase.c:2584
static HRESULT WINAPI thread_object_context_RemoveProperty(IObjContext *iface, REFGUID propid)
Definition: combase.c:2591
static HRESULT WINAPI thread_object_context_EnumContextProps(IObjContext *iface, IEnumContextProps **props)
Definition: combase.c:2605
static void WINAPI thread_object_context_Reserved1(IObjContext *iface)
Definition: combase.c:2612
static void WINAPI thread_object_context_Reserved2(IObjContext *iface)
Definition: combase.c:2617

Definition at line 2647 of file combase.c.

Referenced by CoGetContextToken().