ReactOS  0.4.14-dev-606-g14ebc0b
compobj.c File Reference
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "ntstatus.h"
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "winreg.h"
#include "winuser.h"
#include "objbase.h"
#include "ole2.h"
#include "ole2ver.h"
#include "ctxtcall.h"
#include "dde.h"
#include "servprov.h"
#include "initguid.h"
#include "compobj_private.h"
#include "moniker.h"
#include "wine/debug.h"
Include dependency graph for compobj.c:

Go to the source code of this file.

Classes

struct  comclassredirect_data
 
struct  ifacepsredirect_data
 
struct  progidredirect_data
 
struct  class_reg_data
 
struct  registered_psclsid
 
struct  LocalServer
 
struct  tagRegisteredClass
 
struct  tagOpenDll
 
struct  apartment_loaded_dll
 
struct  ManualResetEvent
 
struct  host_object_params
 
struct  host_thread_params
 
struct  Context
 
struct  GlobalOptions
 

Macros

#define COBJMACROS
 
#define NONAMELESSUNION
 
#define WIN32_NO_STATUS
 
#define USE_COM_CONTEXT_DEF
 

Typedefs

typedef struct tagRegisteredClass RegisteredClass
 
typedef HRESULT(CALLBACKDllGetClassObjectFunc) (REFCLSID clsid, REFIID iid, LPVOID *ppv)
 
typedef HRESULT(WINAPIDllCanUnloadNowFunc) (void)
 
typedef struct tagOpenDll OpenDll
 
typedef struct ManualResetEvent MREImpl
 
typedef struct Context Context
 

Enumerations

enum  comclass_threadingmodel {
  ThreadingModel_Apartment = 1, ThreadingModel_Free = 2, ThreadingModel_No = 3, ThreadingModel_Both = 4,
  ThreadingModel_Neutral = 5, ThreadingModel_Apartment = 1, ThreadingModel_Free = 2, ThreadingModel_No = 3,
  ThreadingModel_Both = 4, ThreadingModel_Neutral = 5, ThreadingModel_Apartment = 1, ThreadingModel_Free = 2,
  ThreadingModel_No = 3, ThreadingModel_Both = 4, ThreadingModel_Neutral = 5
}
 
enum  comclass_miscfields {
  MiscStatus = 1, MiscStatusIcon = 2, MiscStatusContent = 4, MiscStatusThumbnail = 8,
  MiscStatusDocPrint = 16, MiscStatus = 1, MiscStatusIcon = 2, MiscStatusContent = 4,
  MiscStatusThumbnail = 8, MiscStatusDocPrint = 16, MiscStatus = 1, MiscStatusIcon = 2,
  MiscStatusContent = 4, MiscStatusThumbnail = 8, MiscStatusDocPrint = 16
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ole)
 
static enum comclass_miscfields dvaspect_to_miscfields (DWORD aspect)
 
BOOL actctx_get_miscstatus (const CLSID *clsid, DWORD aspect, DWORD *status)
 
static NTSTATUS create_key (HKEY *retkey, ACCESS_MASK access, OBJECT_ATTRIBUTES *attr)
 
static HKEY create_classes_root_hkey (DWORD access)
 
static HKEY get_classes_root_hkey (HKEY hkey, REGSAM access)
 
LSTATUS create_classes_key (HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
 
LSTATUS open_classes_key (HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
 
static OpenDllCOMPOBJ_DllList_Get (LPCWSTR library_name)
 
static HRESULT COMPOBJ_DllList_Add (LPCWSTR library_name, OpenDll **ret)
 
static void COMPOBJ_DllList_ReleaseRef (OpenDll *entry, BOOL free_entry)
 
static void COMPOBJ_DllList_Free (void)
 
static DWORD apartment_addref (struct apartment *apt)
 
static APARTMENTapartment_construct (DWORD model)
 
static APARTMENTapartment_get_or_create (DWORD model)
 
static BOOL apartment_is_model (const APARTMENT *apt, DWORD model)
 
static APARTMENTapartment_find_mta (void)
 
APARTMENTapartment_get_current_or_mta (void)
 
static void COM_RevokeRegisteredClassObject (RegisteredClass *curClass)
 
static void COM_RevokeAllClasses (const struct apartment *apt)
 
static void revoke_registered_psclsids (void)
 
static MREImplimpl_from_ISynchronize (ISynchronize *iface)
 
static HRESULT WINAPI ISynchronize_fnQueryInterface (ISynchronize *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ISynchronize_fnAddRef (ISynchronize *iface)
 
static ULONG WINAPI ISynchronize_fnRelease (ISynchronize *iface)
 
static HRESULT WINAPI ISynchronize_fnWait (ISynchronize *iface, DWORD dwFlags, DWORD dwMilliseconds)
 
static HRESULT WINAPI ISynchronize_fnSignal (ISynchronize *iface)
 
static HRESULT WINAPI ISynchronize_fnReset (ISynchronize *iface)
 
static MREImplimpl_from_ISynchronizeHandle (ISynchronizeHandle *iface)
 
static HRESULT WINAPI SynchronizeHandle_QueryInterface (ISynchronizeHandle *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI SynchronizeHandle_AddRef (ISynchronizeHandle *iface)
 
static ULONG WINAPI SynchronizeHandle_Release (ISynchronizeHandle *iface)
 
static HRESULT WINAPI SynchronizeHandle_GetHandle (ISynchronizeHandle *iface, HANDLE *ph)
 
static HRESULT ManualResetEvent_Construct (IUnknown *punkouter, REFIID iid, void **ppv)
 
static LocalServerimpl_from_IServiceProvider (IServiceProvider *iface)
 
static HRESULT WINAPI LocalServer_QueryInterface (IServiceProvider *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI LocalServer_AddRef (IServiceProvider *iface)
 
static ULONG WINAPI LocalServer_Release (IServiceProvider *iface)
 
static HRESULT WINAPI LocalServer_QueryService (IServiceProvider *iface, REFGUID guid, REFIID riid, void **ppv)
 
static HRESULT get_local_server_stream (APARTMENT *apt, IStream **ret)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject (DWORD dwRegister)
 
static void apartment_freeunusedlibraries (struct apartment *apt, DWORD delay)
 
DWORD apartment_release (struct apartment *apt)
 
APARTMENTapartment_findfromoxid (OXID oxid, BOOL ref)
 
APARTMENTapartment_findfromtid (DWORD tid)
 
static APARTMENTapartment_findmain (void)
 
static HRESULT apartment_getclassobject (struct apartment *apt, LPCWSTR dllpath, BOOL apartment_threaded, REFCLSID rclsid, REFIID riid, void **ppv)
 
static BOOL get_object_dll_path (const struct class_reg_data *regdata, WCHAR *dst, DWORD dstlen)
 
static HRESULT apartment_hostobject (struct apartment *apt, const struct host_object_params *params)
 
static LRESULT CALLBACK apartment_wndproc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static DWORD CALLBACK apartment_hostobject_thread (LPVOID p)
 
static HRESULT apartment_hostobject_in_hostapt (struct apartment *apt, BOOL multi_threaded, BOOL main_apartment, const struct class_reg_data *regdata, REFCLSID rclsid, REFIID riid, void **ppv)
 
static BOOL WINAPI register_class (INIT_ONCE *once, void *param, void **context)
 
HRESULT apartment_createwindowifneeded (struct apartment *apt)
 
HWND apartment_getwindow (const struct apartment *apt)
 
static void COM_TlsDestroy (void)
 
DWORD WINAPI CoBuildVersion (void)
 
static struct init_spyget_spy_entry (struct oletls *info, unsigned int id)
 
static void lock_init_spies (struct oletls *info)
 
static void unlock_init_spies (struct oletls *info)
 
HRESULT WINAPI CoRegisterInitializeSpy (IInitializeSpy *spy, ULARGE_INTEGER *cookie)
 
HRESULT WINAPI CoRevokeInitializeSpy (ULARGE_INTEGER cookie)
 
HRESULT enter_apartment (struct oletls *info, DWORD model)
 
void leave_apartment (struct oletls *info)
 
HRESULT WINAPI CoInitialize (LPVOID lpReserved)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx (LPVOID lpReserved, DWORD dwCoInit)
 
void WINAPI DECLSPEC_HOTPATCH CoUninitialize (void)
 
HRESULT WINAPI CoDisconnectObject (LPUNKNOWN lpUnk, DWORD reserved)
 
HRESULT WINAPI CoCreateGuid (GUID *pguid)
 
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 CLSIDFromString (LPCOLESTR idstr, LPCLSID id)
 
HRESULT WINAPI IIDFromString (LPCOLESTR s, IID *iid)
 
HRESULT WINAPI StringFromCLSID (REFCLSID id, LPOLESTR *idstr)
 
INT WINAPI StringFromGUID2 (REFGUID id, LPOLESTR str, INT cmax)
 
HRESULT COM_OpenKeyForCLSID (REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY *subkey)
 
HRESULT COM_OpenKeyForAppIdFromCLSID (REFCLSID clsid, REGSAM access, HKEY *subkey)
 
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID (REFCLSID clsid, LPOLESTR *ppszProgID)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID (LPCOLESTR progid, LPCLSID clsid)
 
HRESULT WINAPI CLSIDFromProgIDEx (LPCOLESTR progid, LPCLSID clsid)
 
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 HRESULT COM_GetRegisteredClassObject (const struct apartment *apt, REFCLSID rclsid, DWORD dwClsContext, LPUNKNOWN *ppUnk)
 
HRESULT WINAPI CoRegisterClassObject (REFCLSID rclsid, LPUNKNOWN pUnk, DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister)
 
static enum comclass_threadingmodel get_threading_model (const struct class_reg_data *data)
 
static HRESULT get_inproc_class_object (APARTMENT *apt, const struct class_reg_data *regdata, REFCLSID rclsid, REFIID riid, BOOL hostifnecessary, void **ppv)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject (REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv)
 
HRESULT WINAPI CoResumeClassObjects (void)
 
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
 
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 CoCreateInstanceEx (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, COSERVERINFO *pServerInfo, ULONG cmq, MULTI_QI *pResults)
 
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)
 
HINSTANCE WINAPI CoLoadLibrary (LPOLESTR lpszLibName, BOOL bAutoFree)
 
void WINAPI CoFreeLibrary (HINSTANCE hLibrary)
 
void WINAPI CoFreeAllLibraries (void)
 
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx (DWORD dwUnloadDelay, DWORD dwReserved)
 
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries (void)
 
HRESULT WINAPI CoFileTimeNow (FILETIME *lpFileTime)
 
HRESULT WINAPI CoLockObjectExternal (LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases)
 
HRESULT WINAPI CoInitializeWOW (DWORD x, DWORD y)
 
HRESULT WINAPI CoGetState (IUnknown **ppv)
 
HRESULT WINAPI CoSetState (IUnknown *pv)
 
HRESULT WINAPI CoTreatAsClass (REFCLSID clsidOld, REFCLSID clsidNew)
 
HRESULT WINAPI CoGetTreatAsClass (REFCLSID clsidOld, LPCLSID clsidNew)
 
DWORD WINAPI CoGetCurrentProcess (void)
 
HRESULT WINAPI CoGetCurrentLogicalThreadId (GUID *id)
 
HRESULT WINAPI CoRegisterMessageFilter (LPMESSAGEFILTER lpMessageFilter, LPMESSAGEFILTER *lplpMessageFilter)
 
BOOL WINAPI CoIsOle1Class (REFCLSID clsid)
 
BOOL WINAPI IsEqualGUID (REFGUID rguid1, REFGUID rguid2)
 
HRESULT WINAPI CoInitializeSecurity (PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE *asAuthSvc, void *pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void *pReserved2, DWORD dwCapabilities, void *pReserved3)
 
HRESULT WINAPI CoSuspendClassObjects (void)
 
ULONG WINAPI CoAddRefServerProcess (void)
 
ULONG WINAPI CoReleaseServerProcess (void)
 
BOOL WINAPI CoIsHandlerConnected (IUnknown *pUnk)
 
HRESULT WINAPI CoAllowSetForegroundWindow (IUnknown *pUnk, void *pvReserved)
 
HRESULT WINAPI CoQueryProxyBlanket (IUnknown *pProxy, DWORD *pAuthnSvc, DWORD *pAuthzSvc, OLECHAR **ppServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, void **ppAuthInfo, DWORD *pCapabilities)
 
HRESULT WINAPI CoSetProxyBlanket (IUnknown *pProxy, DWORD AuthnSvc, DWORD AuthzSvc, OLECHAR *pServerPrincName, DWORD AuthnLevel, DWORD ImpLevel, void *pAuthInfo, DWORD Capabilities)
 
HRESULT WINAPI CoCopyProxy (IUnknown *pProxy, IUnknown **ppCopy)
 
HRESULT WINAPI CoGetCallContext (REFIID riid, void **ppv)
 
HRESULT WINAPI CoSwitchCallContext (IUnknown *pObject, IUnknown **ppOldObject)
 
HRESULT WINAPI CoQueryClientBlanket (DWORD *pAuthnSvc, DWORD *pAuthzSvc, OLECHAR **pServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, RPC_AUTHZ_HANDLE *pPrivs, DWORD *pCapabilities)
 
HRESULT WINAPI CoImpersonateClient (void)
 
HRESULT WINAPI CoRevertToSelf (void)
 
static BOOL COM_PeekMessage (struct apartment *apt, MSG *msg)
 
HRESULT WINAPI CoWaitForMultipleHandles (DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex)
 
HRESULT WINAPI CoGetObject (LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, void **ppv)
 
HRESULT WINAPI CoRegisterChannelHook (REFGUID guidExtension, IChannelHook *pChannelHook)
 
static Contextimpl_from_IComThreadingInfo (IComThreadingInfo *iface)
 
static Contextimpl_from_IContextCallback (IContextCallback *iface)
 
static Contextimpl_from_IObjContext (IObjContext *iface)
 
static HRESULT Context_QueryInterface (Context *iface, REFIID riid, LPVOID *ppv)
 
static ULONG Context_AddRef (Context *This)
 
static ULONG Context_Release (Context *This)
 
static HRESULT WINAPI Context_CTI_QueryInterface (IComThreadingInfo *iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI Context_CTI_AddRef (IComThreadingInfo *iface)
 
static ULONG WINAPI Context_CTI_Release (IComThreadingInfo *iface)
 
static HRESULT WINAPI Context_CTI_GetCurrentApartmentType (IComThreadingInfo *iface, APTTYPE *apttype)
 
static HRESULT WINAPI Context_CTI_GetCurrentThreadType (IComThreadingInfo *iface, THDTYPE *thdtype)
 
static HRESULT WINAPI Context_CTI_GetCurrentLogicalThreadId (IComThreadingInfo *iface, GUID *logical_thread_id)
 
static HRESULT WINAPI Context_CTI_SetCurrentLogicalThreadId (IComThreadingInfo *iface, REFGUID logical_thread_id)
 
static HRESULT WINAPI Context_CC_QueryInterface (IContextCallback *iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI Context_CC_AddRef (IContextCallback *iface)
 
static ULONG WINAPI Context_CC_Release (IContextCallback *iface)
 
static HRESULT WINAPI Context_CC_ContextCallback (IContextCallback *iface, PFNCONTEXTCALL pCallback, ComCallData *param, REFIID riid, int method, IUnknown *punk)
 
static HRESULT WINAPI Context_OC_QueryInterface (IObjContext *iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI Context_OC_AddRef (IObjContext *iface)
 
static ULONG WINAPI Context_OC_Release (IObjContext *iface)
 
static HRESULT WINAPI Context_OC_SetProperty (IObjContext *iface, REFGUID propid, CPFLAGS flags, IUnknown *punk)
 
static HRESULT WINAPI Context_OC_RemoveProperty (IObjContext *iface, REFGUID propid)
 
static HRESULT WINAPI Context_OC_GetProperty (IObjContext *iface, REFGUID propid, CPFLAGS *flags, IUnknown **punk)
 
static HRESULT WINAPI Context_OC_EnumContextProps (IObjContext *iface, IEnumContextProps **props)
 
static void WINAPI Context_OC_Reserved1 (IObjContext *iface)
 
static void WINAPI Context_OC_Reserved2 (IObjContext *iface)
 
static void WINAPI Context_OC_Reserved3 (IObjContext *iface)
 
static void WINAPI Context_OC_Reserved4 (IObjContext *iface)
 
static void WINAPI Context_OC_Reserved5 (IObjContext *iface)
 
static void WINAPI Context_OC_Reserved6 (IObjContext *iface)
 
static void WINAPI Context_OC_Reserved7 (IObjContext *iface)
 
HRESULT WINAPI CoGetObjectContext (REFIID riid, void **ppv)
 
HRESULT WINAPI CoGetContextToken (ULONG_PTR *token)
 
HRESULT WINAPI CoGetDefaultContext (APTTYPE type, REFIID riid, LPVOID *ppv)
 
HRESULT Handler_DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 
HRESULT WINAPI CoGetApartmentType (APTTYPE *type, APTTYPEQUALIFIER *qualifier)
 
HRESULT WINAPI CoDisableCallCancellation (void *reserved)
 
HRESULT WINAPI CoEnableCallCancellation (void *reserved)
 
HRESULT WINAPI CoRegisterSurrogate (ISurrogate *surrogate)
 
HRESULT WINAPI CoRegisterSurrogateEx (REFGUID guid, void *reserved)
 
static GlobalOptionsimpl_from_IGlobalOptions (IGlobalOptions *iface)
 
static HRESULT WINAPI GlobalOptions_QueryInterface (IGlobalOptions *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI GlobalOptions_AddRef (IGlobalOptions *iface)
 
static ULONG WINAPI GlobalOptions_Release (IGlobalOptions *iface)
 
static HRESULT WINAPI GlobalOptions_Set (IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR value)
 
static HRESULT WINAPI GlobalOptions_Query (IGlobalOptions *iface, GLOBALOPT_PROPERTIES property, ULONG_PTR *value)
 
HRESULT WINAPI GlobalOptions_CreateInstance (IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
 
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID reserved)
 
HRESULT WINAPI DllRegisterServer (void)
 
HRESULT WINAPI DllUnregisterServer (void)
 

Variables

static APARTMENTMTA
 
static APARTMENTMainApartment
 
static struct list apts = LIST_INIT( apts )
 
static CRITICAL_SECTION csApartment = { &critsect_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG critsect_debug
 
static struct list registered_psclsid_list = LIST_INIT(registered_psclsid_list)
 
static CRITICAL_SECTION cs_registered_psclsid_list = { &psclsid_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG psclsid_cs_debug
 
static LONG s_COMLockCount = 0
 
static LONG s_COMServerProcessReferences = 0
 
static struct list RegisteredClassList = LIST_INIT(RegisteredClassList)
 
static CRITICAL_SECTION csRegisteredClassList = { &class_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG class_cs_debug
 
static const WCHAR classes_rootW []
 
static HKEY classes_root_hkey
 
static struct list openDllList = LIST_INIT(openDllList)
 
static CRITICAL_SECTION csOpenDllList = { &dll_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG dll_cs_debug
 
static const WCHAR wszAptWinClass [] = {'O','l','e','M','a','i','n','T','h','r','e','a','d','W','n','d','C','l','a','s','s',0}
 
static ATOM apt_win_class
 
static ISynchronizeVtbl vt_ISynchronize
 
static const ISynchronizeHandleVtbl SynchronizeHandleVtbl
 
static const IServiceProviderVtbl LocalServerVtbl
 
static const BYTE guid_conv_table [256]
 
static const IComThreadingInfoVtbl Context_Threading_Vtbl
 
static const IContextCallbackVtbl Context_Callback_Vtbl
 
static const IObjContextVtbl Context_Object_Vtbl
 
static const IGlobalOptionsVtbl GlobalOptionsVtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 44 of file compobj.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 45 of file compobj.c.

◆ USE_COM_CONTEXT_DEF

#define USE_COM_CONTEXT_DEF

Definition at line 54 of file compobj.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 48 of file compobj.c.

Typedef Documentation

◆ Context

◆ DllCanUnloadNowFunc

typedef HRESULT(WINAPI * DllCanUnloadNowFunc) (void)

Definition at line 450 of file compobj.c.

◆ DllGetClassObjectFunc

typedef HRESULT(CALLBACK * DllGetClassObjectFunc) (REFCLSID clsid, REFIID iid, LPVOID *ppv)

Definition at line 449 of file compobj.c.

◆ MREImpl

◆ OpenDll

◆ RegisteredClass

Enumeration Type Documentation

◆ comclass_miscfields

Enumerator
MiscStatus 
MiscStatusIcon 
MiscStatusContent 
MiscStatusThumbnail 
MiscStatusDocPrint 
MiscStatus 
MiscStatusIcon 
MiscStatusContent 
MiscStatusThumbnail 
MiscStatusDocPrint 
MiscStatus 
MiscStatusIcon 
MiscStatusContent 
MiscStatusThumbnail 
MiscStatusDocPrint 

Definition at line 98 of file compobj.c.

◆ comclass_threadingmodel

Enumerator
ThreadingModel_Apartment 
ThreadingModel_Free 
ThreadingModel_No 
ThreadingModel_Both 
ThreadingModel_Neutral 
ThreadingModel_Apartment 
ThreadingModel_Free 
ThreadingModel_No 
ThreadingModel_Both 
ThreadingModel_Neutral 
ThreadingModel_Apartment 
ThreadingModel_Free 
ThreadingModel_No 
ThreadingModel_Both 
ThreadingModel_Neutral 

Definition at line 89 of file compobj.c.

Function Documentation

◆ actctx_get_miscstatus()

BOOL actctx_get_miscstatus ( const CLSID clsid,
DWORD  aspect,
DWORD status 
)

Definition at line 254 of file compobj.c.

255 {
256  ACTCTX_SECTION_KEYED_DATA data;
257 
258  data.cbSize = sizeof(data);
259  if (FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION,
260  clsid, &data))
261  {
262  struct comclassredirect_data *comclass = (struct comclassredirect_data*)data.lpData;
263  enum comclass_miscfields misc = dvaspect_to_miscfields(aspect);
264 
265  if (!(comclass->miscmask & misc))
266  {
267  if (!(comclass->miscmask & MiscStatus))
268  {
269  *status = 0;
270  return TRUE;
271  }
272  misc = MiscStatus;
273  }
274 
275  switch (misc)
276  {
277  case MiscStatus:
278  *status = comclass->miscstatus;
279  break;
280  case MiscStatusIcon:
281  *status = comclass->miscstatusicon;
282  break;
283  case MiscStatusContent:
284  *status = comclass->miscstatuscontent;
285  break;
286  case MiscStatusThumbnail:
287  *status = comclass->miscstatusthumbnail;
288  break;
289  case MiscStatusDocPrint:
290  *status = comclass->miscstatusdocprint;
291  break;
292  default:
293  ;
294  };
295 
296  return TRUE;
297  }
298  else
299  return FALSE;
300 }
#define TRUE
Definition: types.h:120
comclass_miscfields
Definition: compobj.c:98
DWORD miscstatusdocprint
Definition: compobj.c:128
static enum comclass_miscfields dvaspect_to_miscfields(DWORD aspect)
Definition: compobj.c:237
smooth NULL
Definition: ftsmooth.c:416
DWORD miscstatusthumbnail
Definition: compobj.c:126
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
REFCLSID clsid
Definition: msctf.c:82
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
Definition: actctx.c:183
Definition: ps.c:97

Referenced by OleRegGetMiscStatus().

◆ apartment_addref()

static DWORD apartment_addref ( struct apartment apt)
static

Definition at line 619 of file compobj.c.

620 {
621  DWORD refs = InterlockedIncrement(&apt->refs);
622  TRACE("%s: before = %d\n", wine_dbgstr_longlong(apt->oxid), refs - 1);
623  return refs;
624 }
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
#define InterlockedIncrement
Definition: armddk.h:53
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41

Referenced by apartment_find_mta(), apartment_findfromoxid(), apartment_findfromtid(), apartment_findmain(), apartment_get_current_or_mta(), and apartment_get_or_create().

◆ apartment_construct()

static APARTMENT* apartment_construct ( DWORD  model)
static

Definition at line 628 of file compobj.c.

629 {
630  APARTMENT *apt;
631 
632  TRACE("creating new apartment, model=%d\n", model);
633 
634  apt = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*apt));
635  apt->tid = GetCurrentThreadId();
636 
637  list_init(&apt->proxies);
638  list_init(&apt->stubmgrs);
639  list_init(&apt->loaded_dlls);
640  apt->ipidc = 0;
641  apt->refs = 1;
642  apt->remunk_exported = FALSE;
643  apt->oidc = 1;
645  DEBUG_SET_CRITSEC_NAME(&apt->cs, "apartment");
646 
648 
649  if (apt->multi_threaded)
650  {
651  /* FIXME: should be randomly generated by in an RPC call to rpcss */
652  apt->oxid = ((OXID)GetCurrentProcessId() << 32) | 0xcafe;
653  }
654  else
655  {
656  /* FIXME: should be randomly generated by in an RPC call to rpcss */
657  apt->oxid = ((OXID)GetCurrentProcessId() << 32) | GetCurrentThreadId();
658  }
659 
660  TRACE("Created apartment on OXID %s\n", wine_dbgstr_longlong(apt->oxid));
661 
662  list_add_head(&apts, &apt->entry);
663 
664  return apt;
665 }
#define DEBUG_SET_CRITSEC_NAME(cs, name)
BOOL multi_threaded
__WINE_SERVER_LIST_INLINE void list_add_head(struct list *list, struct list *elem)
Definition: list.h:96
static struct list apts
Definition: compobj.c:78
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
struct list proxies
DWORD WINAPI GetCurrentThreadId(VOID)
Definition: thread.c:458
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
struct list loaded_dlls
UINT64 OXID
Definition: marshal.c:87
struct list entry
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
Definition: list.h:149
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
struct list stubmgrs
CRITICAL_SECTION cs
DWORD WINAPI GetCurrentProcessId(VOID)
Definition: proc.c:1158
BOOL remunk_exported

Referenced by apartment_get_or_create().

◆ apartment_createwindowifneeded()

HRESULT apartment_createwindowifneeded ( struct apartment apt)

Definition at line 1704 of file compobj.c.

1705 {
1706  static INIT_ONCE class_init_once = INIT_ONCE_STATIC_INIT;
1707 
1708  if (apt->multi_threaded)
1709  return S_OK;
1710 
1711  if (!apt->win)
1712  {
1713  HWND hwnd;
1714 
1715  InitOnceExecuteOnce( &class_init_once, register_class, NULL, NULL );
1716 
1717  hwnd = CreateWindowW(wszAptWinClass, NULL, 0, 0, 0, 0, 0,
1718  HWND_MESSAGE, 0, hProxyDll, NULL);
1719  if (!hwnd)
1720  {
1721  ERR("CreateWindow failed with error %d\n", GetLastError());
1722  return HRESULT_FROM_WIN32(GetLastError());
1723  }
1725  /* someone beat us to it */
1727  }
1728 
1729  return S_OK;
1730 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
BOOL multi_threaded
#define INIT_ONCE_STATIC_INIT
Definition: winbase.h:593
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define HWND_MESSAGE
Definition: winuser.h:1196
BOOL WINAPI DestroyWindow(_In_ HWND)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4291
#define InterlockedCompareExchangePointer
Definition: interlocked.h:129
smooth NULL
Definition: ftsmooth.c:416
BOOL NTAPI InitOnceExecuteOnce(INIT_ONCE *once, PINIT_ONCE_FN func, void *param, void **context)
static BOOL WINAPI register_class(INIT_ONCE *once, void *param, void **context)
Definition: compobj.c:1681
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
static const WCHAR wszAptWinClass[]
Definition: compobj.c:481

Referenced by apartment_get_or_create(), apartment_hostobject_thread(), and marshal_object().

◆ apartment_find_mta()

static APARTMENT* apartment_find_mta ( void  )
static

Definition at line 726 of file compobj.c.

727 {
728  APARTMENT *apt;
729 
731 
732  if ((apt = MTA))
733  apartment_addref(apt);
734 
736 
737  return apt;
738 }
static DWORD apartment_addref(struct apartment *apt)
Definition: compobj.c:619
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static APARTMENT * MTA
Definition: compobj.c:76
static CRITICAL_SECTION csApartment
Definition: compobj.c:80
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by apartment_get_current_or_mta(), and CoGetApartmentType().

◆ apartment_findfromoxid()

APARTMENT* apartment_findfromoxid ( OXID  oxid,
BOOL  ref 
)

Definition at line 1276 of file compobj.c.

1277 {
1278  APARTMENT *result = NULL;
1279  struct list *cursor;
1280 
1283  {
1284  struct apartment *apt = LIST_ENTRY( cursor, struct apartment, entry );
1285  if (apt->oxid == oxid)
1286  {
1287  result = apt;
1288  if (ref) apartment_addref(result);
1289  break;
1290  }
1291  }
1293 
1294  return result;
1295 }
static DWORD apartment_addref(struct apartment *apt)
Definition: compobj.c:619
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
Definition: send.c:47
static struct list apts
Definition: compobj.c:78
#define LIST_FOR_EACH(cursor, list)
Definition: list.h:188
smooth NULL
Definition: ftsmooth.c:416
uint32_t entry
Definition: isohybrid.c:63
static CRITICAL_SECTION csApartment
Definition: compobj.c:80
Definition: _list.h:228
const char cursor[]
Definition: icontest.c:13
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define LIST_ENTRY(type)
Definition: queue.h:175
GLuint64EXT * result
Definition: glext.h:11304

Referenced by ipid_to_ifstub(), std_release_marshal_data(), and std_unmarshal_interface().

◆ apartment_findfromtid()

APARTMENT* apartment_findfromtid ( DWORD  tid)

Definition at line 1300 of file compobj.c.

1301 {
1302  APARTMENT *result = NULL;
1303  struct list *cursor;
1304 
1307  {
1308  struct apartment *apt = LIST_ENTRY( cursor, struct apartment, entry );
1309  if (apt->tid == tid)
1310  {
1311  result = apt;
1313  break;
1314  }
1315  }
1317 
1318  return result;
1319 }
static DWORD apartment_addref(struct apartment *apt)
Definition: compobj.c:619
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static struct list apts
Definition: compobj.c:78
#define LIST_FOR_EACH(cursor, list)
Definition: list.h:188
smooth NULL
Definition: ftsmooth.c:416
uint32_t entry
Definition: isohybrid.c:63
static CRITICAL_SECTION csApartment
Definition: compobj.c:80
Definition: _list.h:228
const char cursor[]
Definition: icontest.c:13
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define LIST_ENTRY(type)
Definition: queue.h:175
GLuint64EXT * result
Definition: glext.h:11304
static TfClientId tid

Referenced by ipid_to_ifstub().

◆ apartment_findmain()

static APARTMENT* apartment_findmain ( void  )
static

Definition at line 1324 of file compobj.c.

1325 {
1326  APARTMENT *result;
1327 
1329 
1332 
1334 
1335  return result;
1336 }
static DWORD apartment_addref(struct apartment *apt)
Definition: compobj.c:619
static APARTMENT * MainApartment
Definition: compobj.c:77
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static CRITICAL_SECTION csApartment
Definition: compobj.c:80
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
GLuint64EXT * result
Definition: glext.h:11304

Referenced by apartment_hostobject_in_hostapt().

◆ apartment_freeunusedlibraries()

static void apartment_freeunusedlibraries ( struct apartment apt,
DWORD  delay 
)
static

Definition at line 1132 of file compobj.c.

1133 {
1134  struct apartment_loaded_dll *entry, *next;
1135  EnterCriticalSection(&apt->cs);
1137  {
1138  if (entry->dll->DllCanUnloadNow && (entry->dll->DllCanUnloadNow() == S_OK))
1139  {
1140  DWORD real_delay = delay;
1141 
1142  if (real_delay == INFINITE)
1143  {
1144  /* DLLs that return multi-threaded objects aren't unloaded
1145  * straight away to cope for programs that have races between
1146  * last object destruction and threads in the DLLs that haven't
1147  * finished, despite DllCanUnloadNow returning S_OK */
1148  if (entry->multi_threaded)
1149  real_delay = 10 * 60 * 1000; /* 10 minutes */
1150  else
1151  real_delay = 0;
1152  }
1153 
1154  if (!real_delay || (entry->unload_time && ((int)(GetTickCount() - entry->unload_time) > 0)))
1155  {
1156  list_remove(&entry->entry);
1158  HeapFree(GetProcessHeap(), 0, entry);
1159  }
1160  else
1161  {
1162  entry->unload_time = GetTickCount() + real_delay;
1163  if (!entry->unload_time) entry->unload_time = 1;
1164  }
1165  }
1166  else if (entry->unload_time)
1167  entry->unload_time = 0;
1168  }
1169  LeaveCriticalSection(&apt->cs);
1170 }
#define TRUE
Definition: types.h:120
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
#define GetProcessHeap()
Definition: compat.h:403
unsigned long DWORD
Definition: ntddk_ex.h:95
static void COMPOBJ_DllList_ReleaseRef(OpenDll *entry, BOOL free_entry)
Definition: compobj.c:583
void delay(unsigned msec)
Definition: i386rtl.c:32
struct list loaded_dlls
uint32_t entry
Definition: isohybrid.c:63
#define S_OK
Definition: intsafe.h:59
static unsigned __int64 next
Definition: rand_nt.c:6
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INFINITE
Definition: serial.h:102
CRITICAL_SECTION cs
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by apartment_release(), and CoFreeUnusedLibrariesEx().

◆ apartment_get_current_or_mta()

APARTMENT* apartment_get_current_or_mta ( void  )

Definition at line 742 of file compobj.c.

743 {
744  APARTMENT *apt = COM_CurrentApt();
745  if (apt)
746  {
747  apartment_addref(apt);
748  return apt;
749  }
750  return apartment_find_mta();
751 }
static DWORD apartment_addref(struct apartment *apt)
Definition: compobj.c:619
static APARTMENT * COM_CurrentApt(void)
static APARTMENT * apartment_find_mta(void)
Definition: compobj.c:726

Referenced by ClientIdentity_QueryMultipleInterfaces(), ClientRpcChannelBuffer_SendReceive(), CoCreateInstanceEx(), CoDisconnectObject(), CoGetClassObject(), CoGetContextToken(), CoGetPSClsid(), CoLockObjectExternal(), CoRegisterClassObject(), CoRegisterPSClsid(), CoRevokeClassObject(), proxy_manager_get_remunknown(), std_unmarshal_interface(), and StdMarshalImpl_MarshalInterface().

◆ apartment_get_or_create()

static APARTMENT* apartment_get_or_create ( DWORD  model)
static

Definition at line 670 of file compobj.c.

671 {
672  APARTMENT *apt = COM_CurrentApt();
673 
674  if (!apt)
675  {
676  if (model & COINIT_APARTMENTTHREADED)
677  {
679 
680  apt = apartment_construct(model);
681  if (!MainApartment)
682  {
683  MainApartment = apt;
684  apt->main = TRUE;
685  TRACE("Created main-threaded apartment with OXID %s\n", wine_dbgstr_longlong(apt->oxid));
686  }
687 
689 
690  if (apt->main)
692  }
693  else
694  {
696 
697  /* The multi-threaded apartment (MTA) contains zero or more threads interacting
698  * with free threaded (ie thread safe) COM objects. There is only ever one MTA
699  * in a process */
700  if (MTA)
701  {
702  TRACE("entering the multithreaded apartment %s\n", wine_dbgstr_longlong(MTA->oxid));
704  }
705  else
706  MTA = apartment_construct(model);
707 
708  apt = MTA;
709 
711  }
712  COM_CurrentInfo()->apt = apt;
713  }
714 
715  return apt;
716 }
static DWORD apartment_addref(struct apartment *apt)
Definition: compobj.c:619
#define TRUE
Definition: types.h:120
HRESULT apartment_createwindowifneeded(struct apartment *apt)
Definition: compobj.c:1704
static APARTMENT * apartment_construct(DWORD model)
Definition: compobj.c:628
static APARTMENT * MainApartment
Definition: compobj.c:77
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static struct oletls * COM_CurrentInfo(void)
static APARTMENT * COM_CurrentApt(void)
static APARTMENT * MTA
Definition: compobj.c:76
#define TRACE(s)
Definition: solgame.cpp:4
static CRITICAL_SECTION csApartment
Definition: compobj.c:80
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by enter_apartment().

◆ apartment_getclassobject()

static HRESULT apartment_getclassobject ( struct apartment apt,
LPCWSTR  dllpath,
BOOL  apartment_threaded,
REFCLSID  rclsid,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1340 of file compobj.c.

1343 {
1344  static const WCHAR wszOle32[] = {'o','l','e','3','2','.','d','l','l',0};
1345  HRESULT hr = S_OK;
1346  BOOL found = FALSE;
1348 
1349  if (!wcsicmp(dllpath, wszOle32))
1350  {
1351  /* we don't need to control the lifetime of this dll, so use the local
1352  * implementation of DllGetClassObject directly */
1353  TRACE("calling ole32!DllGetClassObject\n");
1354  hr = DllGetClassObject(rclsid, riid, ppv);
1355 
1356  if (hr != S_OK)
1357  ERR("DllGetClassObject returned error 0x%08x for dll %s\n", hr, debugstr_w(dllpath));
1358 
1359  return hr;
1360  }
1361 
1362  EnterCriticalSection(&apt->cs);
1363 
1366  {
1367  TRACE("found %s already loaded\n", debugstr_w(dllpath));
1368  found = TRUE;
1369  break;
1370  }
1371 
1372  if (!found)
1373  {
1375  if (!apartment_loaded_dll)
1376  hr = E_OUTOFMEMORY;
1377  if (SUCCEEDED(hr))
1378  {
1382  if (FAILED(hr))
1384  }
1385  if (SUCCEEDED(hr))
1386  {
1387  TRACE("added new loaded dll %s\n", debugstr_w(dllpath));
1389  }
1390  }
1391 
1392  LeaveCriticalSection(&apt->cs);
1393 
1394  if (SUCCEEDED(hr))
1395  {
1396  /* one component being multi-threaded overrides any number of
1397  * apartment-threaded components */
1398  if (!apartment_threaded)
1400 
1401  TRACE("calling DllGetClassObject %p\n", apartment_loaded_dll->dll->DllGetClassObject);
1402  /* OK: get the ClassObject */
1404 
1405  if (hr != S_OK)
1406  ERR("DllGetClassObject returned error 0x%08x for dll %s\n", hr, debugstr_w(dllpath));
1407  }
1408 
1409  return hr;
1410 }
#define TRUE
Definition: types.h:120
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static HRESULT COMPOBJ_DllList_Add(LPCWSTR library_name, OpenDll **ret)
Definition: compobj.c:508
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: shsvcs.c:38
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
WCHAR dllpath[MAX_PATH]
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
LPWSTR library_name
Definition: compobj.c:455
struct list entry
Definition: compobj.c:475
struct list loaded_dlls
uint32_t entry
Definition: isohybrid.c:63
#define wcsicmp
Definition: string.h:1152
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
CRITICAL_SECTION cs
#define HeapFree(x, y, z)
Definition: compat.h:402
#define SUCCEEDED(hr)
Definition: intsafe.h:57
DllGetClassObjectFunc DllGetClassObject
Definition: compobj.c:457

Referenced by apartment_hostobject(), and get_inproc_class_object().

◆ apartment_getwindow()

HWND apartment_getwindow ( const struct apartment apt)

Definition at line 1733 of file compobj.c.

1734 {
1735  assert(!apt->multi_threaded);
1736  return apt->win;
1737 }
BOOL multi_threaded
#define assert(x)
Definition: debug.h:53

Referenced by apartment_hostobject_in_hostapt(), apartment_hostobject_thread(), ClientRpcChannelBuffer_GetBuffer(), and dispatch_rpc().

◆ apartment_hostobject()

static HRESULT apartment_hostobject ( struct apartment apt,
const struct host_object_params params 
)
static

Definition at line 1468 of file compobj.c.

1470 {
1471  IUnknown *object;
1472  HRESULT hr;
1473  static const LARGE_INTEGER llZero;
1474  WCHAR dllpath[MAX_PATH+1];
1475 
1476  TRACE("clsid %s, iid %s\n", debugstr_guid(&params->clsid), debugstr_guid(&params->iid));
1477 
1479  {
1480  /* failure: CLSID is not found in registry */
1481  WARN("class %s not registered inproc\n", debugstr_guid(&params->clsid));
1482  return REGDB_E_CLASSNOTREG;
1483  }
1484 
1485  hr = apartment_getclassobject(apt, dllpath, params->apartment_threaded,
1486  &params->clsid, &params->iid, (void **)&object);
1487  if (FAILED(hr))
1488  return hr;
1489 
1490  hr = CoMarshalInterface(params->stream, &params->iid, object, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
1491  if (FAILED(hr))
1492  IUnknown_Release(object);
1493  IStream_Seek(params->stream, llZero, STREAM_SEEK_SET, NULL);
1494 
1495  return hr;
1496 }
HRESULT hr
Definition: shlfolder.c:183
static BOOL get_object_dll_path(const struct class_reg_data *regdata, WCHAR *dst, DWORD dstlen)
Definition: compobj.c:1413
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT apartment_getclassobject(struct apartment *apt, LPCWSTR dllpath, BOOL apartment_threaded, REFCLSID rclsid, REFIID riid, void **ppv)
Definition: compobj.c:1340
GLenum const GLfloat * params
Definition: glext.h:5645
smooth NULL
Definition: ftsmooth.c:416
static const LARGE_INTEGER llZero
Definition: moniker.c:1113
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
WCHAR dllpath[MAX_PATH]
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
#define MAX_PATH
Definition: compat.h:26
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:2696
#define ARRAY_SIZE(a)
Definition: main.h:24
HRESULT WINAPI CoMarshalInterface(IStream *pStream, REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags)
Definition: marshal.c:1876
void * object
Definition: jmemsys.h:48

Referenced by apartment_hostobject_thread(), and apartment_wndproc().

◆ apartment_hostobject_in_hostapt()

static HRESULT apartment_hostobject_in_hostapt ( struct apartment apt,
BOOL  multi_threaded,
BOOL  main_apartment,
const struct class_reg_data regdata,
REFCLSID  rclsid,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1573 of file compobj.c.

1576 {
1577  struct host_object_params params;
1578  HWND apartment_hwnd = NULL;
1579  DWORD apartment_tid = 0;
1580  HRESULT hr;
1581 
1582  if (!multi_threaded && main_apartment)
1583  {
1584  APARTMENT *host_apt = apartment_findmain();
1585  if (host_apt)
1586  {
1587  apartment_hwnd = apartment_getwindow(host_apt);
1588  apartment_release(host_apt);
1589  }
1590  }
1591 
1592  if (!apartment_hwnd)
1593  {
1594  EnterCriticalSection(&apt->cs);
1595 
1596  if (!apt->host_apt_tid)
1597  {
1598  struct host_thread_params thread_params;
1599  HANDLE handles[2];
1600  DWORD wait_value;
1601 
1602  thread_params.threading_model = multi_threaded ? COINIT_MULTITHREADED : COINIT_APARTMENTTHREADED;
1603  handles[0] = thread_params.ready_event = CreateEventW(NULL, FALSE, FALSE, NULL);
1604  thread_params.apartment_hwnd = NULL;
1605  handles[1] = CreateThread(NULL, 0, apartment_hostobject_thread, &thread_params, 0, &apt->host_apt_tid);
1606  if (!handles[1])
1607  {
1608  CloseHandle(handles[0]);
1609  LeaveCriticalSection(&apt->cs);
1610  return E_OUTOFMEMORY;
1611  }
1612  wait_value = WaitForMultipleObjects(2, handles, FALSE, INFINITE);
1613  CloseHandle(handles[0]);
1614  CloseHandle(handles[1]);
1615  if (wait_value == WAIT_OBJECT_0)
1616  apt->host_apt_hwnd = thread_params.apartment_hwnd;
1617  else
1618  {
1619  LeaveCriticalSection(&apt->cs);
1620  return E_OUTOFMEMORY;
1621  }
1622  }
1623 
1624  if (multi_threaded || !main_apartment)
1625  {
1627  apartment_tid = apt->host_apt_tid;
1628  }
1629 
1630  LeaveCriticalSection(&apt->cs);
1631  }
1632 
1633  /* another thread may have become the main apartment in the time it took
1634  * us to create the thread for the host apartment */
1635  if (!apartment_hwnd && !multi_threaded && main_apartment)
1636  {
1637  APARTMENT *host_apt = apartment_findmain();
1638  if (host_apt)
1639  {
1640  apartment_hwnd = apartment_getwindow(host_apt);
1641  apartment_release(host_apt);
1642  }
1643  }
1644 
1645  params.regdata = *regdata;
1646  params.clsid = *rclsid;
1647  params.iid = *riid;
1648  hr = CreateStreamOnHGlobal(NULL, TRUE, &params.stream);
1649  if (FAILED(hr))
1650  return hr;
1651  params.apartment_threaded = !multi_threaded;
1652  if (multi_threaded)
1653  {
1654  params.hr = S_OK;
1655  params.event = CreateEventW(NULL, FALSE, FALSE, NULL);
1656  if (!PostThreadMessageW(apartment_tid, DM_HOSTOBJECT, 0, (LPARAM)&params))
1657  hr = E_OUTOFMEMORY;
1658  else
1659  {
1661  hr = params.hr;
1662  }
1663  CloseHandle(params.event);
1664  }
1665  else
1666  {
1667  if (!apartment_hwnd)
1668  {
1669  ERR("host apartment didn't create window\n");
1670  hr = E_OUTOFMEMORY;
1671  }
1672  else
1674  }
1675  if (SUCCEEDED(hr))
1676  hr = CoUnmarshalInterface(params.stream, riid, ppv);
1677  IStream_Release(params.stream);
1678  return hr;
1679 }
DWORD host_apt_tid
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
Definition: marshal.c:1981
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:406
static struct object_header ** handles
Definition: handle.c:45
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
#define DM_HOSTOBJECT
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
Definition: synch.c:151
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:651
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
HWND host_apt_hwnd
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
GLenum const GLfloat * params
Definition: glext.h:5645
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:136
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define WAIT_OBJECT_0
Definition: winbase.h:387
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
HWND apartment_getwindow(const struct apartment *apt)
Definition: compobj.c:1733
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static DWORD CALLBACK apartment_hostobject_thread(LPVOID p)
Definition: compobj.c:1521
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INFINITE
Definition: serial.h:102
CRITICAL_SECTION cs
BOOL WINAPI PostThreadMessageW(_In_ DWORD, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SUCCEEDED(hr)
Definition: intsafe.h:57
static APARTMENT * apartment_findmain(void)
Definition: compobj.c:1324

Referenced by get_inproc_class_object().

◆ apartment_hostobject_thread()

static DWORD CALLBACK apartment_hostobject_thread ( LPVOID  p)
static

Definition at line 1521 of file compobj.c.

1522 {
1523  struct host_thread_params *params = p;
1524  MSG msg;
1525  HRESULT hr;
1526  struct apartment *apt;
1527 
1528  TRACE("\n");
1529 
1530  hr = CoInitializeEx(NULL, params->threading_model);
1531  if (FAILED(hr)) return hr;
1532 
1533  apt = COM_CurrentApt();
1534  if (params->threading_model == COINIT_APARTMENTTHREADED)
1535  {
1537  params->apartment_hwnd = apartment_getwindow(apt);
1538  }
1539  else
1540  params->apartment_hwnd = NULL;
1541 
1542  /* force the message queue to be created before signaling parent thread */
1544 
1545  SetEvent(params->ready_event);
1546  params = NULL; /* can't touch params after here as it may be invalid */
1547 
1548  while (GetMessageW(&msg, NULL, 0, 0))
1549  {
1550  if (!msg.hwnd && (msg.message == DM_HOSTOBJECT))
1551  {
1552  struct host_object_params *obj_params = (struct host_object_params *)msg.lParam;
1553  obj_params->hr = apartment_hostobject(apt, obj_params);
1554  SetEvent(obj_params->event);
1555  }
1556  else
1557  {
1560  }
1561  }
1562 
1563  TRACE("exiting\n");
1564 
1565  CoUninitialize();
1566 
1567  return S_OK;
1568 }
BOOL WINAPI TranslateMessage(_In_ const MSG *)
HRESULT apartment_createwindowifneeded(struct apartment *apt)
Definition: compobj.c:1704
HRESULT hr
Definition: shlfolder.c:183
#define DM_HOSTOBJECT
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:733
static APARTMENT * COM_CurrentApt(void)
#define PM_NOREMOVE
Definition: winuser.h:1181
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
GLenum const GLfloat * params
Definition: glext.h:5645
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
HWND apartment_getwindow(const struct apartment *apt)
Definition: compobj.c:1733
#define WM_USER
Definition: winuser.h:1877
#define S_OK
Definition: intsafe.h:59
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
static HRESULT apartment_hostobject(struct apartment *apt, const struct host_object_params *params)
Definition: compobj.c:1468
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
#define msg(x)
Definition: auth_time.c:54
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by apartment_hostobject_in_hostapt().

◆ apartment_is_model()

static BOOL apartment_is_model ( const APARTMENT apt,
DWORD  model 
)
inlinestatic

Definition at line 718 of file compobj.c.

719 {
720  return (apt->multi_threaded == !(model & COINIT_APARTMENTTHREADED));
721 }
BOOL multi_threaded

Referenced by enter_apartment().

◆ apartment_release()

DWORD apartment_release ( struct apartment apt)

Definition at line 1172 of file compobj.c.

1173 {
1174  DWORD ret;
1175 
1177 
1178  ret = InterlockedDecrement(&apt->refs);
1179  TRACE("%s: after = %d\n", wine_dbgstr_longlong(apt->oxid), ret);
1180 
1181  if (apt->being_destroyed)
1182  {
1184  return ret;
1185  }
1186 
1187  /* destruction stuff that needs to happen under csApartment CS */
1188  if (ret == 0)
1189  {
1190  apt->being_destroyed = TRUE;
1191  if (apt == MTA) MTA = NULL;
1192  else if (apt == MainApartment) MainApartment = NULL;
1193  list_remove(&apt->entry);
1194  }
1195 
1197 
1198  if (ret == 0)
1199  {
1200  struct list *cursor, *cursor2;
1201 
1202  TRACE("destroying apartment %p, oxid %s\n", apt, wine_dbgstr_longlong(apt->oxid));
1203 
1204  if(apt->local_server) {
1207 
1208  memset(&zero, 0, sizeof(zero));
1209  IStream_Seek(local_server->marshal_stream, zero, STREAM_SEEK_SET, NULL);
1210  CoReleaseMarshalData(local_server->marshal_stream);
1211  IStream_Release(local_server->marshal_stream);
1212  local_server->marshal_stream = NULL;
1213 
1214  apt->local_server = NULL;
1215  local_server->apt = NULL;
1216  IServiceProvider_Release(&local_server->IServiceProvider_iface);
1217  }
1218 
1219  /* Release the references to the registered class objects */
1220  COM_RevokeAllClasses(apt);
1221 
1222  /* no locking is needed for this apartment, because no other thread
1223  * can access it at this point */
1224 
1226 
1227  if (apt->win) DestroyWindow(apt->win);
1228  if (apt->host_apt_tid) PostThreadMessageW(apt->host_apt_tid, WM_QUIT, 0, 0);
1229 
1230  LIST_FOR_EACH_SAFE(cursor, cursor2, &apt->stubmgrs)
1231  {
1232  struct stub_manager *stubmgr = LIST_ENTRY(cursor, struct stub_manager, entry);
1233  /* release the implicit reference given by the fact that the
1234  * stub has external references (it must do since it is in the
1235  * stub manager list in the apartment and all non-apartment users
1236  * must have a ref on the apartment and so it cannot be destroyed).
1237  */
1238  stub_manager_int_release(stubmgr);
1239  }
1240 
1241  /* if this assert fires, then another thread took a reference to a
1242  * stub manager without taking a reference to the containing
1243  * apartment, which it must do. */
1245 
1246  if (apt->filter) IMessageFilter_Release(apt->filter);
1247 
1248  /* free as many unused libraries as possible... */
1250 
1251  /* ... and free the memory for the apartment loaded dll entry and
1252  * release the dll list reference without freeing the library for the
1253  * rest */
1254  while ((cursor = list_head(&apt->loaded_dlls)))
1255  {
1260  }
1261 
1263  DeleteCriticalSection(&apt->cs);
1264 
1265  HeapFree(GetProcessHeap(), 0, apt);
1266  }
1267 
1268  return ret;
1269 }
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
Definition: marshal.c:2055
DWORD host_apt_tid
#define LIST_FOR_EACH_SAFE(cursor, cursor2, list)
Definition: list.h:192
#define TRUE
Definition: types.h:120
static void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
Definition: compobj.c:1132
ULONG stub_manager_int_release(struct stub_manager *This) DECLSPEC_HIDDEN
Definition: stubmanager.c:311
APARTMENT * apt
static APARTMENT * MainApartment
Definition: compobj.c:77
#define WM_QUIT
Definition: winuser.h:1605
#define assert(x)
Definition: debug.h:53
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
BOOL WINAPI DestroyWindow(_In_ HWND)
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
Definition: list.h:131
#define DEBUG_CLEAR_CRITSEC_NAME(cs)
static APARTMENT * MTA
Definition: compobj.c:76
smooth NULL
Definition: ftsmooth.c:416
LocalServer * local_server
static void COM_RevokeAllClasses(const struct apartment *apt)
Definition: compobj.c:764
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
unsigned long DWORD
Definition: ntddk_ex.h:95
static double zero
Definition: j0_y0.c:96
int ret
static void COMPOBJ_DllList_ReleaseRef(OpenDll *entry, BOOL free_entry)
Definition: compobj.c:583
#define InterlockedDecrement
Definition: armddk.h:52
struct list loaded_dlls
uint32_t entry
Definition: isohybrid.c:63
static CRITICAL_SECTION csApartment
Definition: compobj.c:80
Definition: _list.h:228
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
Definition: list.h:143
HRESULT apartment_disconnectproxies(struct apartment *apt) DECLSPEC_HIDDEN
Definition: marshal.c:1226
const char cursor[]
Definition: icontest.c:13
struct list entry
LPMESSAGEFILTER filter
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
struct list stubmgrs
BOOL being_destroyed
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define LIST_ENTRY(type)
Definition: queue.h:175
CRITICAL_SECTION cs
#define memset(x, y, z)
Definition: compat.h:39
BOOL WINAPI PostThreadMessageW(_In_ DWORD, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by apartment_hostobject_in_hostapt(), ClientIdentity_QueryMultipleInterfaces(), ClientRpcChannelBuffer_GetBuffer(), ClientRpcChannelBuffer_SendReceive(), CoCreateInstanceEx(), CoDisconnectObject(), CoGetApartmentType(), CoGetClassObject(), CoGetContextToken(), CoGetPSClsid(), CoLockObjectExternal(), COM_TlsDestroy(), CoRegisterClassObject(), CoRegisterPSClsid(), CoRevokeClassObject(), dispatch_rpc(), ipid_to_ifstub(), leave_apartment(), proxy_manager_get_remunknown(), RemUnknown_RemAddRef(), RemUnknown_RemQueryInterface(), RemUnknown_RemRelease(), std_release_marshal_data(), std_unmarshal_interface(), and StdMarshalImpl_MarshalInterface().

◆ apartment_wndproc()

static LRESULT CALLBACK apartment_wndproc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1498 of file compobj.c.

1499 {
1500  switch (msg)
1501  {
1502  case DM_EXECUTERPC:
1504  return 0;
1505  case DM_HOSTOBJECT:
1506  return apartment_hostobject(COM_CurrentApt(), (const struct host_object_params *)lParam);
1507  default:
1508  return DefWindowProcW(hWnd, msg, wParam, lParam);
1509  }
1510 }
#define DM_HOSTOBJECT
HWND hWnd
Definition: settings.c:17
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static APARTMENT * COM_CurrentApt(void)
void RPC_ExecuteCall(struct dispatch_params *params) DECLSPEC_HIDDEN
Definition: rpc.c:1327
static HRESULT apartment_hostobject(struct apartment *apt, const struct host_object_params *params)
Definition: compobj.c:1468
#define msg(x)
Definition: auth_time.c:54
#define DM_EXECUTERPC
LPARAM lParam
Definition: combotst.c:139

Referenced by register_class().

◆ clsid_from_string_reg()

static HRESULT clsid_from_string_reg ( LPCOLESTR  progid,
CLSID clsid 
)
static

Definition at line 2290 of file compobj.c.

2291 {
2292  static const WCHAR clsidW[] = { '\\','C','L','S','I','D',0 };
2293  WCHAR buf2[CHARS_IN_GUID];
2294  LONG buf2len = sizeof(buf2);
2295  HKEY xhkey;
2296  WCHAR *buf;
2297 
2298  memset(clsid, 0, sizeof(*clsid));
2299  buf = HeapAlloc( GetProcessHeap(),0,(lstrlenW(progid)+8) * sizeof(WCHAR) );
2300  if (!buf) return E_OUTOFMEMORY;
2301  lstrcpyW( buf, progid );
2302  lstrcatW( buf, clsidW );
2304  {
2306  WARN("couldn't open key for ProgID %s\n", debugstr_w(progid));
2307  return CO_E_CLASSSTRING;
2308  }
2310 
2311  if (RegQueryValueW(xhkey,NULL,buf2,&buf2len))
2312  {
2313  RegCloseKey(xhkey);
2314  WARN("couldn't query clsid value for ProgID %s\n", debugstr_w(progid));
2315  return CO_E_CLASSSTRING;
2316  }
2317  RegCloseKey(xhkey);
2318  return guid_from_string(buf2, clsid) ? S_OK : CO_E_CLASSSTRING;
2319 }
#define MAXIMUM_ALLOWED
Definition: nt_native.h:83
static BOOL guid_from_string(LPCWSTR s, GUID *id)
Definition: compobj.c:2238
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define WARN(fmt,...)
Definition: debug.h:111
#define CHARS_IN_GUID
#define lstrlenW
Definition: compat.h:415
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:403
static const WCHAR clsidW[]
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4254
REFCLSID clsid
Definition: msctf.c:82
#define S_OK
Definition: intsafe.h:59
#define lstrcpyW
Definition: compat.h:414
LSTATUS open_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
Definition: compobj.c:420
#define progid(str)
Definition: exdisp.idl:31
#define CO_E_CLASSSTRING
Definition: winerror.h:2806
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define memset(x, y, z)
Definition: compat.h:39
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by CLSIDFromProgID(), and CLSIDFromString().

◆ CLSIDFromProgID()

HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID ( LPCOLESTR  progid,
LPCLSID  clsid 
)

Definition at line 2602 of file compobj.c.

2603 {
2604  ACTCTX_SECTION_KEYED_DATA data;
2605 
2606  if (!progid || !clsid)
2607  return E_INVALIDARG;
2608 
2609  data.cbSize = sizeof(data);
2610  if (FindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION,
2611  progid, &data))
2612  {
2613  struct progidredirect_data *progiddata = (struct progidredirect_data*)data.lpData;
2614  CLSID *alias = (CLSID*)((BYTE*)data.lpSectionBase + progiddata->clsid_offset);
2615  *clsid = *alias;
2616  return S_OK;
2617  }
2618 
2620 }
static HRESULT clsid_from_string_reg(LPCOLESTR progid, CLSID *clsid)
Definition: compobj.c:2290
BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, LPCWSTR lpSearchStr, PACTCTX_SECTION_KEYED_DATA pInfo)
Definition: actctx.c:156
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
REFCLSID clsid
Definition: msctf.c:82
unsigned char BYTE
Definition: mem.h:68
const WCHAR * alias
Definition: main.c:67
#define S_OK
Definition: intsafe.h:59
#define progid(str)
Definition: exdisp.idl:31

Referenced by call_script(), CLSIDFromProgIDEx(), 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,
LPCLSID  clsid 
)

Definition at line 2625 of file compobj.c.

2626 {
2627  FIXME("%s,%p: semi-stub\n", debugstr_w(progid), clsid);
2628 
2629  return CLSIDFromProgID(progid, clsid);
2630 }
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID(LPCOLESTR progid, LPCLSID clsid)
Definition: compobj.c:2602
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
REFCLSID clsid
Definition: msctf.c:82
#define progid(str)
Definition: exdisp.idl:31

◆ CLSIDFromString()

HRESULT WINAPI CLSIDFromString ( LPCOLESTR  idstr,
LPCLSID  id 
)

Definition at line 2338 of file compobj.c.

2339 {
2341  CLSID tmp_id;
2342 
2343  if (!id)
2344  return E_INVALIDARG;
2345 
2346  if (guid_from_string(idstr, id))
2347  return S_OK;
2348 
2349  /* It appears a ProgID is also valid */
2350  ret = clsid_from_string_reg(idstr, &tmp_id);
2351  if(SUCCEEDED(ret))
2352  *id = tmp_id;
2353 
2354  return ret;
2355 }
static HRESULT clsid_from_string_reg(LPCOLESTR progid, CLSID *clsid)
Definition: compobj.c:2290
static BOOL guid_from_string(LPCWSTR s, GUID *id)
Definition: compobj.c:2238
#define E_INVALIDARG
Definition: ddrawi.h:101
LONG HRESULT
Definition: typedefs.h:77
int ret
#define S_OK
Definition: intsafe.h:59
#define CO_E_CLASSSTRING
Definition: winerror.h:2806
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by ACTION_MsiPublishAssemblies(), ACTION_PublishFeatures(), build_directshowfilters_tree(), CategoryMgr_FindClosestCategory(), CATIDEnumGUID_Next(), CLSIDEnumGUID_Next(), CLSIDFromStringWrap(), CoGetTreatAsClass(), COMCAT_IEnumCATEGORYINFO_Next(), ComponentInfo_GetGuidList(), ComponentInfo_GetGUIDValue(), CoTreatAsClass(), CreateComponentEnumerator(), CreateNotificationObject(), DEVENUM_IMediaCatMoniker_BindToObject(), DEVENUM_IParseDisplayName_ParseDisplayName(), DEVENUM_ReadPinTypes(), DirectPlayEnumerateAW(), do_enum(), DP_LoadSP(), EnumClientServiceProtocol(), CDefaultContextMenu::EnumerateDynamicContextHandlerForKey(), CNetConnectionManager::EnumerateINetConnections(), EnumerateNetworkAdapter(), EnumTfLanguageProfiles_Next(), FilterMapper3_EnumMatchingFilters(), FilterMapper_EnumMatchingFilters(), get_content_type(), get_mime_clsid(), get_mime_filter(), get_protocol_cf(), get_ps_clsid_from_registry(), GetClassMediaFile(), GetCLSIDForFileType(), GetFilterInfo(), CQueryAssociations::GetString(), GUIDFromStringA(), GUIDFromStringW(), IDirectMusic8Impl_GetDefaultPort(), IDirectPlay4AImpl_EnumConnections(), IDirectPlayLobby3AImpl_EnumAddressTypes(), IDirectPlayLobby3AImpl_EnumLocalApplications(), IEnumDMO_fnNext(), InitIconOverlays(), InitShellServices(), InputProcessorProfiles_GetDefaultLanguageProfile(), InternetProtocolSink_ReportProgress(), IsProductCode(), ITERATE_RegisterTypeLibraries(), ITERATE_UnregisterTypeLibraries(), load_devices_from_reg(), MMDevPropStore_GetAt(), msi_create_component_advertise_string(), next_LanguageProfile(), OleGetAutoConvert(), parse_classid(), process_extensions(), ProfilesEnumGuid_Next(), ATL::CRegKey::QueryGUIDValue(), read_types(), register_legacy_filters(), SSOThread::Run(), CShellLink::SetAdvertiseInfo(), CDeviceNode::SetupNode(), SHCLSIDFromStringA(), SHCLSIDFromStringW(), SHDOCVW_GetShellInstanceObjectClassObject(), SHELL32_GetCLSIDForDirectory(), ShellExecute_FromContextMenu(), 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 4162 of file compobj.c.

4163 {
4164  ULONG refs;
4165 
4166  TRACE("\n");
4167 
4171 
4172  TRACE("refs before: %d\n", refs - 1);
4173 
4174  return refs;
4175 }
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static CRITICAL_SECTION csRegisteredClassList
Definition: compobj.c:228
#define TRACE(s)
Definition: solgame.cpp:4
static LONG s_COMServerProcessReferences
Definition: compobj.c:204
unsigned int ULONG
Definition: retypes.h:1
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

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

◆ CoAllowSetForegroundWindow()

HRESULT WINAPI CoAllowSetForegroundWindow ( IUnknown pUnk,
void pvReserved 
)

Definition at line 4234 of file compobj.c.

4235 {
4236  FIXME("(%p, %p): stub\n", pUnk, pvReserved);
4237  return S_OK;
4238 }
#define FIXME(fmt,...)
Definition: debug.h:110
static LPCSTR DWORD void * pvReserved
Definition: str.c:196
#define S_OK
Definition: intsafe.h:59
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30

◆ CoBuildVersion()

DWORD WINAPI CoBuildVersion ( void  )

Definition at line 1774 of file compobj.c.

1775 {
1776  TRACE("Returning version %d, build %d.\n", rmm, rup);
1777  return (rmm<<16)+rup;
1778 }
#define rmm
Definition: ole2ver.h:41
#define rup
Definition: ole2ver.h:42
#define TRACE(s)
Definition: solgame.cpp:4

◆ CoCopyProxy()

HRESULT WINAPI CoCopyProxy ( IUnknown pProxy,
IUnknown **  ppCopy 
)

Definition at line 4346 of file compobj.c.

4347 {
4348  IClientSecurity *pCliSec;
4349  HRESULT hr;
4350 
4351  TRACE("%p\n", pProxy);
4352 
4353  hr = IUnknown_QueryInterface(pProxy, &IID_IClientSecurity, (void **)&pCliSec);
4354  if (SUCCEEDED(hr))
4355  {
4356  hr = IClientSecurity_CopyProxy(pCliSec, pProxy, ppCopy);
4357  IClientSecurity_Release(pCliSec);
4358  }
4359 
4360  if (FAILED(hr)) ERR("-- failed with 0x%08x\n", hr);
4361  return hr;
4362 }
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define ERR(fmt,...)
Definition: debug.h:109
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ CoCreateGuid()

HRESULT WINAPI CoCreateGuid ( GUID pguid)

Definition at line 2206 of file compobj.c.

2207 {
2208  DWORD status;
2209 
2210  if(!pguid) return E_INVALIDARG;
2211 
2212  status = UuidCreate(pguid);
2213  if (status == RPC_S_OK || status == RPC_S_UUID_LOCAL_ONLY) return S_OK;
2214  return HRESULT_FROM_WIN32( status );
2215 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_INVALIDARG
Definition: ddrawi.h:101
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:59
RPC_STATUS WINAPI UuidCreate(UUID *Uuid)
Definition: rpcrt4_main.c:303
static SERVICE_STATUS status
Definition: service.c:31
#define RPC_S_UUID_LOCAL_ONLY
Definition: winerror.h:1131
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

Referenced by BackgroundCopyJobConstructor(), COM_CurrentCausalityId(), compose_base85_guid(), create_test_guid(), do_msidbCustomActionTypeDll(), do_msidbCustomActionTypeScript(), DP_SetSessionDesc(), main(), test_ClientId(), test_CoCreateGuid(), test_fm2_enummatchingfilters(), test_legacy_filter_registration(), test_NewWorkItem(), test_register_filter_with_null_clsMinorType(), test_session(), test_session_creation(), test_TfGuidAtom(), test_volume_dependence(), and ThreadMgr_ActivateEx().

◆ CoCreateInstance()

HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance ( REFCLSID  rclsid,
LPUNKNOWN  pUnkOuter,
DWORD  dwClsContext,
REFIID  iid,
LPVOID ppv 
)

Definition at line 3325 of file compobj.c.

3331 {
3332  MULTI_QI multi_qi = { iid };
3333  HRESULT hres;
3334 
3335  TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid),
3336  pUnkOuter, dwClsContext, debugstr_guid(iid), ppv);
3337 
3338  if (ppv==0)
3339  return E_POINTER;
3340 
3341  hres = CoCreateInstanceEx(rclsid, pUnkOuter, dwClsContext, NULL, 1, &multi_qi);
3342  *ppv = multi_qi.pItf;
3343  return hres;
3344 }
REFIID LPVOID * ppv
Definition: atlbase.h:39
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, COSERVERINFO *pServerInfo, ULONG cmq, MULTI_QI *pResults)
Definition: compobj.c:3387
#define E_POINTER
Definition: winerror.h:2365

Referenced by _CBandSite_CreateInstance(), _CBandSiteMenu_CreateInstance(), _create_object(), _CStartMenu_CreateInstance(), activate_given_ts(), add_favs_to_menu(), AMovieDllRegisterServer2(), AtlAxCreateControlLicEx(), AtlRegisterClassCategoriesHelper(), ATL::AtlRegisterClassCategoriesHelper(), 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(), 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_configuration(), create_doc_from_url(), create_document(), create_dsound_renderer(), create_engine(), create_graph(), 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(), CreateCShellMenu(), CreateDropTarget(), CreateExtractIcon(), CreateFilterInstanceAndLoadFile(), SIfacePtr< IShellLink >::CreateInstance(), CreateInternetShortcut(), CreateNotificationObject(), CreateObjectsFromPersistFolder(), CInputPin::CreatePin(), COutputPin::CreatePin(), CreatePosPassThru(), CreateShellLink(), CreateShortcut(), CSearchBar_CreateInstance(), D3DXGetImageInfoFromFileInMemory(), D3DXLoadSurfaceFromFileInMemory(), D3DXSaveSurfaceToFileInMemory(), DefaultHandler_Construct(), DefaultHandler_Run(), determine_patch_sequence(), DEVENUM_IMediaCatMoniker_BindToObject(), device_tests(), DllRegisterServer(), do_child(), do_enum(), DoCreateShortcut(), CShellBrowser::DoFolderOptions(), 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(), 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(), initialize(), CNetConnectionPropertyUi::InitializeLANPropertiesUIDlg(), InitializeObjectPicker(), InitializeRemoteRegistryPicker(), InitializeSecurity(), InitIconOverlays(), CSysTray::InitNetShell(), InitShellServices(), InstallTypicalNetworkSettings(), InstanceObjectFactory_IClassFactory_CreateInstance(), CBandSiteMenu::InvokeCommand(), is_firewall_enabled(), ITERATE_CreateShortcuts(), ITypeInfo_fnCreateInstance(), LoadAndInitialize(), CComCatCachedCategory::LoadFromComCatMgr(), CShellBrowser::LoadHistory(), CInputPin::LoadProxyPlugins(), COutputPin::LoadProxyPlugins(), CKsProxy::LoadProxyPlugins(), LoadShellLinkConsoleInfo(), locator_ConnectServer(), main_test(), MCIQTZ_mciOpen(), MediaDet_put_Filename(), MkProtocol_StartEx(), MMDevice_Activate(), MsiGetShortcutTargetW(), navigate_new_window(), OleCreate(), OleCreatePropertyFrameIndirect(), OleLoad(), OleLoadFromStream(), OLEPictureImpl_LoadWICDecoder(), CShellBrowser::OnSearch(), OpenCHM(), parse_config(), parse_path(), perform_test(), query_prop(), register_codec(), register_filters(), RegisterComCat(), run_script(), SampleGrabber_create(), set_firewall(), setup(), setup_task(), setup_trigger(), SHAddToRecentDocs(), SHCoCreateInstance(), SHCoCreateInstanceAC(), SHCreatePropSheetExtArrayEx(), shellex_load_object_and_run(), SHFileOperationW(), SHLoadInProc(), CShellBrowser::ShowBand(), ShowNetConnectionProperties(), START_TEST(), synth_port_create(), test_ACListISF(), test_ACListISF_CURRENTDIR(), 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_CoCreateInstance(), test_cocreateinstance_proxy(), test_codec(), test_CoFreeUnusedLibraries(), test_COM(), test_COM_dplobby(), test_COM_sg_enumpins(), test_COM_wavfile(), test_comparemode(), test_componentinfo(), test_create_decoder(), test_create_manager(), test_create_reader(), test_CreateBody(), test_createElement(), test_createfromstream(), test_CreateGroup(), test_CreateJob(), test_CreatePlayer(), test_CShellMenu_with_DeskBar(), test_custom_source(), test_customize(), test_datalink(), test_decode_1bpp(), test_decode_24bpp(), test_decode_4bpp(), test_decode_adobe_cmyk(), 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_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_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_UpdateOrder(), test_IClientSecurity(), test_ico_data_(), test_iconlocation(), test_IEnumVARIANT(), test_ifiltermapper_from_filtergraph(), test_imagingfactory_interfaces(), 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_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_cHRM(), test_metadata_Exif(), test_metadata_gAMA(), test_metadata_GCE(), test_metadata_gif(), test_metadata_GIF_comment(), test_metadata_IFD(), test_metadata_IMD(), test_metadata_LSD(), test_metadata_png(), test_metadata_tEXt(), test_metadata_unknown(), test_mhtml_protocol_binding(), test_mhtml_protocol_info(), test_midiout(), test_moniker_isequal(), test_mouse_keyboard(), test_multi_encoder(), 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_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_Verbs(), test_vfw(), test_wavein(), test_waveout(), test_whitespace(), 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(), WICCreateColorTransform_Proxy(), write_filter_data(), and WshShortcut_Create().

◆ CoCreateInstanceEx()

HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx ( REFCLSID  rclsid,
LPUNKNOWN  pUnkOuter,
DWORD  dwClsContext,
COSERVERINFO pServerInfo,
ULONG  cmq,
MULTI_QI *  pResults 
)

Definition at line 3387 of file compobj.c.

3394 {
3395  IUnknown *unk = NULL;
3396  IClassFactory *cf;
3397  APARTMENT *apt;
3398  CLSID clsid;
3399  HRESULT hres;
3400 
3401  TRACE("(%s %p %x %p %u %p)\n", debugstr_guid(rclsid), pUnkOuter, dwClsContext, pServerInfo, cmq, pResults);
3402 
3403  if (!cmq || !pResults)
3404  return E_INVALIDARG;
3405 
3406  if (pServerInfo)
3407  FIXME("() non-NULL pServerInfo not supported!\n");
3408 
3409  init_multi_qi(cmq, pResults, E_NOINTERFACE);
3410 
3411  hres = CoGetTreatAsClass(rclsid, &clsid);
3412  if(FAILED(hres))
3413  clsid = *rclsid;
3414 
3415  if (!(apt = apartment_get_current_or_mta()))
3416  {
3417  ERR("apartment not initialised\n");
3418  return CO_E_NOTINITIALIZED;
3419  }
3420  apartment_release(apt);
3421 
3422  /*
3423  * The Standard Global Interface Table (GIT) object is a process-wide singleton.
3424  */
3426  {
3428  TRACE("Retrieving GIT\n");
3429  return return_multi_qi((IUnknown*)git, cmq, pResults, FALSE);
3430  }
3431 
3433  hres = ManualResetEvent_Construct(pUnkOuter, pResults[0].pIID, (void**)&unk);
3434  if (FAILED(hres))
3435  return hres;
3436  return return_multi_qi(unk, cmq, pResults, TRUE);
3437  }
3438 
3439  /*
3440  * Get a class factory to construct the object we want.
3441  */
3442  hres = CoGetClassObject(&clsid, dwClsContext, NULL, &IID_IClassFactory, (void**)&cf);
3443  if (FAILED(hres))
3444  return hres;
3445 
3446  /*
3447  * Create the object and don't forget to release the factory
3448  */
3449  hres = IClassFactory_CreateInstance(cf, pUnkOuter, pResults[0].pIID, (void**)&unk);
3450  IClassFactory_Release(cf);
3451  if (FAILED(hres))
3452  {
3453  if (hres == CLASS_E_NOAGGREGATION && pUnkOuter)
3454  FIXME("Class %s does not support aggregation\n", debugstr_guid(&clsid));
3455  else
3456  FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n",
3457  debugstr_guid(pResults[0].pIID),
3459  return hres;
3460  }
3461 
3462  return return_multi_qi(unk, cmq, pResults, TRUE);
3463 }
static IClassFactory * cf
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk)
Definition: compobj.c:3357
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
#define CO_E_NOTINITIALIZED
#define FIXME(fmt,...)
Definition: debug.h:110
static HRESULT ManualResetEvent_Construct(IUnknown *punkouter, REFIID iid, void **ppv)
Definition: compobj.c:925
#define E_INVALIDARG
Definition: ddrawi.h:101
IGlobalInterfaceTable * get_std_git(void) DECLSPEC_HIDDEN
Definition: git.c:362
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3103
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
const CLSID CLSID_StdGlobalInterfaceTable
REFCLSID clsid
Definition: msctf.c:82
APARTMENT * apartment_get_current_or_mta(void)
Definition: compobj.c:742
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
#define ERR(fmt,...)
Definition: debug.h:109
const CLSID CLSID_ManualResetEvent
const GUID IID_IClassFactory
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr)
Definition: compobj.c:3346
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID clsidNew)
Definition: compobj.c:3959

Referenced by CoCreateInstance(), and test_CoCreateInstanceEx().

◆ CoDisableCallCancellation()

HRESULT WINAPI CoDisableCallCancellation ( void reserved)

Definition at line 5239 of file compobj.c.

5240 {
5241  FIXME("(%p): stub\n", reserved);
5242 
5243  return E_NOTIMPL;
5244 }
#define FIXME(fmt,...)
Definition: debug.h:110
r reserved
Definition: btrfs.c:2865
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ CoDisconnectObject()

HRESULT WINAPI CoDisconnectObject ( LPUNKNOWN  lpUnk,
DWORD  reserved 
)

Definition at line 2149 of file compobj.c.

2150 {
2151  struct stub_manager *manager;
2152  HRESULT hr;
2153  IMarshal *marshal;
2154  APARTMENT *apt;
2155 
2156  TRACE("(%p, 0x%08x)\n", lpUnk, reserved);
2157 
2158  if (!lpUnk) return E_INVALIDARG;
2159 
2160  hr = IUnknown_QueryInterface(lpUnk, &IID_IMarshal, (void **)&marshal);
2161  if (hr == S_OK)
2162  {
2163  hr = IMarshal_DisconnectObject(marshal, reserved);
2164  IMarshal_Release(marshal);
2165  return hr;
2166  }
2167 
2168  if (!(apt = apartment_get_current_or_mta()))
2169  {
2170  ERR("apartment not initialised\n");
2171  return CO_E_NOTINITIALIZED;
2172  }
2173 
2174  manager = get_stub_manager_from_object(apt, lpUnk, FALSE);
2175  if (manager) {
2176  stub_manager_disconnect(manager);
2177  /* Release stub manager twice, to remove the apartment reference. */
2178  stub_manager_int_release(manager);
2179  stub_manager_int_release(manager);
2180  }
2181 
2182  /* Note: native is pretty broken here because it just silently
2183  * fails, without returning an appropriate error code if the object was
2184  * not found, making apps think that the object was disconnected, when
2185  * it actually wasn't */
2186 
2188  return S_OK;
2189 }
HRESULT hr
Definition: shlfolder.c:183
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
ULONG stub_manager_int_release(struct stub_manager *This) DECLSPEC_HIDDEN
Definition: stubmanager.c:311
APARTMENT * apt
#define CO_E_NOTINITIALIZED
r reserved
Definition: btrfs.c:2865
#define E_INVALIDARG
Definition: ddrawi.h:101
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
APARTMENT * apartment_get_current_or_mta(void)
Definition: compobj.c:742
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
void stub_manager_disconnect(struct stub_manager *m) DECLSPEC_HIDDEN
Definition: stubmanager.c:244
struct stub_manager * get_stub_manager_from_object(APARTMENT *apt, IUnknown *object, BOOL alloc) DECLSPEC_HIDDEN
Definition: stubmanager.c:337

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 5249 of file compobj.c.

5250 {
5251  FIXME("(%p): stub\n", reserved);
5252 
5253  return E_NOTIMPL;
5254 }
#define FIXME(fmt,...)
Definition: debug.h:110
r reserved
Definition: btrfs.c:2865
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ CoFileTimeNow()

HRESULT WINAPI CoFileTimeNow ( FILETIME lpFileTime)

Definition at line 3717 of file compobj.c.

3718 {
3719  GetSystemTimeAsFileTime( lpFileTime );
3720  return S_OK;
3721 }
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
Definition: time.c:128
#define S_OK
Definition: intsafe.h:59

Referenced by RunningObjectTableImpl_Register().

◆ CoFreeAllLibraries()

void WINAPI CoFreeAllLibraries ( void  )

Definition at line 3655 of file compobj.c.

3656 {
3657  /* NOP */
3658 }

◆ CoFreeLibrary()

void WINAPI CoFreeLibrary ( HINSTANCE  hLibrary)

Definition at line 3638 of file compobj.c.

3639 {
3641 }
#define FreeLibrary(x)
Definition: compat.h:413
HMODULE hLibrary
Definition: odbccp32.c:12

◆ CoFreeUnusedLibraries()

void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries ( void  )

Definition at line 3701 of file compobj.c.

3702 {
3704 }
void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD dwReserved)
Definition: compobj.c:3677
#define INFINITE
Definition: serial.h:102

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

◆ CoFreeUnusedLibrariesEx()

void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx ( DWORD  dwUnloadDelay,
DWORD  dwReserved 
)

Definition at line 3677 of file compobj.c.

3678 {
3679  struct apartment *apt = COM_CurrentApt();
3680  if (!apt)
3681  {
3682  ERR("apartment not initialised\n");
3683  return;
3684  }
3685 
3686  apartment_freeunusedlibraries(apt, dwUnloadDelay);
3687 }
static void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
Definition: compobj.c:1132
static APARTMENT * COM_CurrentApt(void)
#define ERR(fmt,...)
Definition: debug.h:109

Referenced by CoFreeUnusedLibraries().

◆ CoGetApartmentType()

HRESULT WINAPI CoGetApartmentType ( APTTYPE *  type,
APTTYPEQUALIFIER qualifier 
)

Definition at line 5202 of file compobj.c.

5203 {
5204  struct oletls *info = COM_CurrentInfo();
5205  APARTMENT *apt;
5206 
5207  TRACE("(%p, %p)\n", type, qualifier);
5208 
5209  if (!type || !qualifier)
5210  return E_INVALIDARG;
5211 
5212  if (!info)
5213  return E_OUTOFMEMORY;
5214 
5215  if (!info->apt)
5216  *type = APTTYPE_CURRENT;
5217  else if (info->apt->multi_threaded)
5218  *type = APTTYPE_MTA;
5219  else if (info->apt->main)
5220  *type = APTTYPE_MAINSTA;
5221  else
5222  *type = APTTYPE_STA;
5223 
5225 
5226  if (!info->apt && (apt = apartment_find_mta()))
5227  {
5229  *type = APTTYPE_MTA;
5231  }
5232 
5233  return info->apt ? S_OK : CO_E_NOTINITIALIZED;
5234 }
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
enum APTTYPE_MTA
static struct oletls * COM_CurrentInfo(void)
#define CO_E_NOTINITIALIZED
enum APTTYPE_MAINSTA
struct apartment * apt
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
static APTTYPEQUALIFIER * qualifier
Definition: compobj.c:79
#define TRACE(s)
Definition: solgame.cpp:4
static APARTMENT * apartment_find_mta(void)
Definition: compobj.c:726
#define S_OK
Definition: intsafe.h:59
enum APTTYPE_STA

Referenced by Context_CTI_GetCurrentApartmentType(), and Context_CTI_GetCurrentThreadType().

◆ CoGetCallContext()

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

Definition at line 4379 of file compobj.c.

4380 {
4381  struct oletls *info = COM_CurrentInfo();
4382 
4383  TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
4384 
4385  if (!info)
4386  return E_OUTOFMEMORY;
4387 
4388  if (!info->call_state)
4389  return RPC_E_CALL_COMPLETE;
4390 
4391  return IUnknown_QueryInterface(info->call_state, riid, ppv);
4392 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static struct oletls * COM_CurrentInfo(void)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define RPC_E_CALL_COMPLETE
Definition: winerror.h:2499
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4

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

◆ CoGetClassObject()

HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject ( REFCLSID  rclsid,
DWORD  dwClsContext,
COSERVERINFO pServerInfo,
REFIID  iid,
LPVOID ppv 
)

Definition at line 3103 of file compobj.c.

3106 {
3107  struct class_reg_data clsreg;
3108  IUnknown *regClassObject;
3110  APARTMENT *apt;
3111 
3112  TRACE("CLSID: %s,IID: %s\n", debugstr_guid(rclsid), debugstr_guid(iid));
3113 
3114  if (!ppv)
3115  return E_INVALIDARG;
3116 
3117  *ppv = NULL;
3118 
3119  if (!(apt = apartment_get_current_or_mta()))
3120  {
3121  ERR("apartment not initialised\n");
3122  return CO_E_NOTINITIALIZED;
3123  }
3124 
3125  if (pServerInfo) {
3126  FIXME("pServerInfo->name=%s pAuthInfo=%p\n",
3127  debugstr_w(pServerInfo->pwszName), pServerInfo->pAuthInfo);
3128  }
3129 
3130  if (CLSCTX_INPROC_SERVER & dwClsContext)
3131  {
3133  {
3134  apartment_release(apt);
3135  return FTMarshalCF_Create(iid, ppv);
3136  }
3137  if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions))
3138  return IClassFactory_QueryInterface(&GlobalOptionsCF, iid, ppv);
3139  }
3140 
3141  if (CLSCTX_INPROC & dwClsContext)
3142  {
3143  ACTCTX_SECTION_KEYED_DATA data;
3144 
3145  data.cbSize = sizeof(data);
3146  /* search activation context first */
3147  if (FindActCtxSectionGuid(FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL,
3148  ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION,
3149  rclsid, &data))
3150  {
3151  struct comclassredirect_data *comclass = (struct comclassredirect_data*)data.lpData;
3152 
3153  clsreg.u.actctx.hactctx = data.hActCtx;
3154  clsreg.u.actctx.data = data.lpData;
3155  clsreg.u.actctx.section = data.lpSectionBase;
3156  clsreg.hkey = FALSE;
3157 
3158  hres = get_inproc_class_object(apt, &clsreg, &comclass->clsid, iid, !(dwClsContext & WINE_CLSCTX_DONT_HOST), ppv);
3159  ReleaseActCtx(data.hActCtx);
3160  apartment_release(apt);
3161  return hres;
3162  }
3163  }
3164 
3165  /*
3166  * First, try and see if we can't match the class ID with one of the
3167  * registered classes.
3168  */
3169  if (S_OK == COM_GetRegisteredClassObject(apt, rclsid, dwClsContext,
3170  &regClassObject))
3171  {
3172  /* Get the required interface from the retrieved pointer. */
3173  hres = IUnknown_QueryInterface(regClassObject, iid, ppv);
3174 
3175  /*
3176  * Since QI got another reference on the pointer, we want to release the
3177  * one we already have. If QI was unsuccessful, this will release the object. This
3178  * is good since we are not returning it in the "out" parameter.
3179  */
3180  IUnknown_Release(regClassObject);
3181  apartment_release(apt);
3182  return hres;
3183  }
3184 
3185  /* First try in-process server */
3186  if (CLSCTX_INPROC_SERVER & dwClsContext)
3187  {
3188  static const WCHAR wszInprocServer32[] = {'I','n','p','r','o','c','S','e','r','v','e','r','3','2',0};
3189  HKEY hkey;
3190 
3191  hres = COM_OpenKeyForCLSID(rclsid, wszInprocServer32, KEY_READ, &hkey);
3192  if (FAILED(hres))
3193  {
3194  if (hres == REGDB_E_CLASSNOTREG)
3195  ERR("class %s not registered\n", debugstr_guid(rclsid));
3196  else if (hres == REGDB_E_KEYMISSING)
3197  {
3198  WARN("class %s not registered as in-proc server\n", debugstr_guid(rclsid));
3200  }
3201  }
3202 
3203  if (SUCCEEDED(hres))
3204  {
3205  clsreg.u.hkey = hkey;
3206  clsreg.hkey = TRUE;
3207 
3208  hres = get_inproc_class_object(apt, &clsreg, rclsid, iid, !(dwClsContext & WINE_CLSCTX_DONT_HOST), ppv);
3209  RegCloseKey(hkey);
3210  }
3211 
3212  /* return if we got a class, otherwise fall through to one of the
3213  * other types */
3214  if (SUCCEEDED(hres))
3215  {
3216  apartment_release(apt);
3217  return hres;
3218  }
3219  }
3220 
3221  /* Next try in-process handler */
3222  if (CLSCTX_INPROC_HANDLER & dwClsContext)
3223  {
3224  static const WCHAR wszInprocHandler32[] = {'I','n','p','r','o','c','H','a','n','d','l','e','r','3','2',0};
3225  HKEY hkey;
3226 
3227  hres = COM_OpenKeyForCLSID(rclsid, wszInprocHandler32, KEY_READ, &hkey);
3228  if (FAILED(hres))
3229  {
3230  if (hres == REGDB_E_CLASSNOTREG)
3231  ERR("class %s not registered\n", debugstr_guid(rclsid));
3232  else if (hres == REGDB_E_KEYMISSING)
3233  {
3234  WARN("class %s not registered in-proc handler\n", debugstr_guid(rclsid));
3236  }
3237  }
3238 
3239  if (SUCCEEDED(hres))
3240  {
3241  clsreg.u.hkey = hkey;
3242  clsreg.hkey = TRUE;
3243 
3244  hres = get_inproc_class_object(apt, &clsreg, rclsid, iid, !(dwClsContext & WINE_CLSCTX_DONT_HOST), ppv);
3245  RegCloseKey(hkey);
3246  }
3247 
3248  /* return if we got a class, otherwise fall through to one of the
3249  * other types */
3250  if (SUCCEEDED(hres))
3251  {
3252  apartment_release(apt);
3253  return hres;
3254  }
3255  }
3256  apartment_release(apt);
3257 
3258  /* Next try out of process */
3259  if (CLSCTX_LOCAL_SERVER & dwClsContext)
3260  {
3261  hres = RPC_GetLocalClassObject(rclsid,iid,ppv);
3262  if (SUCCEEDED(hres))
3263  return hres;
3264  }
3265 
3266  /* Finally try remote: this requires networked DCOM (a lot of work) */
3267  if (CLSCTX_REMOTE_SERVER & dwClsContext)
3268  {
3269  FIXME ("CLSCTX_REMOTE_SERVER not supported\n");
3271  }
3272 
3273  if (FAILED(hres))
3274  ERR("no class object %s could be created for context 0x%x\n",
3275  debugstr_guid(rclsid), dwClsContext);
3276  return hres;
3277 }
#define TRUE
Definition: types.h:120
#define KEY_READ
Definition: nt_native.h:1023
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
#define WARN(fmt,...)
Definition: debug.h:111
REFIID LPVOID * ppv
Definition: atlbase.h:39
const CLSID CLSID_InProcFreeMarshaler
#define REGDB_E_KEYMISSING
Definition: winerror.h:2694
#define CO_E_NOTINITIALIZED
static HRESULT COM_GetRegisteredClassObject(const struct apartment *apt, REFCLSID rclsid, DWORD dwClsContext, LPUNKNOWN *ppUnk)
Definition: compobj.c:2832
COAUTHINFO * pAuthInfo
Definition: objidl.idl:34
const CLSID CLSID_GlobalOptions
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
HRESULT RPC_GetLocalClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv) DECLSPEC_HIDDEN
Definition: rpc.c:1804
HRESULT COM_OpenKeyForCLSID(REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY *subkey)
Definition: compobj.c:2448
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
static LPVOID * ppv
Definition: compobj.c:74
VOID WINAPI ReleaseActCtx(IN HANDLE hActCtx)
Definition: actctx.c:208
#define WINE_CLSCTX_DONT_HOST
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
APARTMENT * apartment_get_current_or_mta(void)
Definition: compobj.c:742
#define ERR(fmt,...)
Definition: debug.h:109
IClassFactory GlobalOptionsCF
Definition: oleproxy.c:160
#define S_OK
Definition: intsafe.h:59
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:2696
HRESULT FTMarshalCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN
Definition: ftmarshal.c:411
static HRESULT get_inproc_class_object(APARTMENT *apt, const struct class_reg_data *regdata, REFCLSID rclsid, REFIID riid, BOOL hostifnecessary, void **ppv)
Definition: compobj.c:3026
#define E_UNEXPECTED
Definition: winerror.h:2456
LPWSTR pwszName
Definition: objidl.idl:33
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
Definition: actctx.c:183
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by ClassMoniker_BindToObject(), CoCreateInstanceEx(), create_activex_object(), create_object(), get_class_object(), get_class_object_proxy_thread(), get_facbuf_for_iid(), get_protocol_cf(), IDirectSound8_tests(), IDirectSound_tests(), implicit_mta_proc(), is_jscript_available(), register_protocols(), START_TEST(), test_about_protocol(), test_capture(), test_CoGetClassObject(), test_com_aggregation(), test_CoRegisterClassObject(), test_CoRegisterPSClsid(), test_file_protocol_url(), test_ftp_protocol(), test_gopher_protocol(), test_http_protocol_url(), test_its_protocol(), test_javascript_protocol(), test_local_server(), test_marshal_channel_buffer(), test_mhtml_protocol(), test_mk_protocol(), test_OleCreateFontIndirect(), test_proxybuffer(), test_res_protocol(), test_stub(), and test_stubbuffer().

◆ CoGetContextToken()

HRESULT WINAPI CoGetContextToken ( ULONG_PTR token)

Definition at line 5114 of file compobj.c.

5115 {
5116  struct oletls *info = COM_CurrentInfo();
5117  APARTMENT *apt;
5118 
5119  TRACE("(%p)\n", token);
5120 
5121  if (!info)
5122  return E_OUTOFMEMORY;
5123 
5124  if (!(apt = apartment_get_current_or_mta()))
5125  {
5126  ERR("apartment not initialised\n");
5127  return CO_E_NOTINITIALIZED;
5128  }
5130 
5131  if (!token)
5132  return E_POINTER;
5133 
5134  if (!info->context_token)
5135  {
5136  Context *context;
5137 
5138  context = HeapAlloc(GetProcessHeap(), 0, sizeof(*context));
5139  if (!context)
5140  return E_OUTOFMEMORY;
5141 
5142  context->IComThreadingInfo_iface.lpVtbl = &Context_Threading_Vtbl;
5143  context->IContextCallback_iface.lpVtbl = &Context_Callback_Vtbl;
5144  context->IObjContext_iface.lpVtbl = &Context_Object_Vtbl;
5145  /* Context token does not take a reference, it's always zero until the
5146  interface is explicitly requested with CoGetObjectContext(). */
5147  context->refs = 0;
5148 
5149  info->context_token = &context->IObjContext_iface;
5150  }
5151 
5152  *token = (ULONG_PTR)info->context_token;
5153  TRACE("context_token=%p\n", info->context_token);
5154 
5155  return S_OK;
5156 }
Definition: http.c:7098
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
static struct oletls * COM_CurrentInfo(void)
#define CO_E_NOTINITIALIZED
struct apartment * apt
static const IObjContextVtbl Context_Object_Vtbl
Definition: compobj.c:5065
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
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 TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const IContextCallbackVtbl Context_Callback_Vtbl
Definition: compobj.c:4965
APARTMENT * apartment_get_current_or_mta(void)
Definition: compobj.c:742
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
static ULONG_PTR
Definition: compobj.c:85
#define E_POINTER
Definition: winerror.h:2365
static const IComThreadingInfoVtbl Context_Threading_Vtbl
Definition: compobj.c:4927

Referenced by CoGetObjectContext(), and implicit_mta_proc().

◆ CoGetCurrentLogicalThreadId()

HRESULT WINAPI CoGetCurrentLogicalThreadId ( GUID id)

Definition at line 4012 of file compobj.c.

4013 {
4014  TRACE("(%p)\n", id);
4015 
4016  if (!id)
4017  return E_INVALIDARG;
4018 
4019  *id = COM_CurrentCausalityId();
4020  return S_OK;
4021 }
static GUID COM_CurrentCausalityId(void)
#define E_INVALIDARG
Definition: ddrawi.h:101
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59

Referenced by Context_CTI_GetCurrentLogicalThreadId(), test_CoGetCurrentLogicalThreadId(), and test_CoGetObjectContext().

◆ CoGetCurrentProcess()

DWORD WINAPI CoGetCurrentProcess ( void  )

Definition at line 4004 of file compobj.c.

4005 {
4006  return GetCurrentProcessId();
4007 }
DWORD WINAPI GetCurrentProcessId(VOID)
Definition: proc.c:1158

◆ CoGetDefaultContext()

HRESULT WINAPI CoGetDefaultContext ( APTTYPE  type,
REFIID  riid,
LPVOID ppv 
)

Definition at line 5161 of file compobj.c.

5162 {
5163  FIXME("%d %s %p stub\n", type, debugstr_guid(riid), ppv);
5164  return E_NOINTERFACE;
5165 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define FIXME(fmt,...)
Definition: debug.h:110
#define debugstr_guid
Definition: kernel32.h:35

◆ 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 3468 of file compobj.c.

3478 {
3479  IPersistFile *pf = NULL;
3480  IUnknown* unk = NULL;
3481  CLSID clsid;
3482  HRESULT hr;
3483 
3484  if (count == 0 || !results)
3485  return E_INVALIDARG;
3486 
3487  if (server_info)
3488  FIXME("() non-NULL server_info not supported\n");
3489 
3491 
3492  /* optionally get CLSID from a file */
3493  if (!rclsid)
3494  {
3496  if (FAILED(hr))
3497  {
3498  ERR("failed to get CLSID from a file\n");
3499  return hr;
3500  }
3501 
3502  rclsid = &clsid;
3503  }
3504 
3505  hr = CoCreateInstance(rclsid,
3506  outer,
3507  cls_context,
3508  &IID_IUnknown,
3509  (void**)&unk);
3510 
3511  if (hr != S_OK)
3512  {
3514  return hr;
3515  }
3516 
3517  /* init from file */
3518  hr = IUnknown_QueryInterface(unk, &IID_IPersistFile, (void**)&pf);
3519  if (FAILED(hr))
3520  {
3522  IUnknown_Release(unk);
3523  return hr;
3524  }
3525 
3526  hr = IPersistFile_Load(pf, filename, grfmode);
3527  IPersistFile_Release(pf);
3528  if (SUCCEEDED(hr))
3529  return return_multi_qi(unk, count, results, FALSE);
3530  else
3531  {
3533  IUnknown_Release(unk);
3534  return hr;
3535  }
3536 }
#define E_NOINTERFACE
Definition: winerror.h:2364
static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk)
Definition: compobj.c:3357
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI GetClassFile(LPCOLESTR filePathName, CLSID *pclsid)
Definition: moniker.c:1213
GLuint GLuint GLsizei count
Definition: gl.h:1545
const char * filename
Definition: ioapi.h:135
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
struct _test_info results[8]
Definition: SetCursorPos.c:29
REFCLSID clsid
Definition: msctf.c:82
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
const GUID IID_IPersistFile
static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr)
Definition: compobj.c:3346
#define SUCCEEDED(hr)
Definition: intsafe.h:57

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 3541 of file compobj.c.

3550 {
3551  IPersistStorage *ps = NULL;
3552  IUnknown* unk = NULL;
3553  STATSTG stat;
3554  HRESULT hr;
3555 
3556  if (count == 0 || !results || !storage)
3557  return E_INVALIDARG;
3558 
3559  if (server_info)
3560  FIXME("() non-NULL server_info not supported\n");
3561 
3563 
3564  /* optionally get CLSID from a file */
3565  if (!rclsid)
3566  {
3567  memset(&stat.clsid, 0, sizeof(stat.clsid));
3568  hr = IStorage_Stat(storage, &stat, STATFLAG_NONAME);
3569  if (FAILED(hr))
3570  {
3571  ERR("failed to get CLSID from a file\n");
3572  return hr;
3573  }
3574 
3575  rclsid = &stat.clsid;
3576  }
3577 
3578  hr = CoCreateInstance(rclsid,
3579  outer,
3580  cls_context,
3581  &IID_IUnknown,
3582  (void**)&unk);
3583 
3584  if (hr != S_OK)
3585  return hr;
3586 
3587  /* init from IStorage */
3588  hr = IUnknown_QueryInterface(unk, &IID_IPersistStorage, (void**)&ps);
3589  if (FAILED(hr))
3590  ERR("failed to get IPersistStorage\n");
3591 
3592  if (ps)
3593  {
3594  IPersistStorage_Load(ps, storage);
3595  IPersistStorage_Release(ps);
3596  }
3597 
3598  return return_multi_qi(unk, count, results, FALSE);
3599 }
#define E_NOINTERFACE
Definition: winerror.h:2364
static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk)
Definition: compobj.c:3357
HRESULT hr
Definition: shlfolder.c:183
GLuint GLuint GLsizei count
Definition: gl.h:1545
const GUID IID_IPersistStorage
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
struct _test_info results[8]
Definition: SetCursorPos.c:29
Definition: stat.h:55
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define ERR(fmt,...)
Definition: debug.h:109
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
#define S_OK
Definition: intsafe.h:59
#define memset(x, y, z)
Definition: compat.h:39
static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr)
Definition: compobj.c:3346

◆ CoGetObject()

HRESULT WINAPI CoGetObject ( LPCWSTR  pszName,
BIND_OPTS *  pBindOptions,
REFIID  riid,
void **  ppv 
)

Definition at line 4742 of file compobj.c.

4744 {
4745  IBindCtx *pbc;
4746  HRESULT hr;
4747 
4748  *ppv = NULL;
4749 
4750  hr = CreateBindCtx(0, &pbc);
4751  if (SUCCEEDED(hr))
4752  {
4753  if (pBindOptions)
4754  hr = IBindCtx_SetBindOptions(pbc, pBindOptions);
4755 
4756  if (SUCCEEDED(hr))
4757  {
4758  ULONG chEaten;
4759  IMoniker *pmk;
4760 
4761  hr = MkParseDisplayName(pbc, pszName, &chEaten, &pmk);
4762  if (SUCCEEDED(hr))
4763  {
4764  hr = IMoniker_BindToObject(pmk, pbc, NULL, riid, ppv);
4765  IMoniker_Release(pmk);
4766  }
4767  }
4768 
4769  IBindCtx_Release(pbc);
4770  }
4771  return hr;
4772 }
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LPDWORD pchEaten, LPMONIKER *ppmk)
Definition: moniker.c:1129
unsigned int ULONG
Definition: retypes.h:1
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ CoGetObjectContext()

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

Definition at line 5096 of file compobj.c.

5097 {
5099  HRESULT hr;
5100 
5101  TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
5102 
5103  *ppv = NULL;
5105  if (FAILED(hr))
5106  return hr;
5107 
5108  return IObjContext_QueryInterface(context, riid, ppv);
5109 }
HRESULT hr
Definition: shlfolder.c:183
Definition: http.c:7098
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT WINAPI CoGetContextToken(ULONG_PTR *token)
Definition: compobj.c:5114
uint32_t ULONG_PTR
Definition: typedefs.h:63
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77

Referenced by implicit_mta_proc().

◆ CoGetPSClsid()

HRESULT WINAPI CoGetPSClsid ( REFIID  riid,
CLSID pclsid 
)

Definition at line 2690 of file compobj.c.

2691 {
2692  static const WCHAR wszInterface[] = {'I','n','t','e','r','f','a','c','e','\\',0};
2693  static const WCHAR wszPSC[] = {'\\','P','r','o','x','y','S','t','u','b','C','l','s','i','d','3','2',0};
2694  WCHAR path[ARRAY_SIZE(wszInterface) - 1 + CHARS_IN_GUID - 1 + ARRAY_SIZE(wszPSC)];
2695  APARTMENT *apt;
2697  ACTCTX_SECTION_KEYED_DATA data;
2698  HRESULT hr;
2699  REGSAM opposite = (sizeof(void*) > sizeof(int)) ? KEY_WOW64_32KEY : KEY_WOW64_64KEY;
2700  BOOL is_wow64;
2701 
2702  TRACE("() riid=%s, pclsid=%p\n", debugstr_guid(riid), pclsid);
2703 
2704  if (!(apt = apartment_get_current_or_mta()))
2705  {
2706  ERR("apartment not initialised\n");
2707  return CO_E_NOTINITIALIZED;
2708  }
2709  apartment_release(apt);
2710 
2711  if (!pclsid)
2712  return E_INVALIDARG;
2713 
2715 
2718  {
2719  *pclsid = registered_psclsid->clsid;
2721  return S_OK;
2722  }
2723 
2725 
2726  data.cbSize = sizeof(data);
2727  if (FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION,
2728  riid, &data))
2729  {
2730  struct ifacepsredirect_data *ifaceps = (struct ifacepsredirect_data*)data.lpData;
2731  *pclsid = ifaceps->iid;
2732  return S_OK;
2733  }
2734 
2735  /* Interface\\{string form of riid}\\ProxyStubClsid32 */
2736  lstrcpyW(path, wszInterface);
2737  StringFromGUID2(riid, path + ARRAY_SIZE(wszInterface) - 1, CHARS_IN_GUID);
2738  lstrcpyW(path + ARRAY_SIZE(wszInterface) - 1 + CHARS_IN_GUID - 1, wszPSC);
2739 
2740  hr = get_ps_clsid_from_registry(path, 0, pclsid);
2741  if (FAILED(hr) && (opposite == KEY_WOW64_32KEY ||
2743  hr = get_ps_clsid_from_registry(path, opposite, pclsid);
2744 
2745  if (hr == S_OK)
2746  TRACE ("() Returning CLSID=%s\n", debugstr_guid(pclsid));
2747  else
2748  WARN("No PSFactoryBuffer object is registered for IID %s\n", debugstr_guid(riid));
2749 
2750  return hr;
2751 }
static struct list registered_psclsid_list
Definition: compobj.c:172
static CRITICAL_SECTION cs_registered_psclsid_list
Definition: compobj.c:174
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
DWORD apartment_release(struct apartment *apt)
Definition: compobj.c:1172
#define WARN(fmt,...)
Definition: debug.h:111
#define CHARS_IN_GUID
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define CO_E_NOTINITIALIZED
struct apartment * apt
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
unsigned int BOOL
Definition: ntddk_ex.h:94
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
BOOL WINAPI IsWow64Process(IN HANDLE hProcess, OUT PBOOL Wow64Process)
Definition: proc.c:1974
#define KEY_WOW64_64KEY
Definition: cmtypes.h:46
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
static BOOL is_wow64
Definition: loader.c:55
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
APARTMENT * apartment_get_current_or_mta(void)
Definition: compobj.c:742
uint32_t entry
Definition: isohybrid.c:63
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
#define lstrcpyW
Definition: compat.h:414
#define ARRAY_SIZE(a)
Definition: main.h:24
ACCESS_MASK REGSAM
Definition: winreg.h:69
#define KEY_WOW64_32KEY
Definition: cmtypes.h:45
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
Definition: actctx.c:183
static HRESULT get_ps_clsid_from_registry(const WCHAR *path, REGSAM access, CLSID *pclsid)
Definition: compobj.c:2632
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

Referenced by 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().

◆ CoGetState()

HRESULT WINAPI CoGetState ( IUnknown **  ppv)

Definition at line 3819 of file compobj.c.

3820 {
3821  struct oletls *info = COM_CurrentInfo();
3822  if (!info) return E_OUTOFMEMORY;
3823 
3824  *ppv = NULL;
3825 
3826  if (info->state)
3827  {
3828  IUnknown_AddRef(info->state);
3829  *ppv = info->state;
3830  TRACE("apt->state=%p\n", info->state);
3831  }
3832 
3833  return S_OK;
3834 }
REFIID LPVOID * ppv
Definition: atlbase.h:39
static struct oletls * COM_CurrentInfo(void)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59

◆ CoGetTreatAsClass()

HRESULT WINAPI CoGetTreatAsClass ( REFCLSID  clsidOld,
LPCLSID  clsidNew 
)

Definition at line 3959 of file compobj.c.

3960 {
3961  static const WCHAR wszTreatAs[] = {'T','r','e','a','t','A','s',0};
3962  HKEY hkey = NULL;
3963  WCHAR szClsidNew[CHARS_IN_GUID];
3964  HRESULT res = S_OK;
3965  LONG len = sizeof(szClsidNew);
3966 
3967  TRACE("(%s,%p)\n", debugstr_guid(clsidOld), clsidNew);
3968 
3969  if (!clsidOld || !clsidNew)
3970  return E_INVALIDARG;
3971 
3972  *clsidNew = *clsidOld; /* copy over old value */
3973 
3974  res = COM_OpenKeyForCLSID(clsidOld, wszTreatAs, KEY_READ, &hkey);
3975  if (FAILED(res))
3976  {
3977  res = S_FALSE;
3978  goto done;
3979  }
3980  if (RegQueryValueW(hkey, NULL, szClsidNew, &len))
3981  {
3982  res = S_FALSE;
3983  goto done;
3984  }
3985  res = CLSIDFromString(szClsidNew,clsidNew);
3986  if (FAILED(res))
3987  ERR("Failed CLSIDFromStringA(%s), hres 0x%08x\n", debugstr_w(szClsidNew), res);
3988 done:
3989  if (hkey) RegCloseKey(hkey);
3990  return res;
3991 }
#define KEY_READ
Definition: nt_native.h:1023
#define CHARS_IN_GUID
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
HRESULT COM_OpenKeyForCLSID(REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY *subkey)
Definition: compobj.c:2448
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4254
GLenum GLsizei len
Definition: glext.h:6722
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
GLuint res
Definition: glext.h:9613
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338

Referenced by CoCreateInstanceEx().

◆ CoImpersonateClient()

HRESULT WINAPI CoImpersonateClient ( void  )

Definition at line 4494 of file compobj.c.

4495 {
4496  IServerSecurity *pSrvSec;
4497  HRESULT hr;
4498 
4499  TRACE("\n");
4500 
4501  hr = CoGetCallContext(&IID_IServerSecurity, (void **)&pSrvSec);
4502  if (SUCCEEDED(hr))
4503  {
4504  hr = IServerSecurity_ImpersonateClient(pSrvSec);
4505  IServerSecurity_Release(pSrvSec);
4506  }
4507 
4508  return hr;
4509 }
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI CoGetCallContext(REFIID riid, void **ppv)
Definition: compobj.c:4379
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ CoInitialize()

HRESULT WINAPI CoInitialize ( LPVOID  lpReserved)

Definition at line 1964 of file compobj.c.

1965 {
1966  /*
1967  * Just delegate to the newer method.
1968  */
1969  return CoInitializeEx(lpReserved, COINIT_APARTMENTTHREADED);
1970 }
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002

Referenced by _CmdWndProc(), CRecyclerDropTarget::_DoDeleteThreadProc(), CFSDropTarget::_DoDropThreadProc(), ACTION_CreateShortcuts(), AMovieDllRegisterServer2(), bsc_thread(), cache_across_threads_test(), cache_InstallAssembly(), cache_UninstallAssembly(), call_script(), CCoInit::CCoInit(), CGuidItemExtractIcon_CreateInstance(), ComInit::ComInit(), cowait_unmarshal_thread(), crash_couninitialize_proc(), CreateSecurityPage(), CreateShortcut(), CreateShortcuts(), DllMain(), DllRegisterServer(), get_global_interface_proc(), IEWinMain(), init_test(), initialize(), InitIconOverlays(), InitInstance(), InitXMLDOMParser(), InstallTypicalNetworkSettings(), LoadShellLinkConsoleInfo(), local_server_proc(), main(), MsiGetShortcutTargetW(), OLEPictureImpl_LoadWICDecoder(), query_prop(), register_filters(), run_script(), SHAddToRecentDocs(), SHCreateFromDesktop(), shellex_load_object_and_run(), SHFileOperationW(), START_TEST(), test_click_make_new_folder_button(), test_CoCreateInstanceEx(), test_CoGetCallContext(), test_CoGetContextToken(), test_controlevent(), test_DPA_LoadStream(), test_DPA_SaveStream(), test_externalui_message(), test_GetDefaultColumn(), test_GetDefaultSearchGUID(), test_GlobalOptions(), test_iface_ptr(), test_IWinHttpRequest(), test_IWinHttpRequest_Invoke(), test_knownFolders(), test_MsiSetComponentState(), test_OleInitialize_InitCounting(), test_packagecoltypes(), test_printers_folder(), test_PSRefreshPropertySchema(), test_selection(), test_set_clipboard(), test_StreamOnStreamRange(), test_top_level_action(), unregister_filters(), WinMain(), wmain(), and wWinMain().

◆ CoInitializeEx()

HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx ( LPVOID  lpReserved,
DWORD  dwCoInit 
)

Definition at line 2002 of file compobj.c.

2003 {
2004  struct oletls *info = COM_CurrentInfo();
2005  struct init_spy *cursor;
2006  HRESULT hr;
2007 
2008  TRACE("(%p, %x)\n", lpReserved, (int)dwCoInit);
2009 
2010  if (lpReserved!=NULL)
2011  {
2012  ERR("(%p, %x) - Bad parameter passed-in %p, must be an old Windows Application\n", lpReserved, (int)dwCoInit, lpReserved);
2013  }
2014 
2015  /*
2016  * Check the lock count. If this is the first time going through the initialize
2017  * process, we have to initialize the libraries.
2018  *
2019  * And crank-up that lock count.
2020  */
2022  {
2023  /*
2024  * Initialize the various COM libraries and data structures.
2025  */
2026  TRACE("() - Initializing the COM libraries\n");
2027 
2028  /* we may need to defer this until after apartment initialisation */
2030  }
2031 
2033  LIST_FOR_EACH_ENTRY(cursor, &info->spies, struct init_spy, entry)
2034  {
2035  if (cursor->spy) IInitializeSpy_PreInitialize(cursor->spy, dwCoInit, info->inits);
2036  }
2038 
2040 
2042  LIST_FOR_EACH_ENTRY(cursor, &info->spies, struct init_spy, entry)
2043  {
2044  if (cursor->spy) hr = IInitializeSpy_PostInitialize(cursor->spy, hr, dwCoInit, info->inits);
2045  }
2047 
2048  return hr;
2049 }
HRESULT hr
Definition: shlfolder.c:183
static DWORD dwCoInit
Definition: compobj.c:73
static struct oletls * COM_CurrentInfo(void)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
static void lock_init_spies(struct oletls *info)
Definition: compobj.c:1797
smooth NULL
Definition: ftsmooth.c:416
#define InterlockedExchangeAdd
Definition: interlocked.h:181
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
HRESULT enter_apartment(struct oletls *info, DWORD model)
Definition: compobj.c:1913
uint32_t entry
Definition: isohybrid.c:63
#define ERR(fmt,...)
Definition: debug.h:109
static void unlock_init_spies(struct oletls *info)
Definition: compobj.c:1802
const char cursor[]
Definition: icontest.c:13
static LONG s_COMLockCount
Definition: compobj.c:202
HRESULT WINAPI RunningObjectTableImpl_Initialize(void) DECLSPEC_HIDDEN
Definition: moniker.c:979

Referenced by apartment_hostobject_thread(), ChooseFolder(), CoInitialize(), D3DXGetImageInfoFromFileInMemory(), D3DXLoadSurfaceFromFileInMemory(), D3DXSaveSurfaceToFileInMemory(), DllMain(), dummy_thread_proc(), FileExtractDialogWndProc(), host_object_proc(), implicit_mta_unmarshal_proc(), implicit_mta_use_proc(), ATL::CAtlExeModuleT< T >::InitializeCom(), InitializeSecurity(), is_firewall_enabled(), MCIQTZ_mciOpen(),