42 const InterfaceData *
object,
const InterfaceData *
moniker,
100 memcpy(pv, mip->abData, mip->ulCntData);
109 InterfaceData *
object =
NULL;
148 hr = IMoniker_QueryInterface(pMoniker, &IID_IROTData, (
void *)&pROTData);
155 IROTData_Release(pROTData);
158 hr = IROTData_GetComparisonData(pROTData, (*moniker_data)->abData,
size, &
size);
159 IROTData_Release(pROTData);
162 ERR(
"Failed to copy comparison data into buffer, hr = %#lx\n",
hr);
164 *moniker_data =
NULL;
167 (*moniker_data)->ulCntData =
size;
176 TRACE(
"generating comparison data from display name\n");
181 hr = IMoniker_GetDisplayName(pMoniker, pbc,
NULL, &pszDisplayName);
182 IBindCtx_Release(pbc);
185 hr = IMoniker_GetClassID(pMoniker, &
clsid);
200 (*moniker_data)->ulCntData =
sizeof(
CLSID) + (
len+1)*
sizeof(
WCHAR);
220 hr = IMoniker_Reduce(pmk, pbc, MKRREDUCE_ALL,
NULL, pmkReduced);
222 ERR(
"reducing moniker failed with error %#lx.\n",
hr);
223 if (pbcNew) IBindCtx_Release(pbcNew);
247 *ppvObject = &
This->IRunningObjectTable_iface;
252 IRunningObjectTable_AddRef(iface);
259 TRACE(
"%p\n", iface);
266 TRACE(
"%p\n", iface);
292 TRACE(
"%p, %#lx, %p, %p, %p\n", iface,
flags, punkObject, pmkObjectName, pdwRegister);
294 if (
flags & ~(ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT))
296 ERR(
"Invalid flags: %#lx\n",
flags & ~(ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT));
300 if (punkObject==
NULL || pmkObjectName==
NULL || pdwRegister==
NULL)
314 mshlflags =
flags & ROTFLAGS_REGISTRATIONKEEPSALIVE ? MSHLFLAGS_TABLESTRONG : MSHLFLAGS_TABLEWEAK;
332 IStream_Release(pStream);
350 IBindCtx_Release(pbc);
354 hr = IMoniker_GetTimeOfLastChange(pmkObjectName, pbc,
NULL,
356 IBindCtx_Release(pbc);
368 IMoniker_Release(pmkObjectName);
376 IMoniker_Release(pmkObjectName);
381 MSHCTX_LOCAL | MSHCTX_NOSHAREDMEM,
NULL, MSHLFLAGS_TABLESTRONG);
398 IStream_Release(pStream);
399 IMoniker_Release(pmkObjectName);
439 TRACE(
"%p, %ld.\n", iface, dwRegister);
478 IMoniker_Release(pmkObjectName);
516 InterfaceData *
object =
NULL;
521 TRACE(
"(%p,%p,%p)\n",
This,pmkObjectName,ppunkObject);
523 if (ppunkObject ==
NULL)
532 IMoniker_Release(pmkObjectName);
549 IStream_Release(pStream);
559 TRACE(
"moniker unavailable locally, calling SCM\n");
569 IStream_Release(pStream);
573 WARN(
"Moniker unavailable, IrotGetObject returned %#lx\n",
hr);
595 TRACE(
"%p, %ld, %p.\n", iface, dwRegister, pfiletime);
633 TRACE(
"(%p,%p,%p)\n",
This,pmkObjectName,pfiletime);
635 if (pmkObjectName==
NULL || pfiletime==
NULL)
642 IMoniker_Release(pmkObjectName);
684 TRACE(
"(%p, %p)\n",
This, ppenumMoniker);
686 *ppenumMoniker =
NULL;
716 0, 0, { (
DWORD_PTR)(__FILE__
": RunningObjectTable_section") }
740 IRunningObjectTable_AddRef(*
ret);
764 LPCOLESTR szDisplayName,
788 if (((
start == szDisplayName) && (*
end ==
'\0')) || (
len <= 1))
806 hr = IMoniker_BindToObject(class_moniker, pbc,
NULL,
813 hr = IMoniker_BindToObject(class_moniker, pbc,
NULL,
817 hr = IClassFactory_CreateInstance(pcf,
NULL,
820 IClassFactory_Release(pcf);
823 IMoniker_Release(class_moniker);
826 hr = IParseDisplayName_ParseDisplayName(pdn, pbc,
829 IParseDisplayName_Release(pdn);
845 TRACE(
"(%p, %s, %p, %p)\n", pbc,
debugstr_w(szDisplayName), pchEaten, ppmk);
850 if (!szDisplayName || !*szDisplayName)
853 if (!pchEaten || !ppmk)
859 if (!
wcsnicmp(szDisplayName,
L"clsid:", 6))
884 *pchEaten += chEaten;
885 szDisplayName += chEaten;
927 const WCHAR *extension;
938 IStorage_Release(pstg);
1000 if (ppvObject ==
NULL)
1006 *ppvObject = &
This->IEnumMoniker_iface;
1010 IEnumMoniker_AddRef(iface);
1045 for (
i = 0;
i <
This->moniker_list->size;
i++)
1046 free(
This->moniker_list->interfaces[
i]);
1062 TRACE(
"%p, %lu, %p, %p.\n", iface, celt, rgelt, pceltFetched);
1065 for(
i = 0; (
This->pos <
This->moniker_list->size) && (
i < celt);
i++)
1075 if (pceltFetched !=
NULL)
1097 if (
This->pos + celt >=
This->moniker_list->size)
1136 moniker_list->size =
This->moniker_list->size;
1137 for (
i = 0;
i <
This->moniker_list->size;
i++)
1141 if (!moniker_list->interfaces[
i])
1144 for (
i = 0;
i <
end;
i++)
1145 free(moniker_list->interfaces[
i]);
1149 memcpy(moniker_list->interfaces[
i],
This->moniker_list->interfaces[
i],
size);
1192 This->pos = current_pos;
1193 This->moniker_list = moniker_list;
1195 *ppenumMoniker = &
This->IEnumMoniker_iface;
1231 IMarshal_AddRef(&
This->IMarshal_iface);
1263 return IMoniker_QueryInterface(
This->moniker,
riid,
ppv);
1269 return IMoniker_AddRef(
This->moniker);
1275 return IMoniker_Release(
This->moniker);
1280 void* pvDestContext,
DWORD mshlflags,
CLSID* pCid)
1285 dwDestContext, pvDestContext, mshlflags, pCid);
1287 return IMoniker_GetClassID(
This->moniker, pCid);
1292 void* pvDestContext,
DWORD mshlflags,
DWORD* pSize)
1299 dwDestContext, pvDestContext, mshlflags, pSize);
1301 hr = IMoniker_GetSizeMax(
This->moniker, &
size);
1309 void* pvDestContext,
DWORD mshlflags)
1314 dwDestContext, pvDestContext, mshlflags);
1316 return IMoniker_Save(
This->moniker, pStm,
FALSE);
1326 hr = IMoniker_Load(
This->moniker, pStm);
1369 This->moniker = inner;
#define CO_E_NOTINITIALIZED
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
const GUID IID_IClassFactory
HRESULT ClassMoniker_CreateFromDisplayName(LPBC pbc, const WCHAR *display_name, DWORD *eaten, IMoniker **moniker)
HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, IMoniker **moniker)
static struct regsvr_interface const interface_list[]
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID(LPCOLESTR progid, CLSID *clsid)
HRESULT WINAPI CoFileTimeNow(FILETIME *filetime)
HRESULT WINAPI GetHGlobalFromStream(IStream *stream, HGLOBAL *phglobal)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
HRESULT WINAPI CoReleaseMarshalData(IStream *stream)
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
HRESULT WINAPI ReadClassStg(IStorage *pstg, CLSID *pclsid)
HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn)
#define HeapFree(x, y, z)
HRESULT WINAPI PathCchFindExtension(const WCHAR *path, SIZE_T size, const WCHAR **extension)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static HRESULT WINAPI MonikerMarshal_MarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags)
static HRESULT WINAPI RunningObjectTableImpl_QueryInterface(IRunningObjectTable *iface, REFIID riid, void **ppvObject)
HRESULT WINAPI GetClassFile(LPCOLESTR filePathName, CLSID *pclsid)
static HRESULT WINAPI MonikerMarshal_DisconnectObject(LPMARSHAL iface, DWORD dwReserved)
HRESULT WINAPI InternalIrotEnumRunning(PInterfaceList *list)
HRESULT WINAPI InternalIrotGetObject(const MonikerComparisonData *moniker_data, PInterfaceData *obj, IrotCookie *cookie)
HRESULT WINAPI GetRunningObjectTable(DWORD reserved, IRunningObjectTable **ret)
static HRESULT WINAPI RunningObjectTableImpl_GetObject(IRunningObjectTable *iface, IMoniker *pmkObjectName, IUnknown **ppunkObject)
static HRESULT WINAPI EnumMonikerImpl_Reset(IEnumMoniker *iface)
static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparisonData **moniker_data)
static HRESULT WINAPI MonikerMarshalInner_QueryInterface(IUnknown *iface, REFIID riid, LPVOID *ppv)
static HRESULT reduce_moniker(IMoniker *pmk, IBindCtx *pbc, IMoniker **pmkReduced)
static EnumMonikerImpl * impl_from_IEnumMoniker(IEnumMoniker *iface)
static ULONG WINAPI EnumMonikerImpl_Release(IEnumMoniker *iface)
static HRESULT WINAPI EnumMonikerImpl_Clone(IEnumMoniker *iface, IEnumMoniker **ppenum)
void WINAPI DestroyRunningObjectTable(void)
HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LPDWORD pchEaten, LPMONIKER *ppmk)
static void rot_entry_delete(struct rot_entry *rot_entry)
static HRESULT WINAPI EnumMonikerImpl_Skip(IEnumMoniker *iface, ULONG celt)
static HRESULT get_moniker_for_progid_display_name(LPBC pbc, LPCOLESTR szDisplayName, LPDWORD pchEaten, LPMONIKER *ppmk)
static HRESULT WINAPI MonikerMarshal_GetMarshalSizeMax(LPMARSHAL iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize)
void *__RPC_USER MIDL_user_allocate(SIZE_T size)
static HRESULT WINAPI RunningObjectTableImpl_EnumRunning(IRunningObjectTable *iface, IEnumMoniker **ppenumMoniker)
static ULONG WINAPI MonikerMarshal_AddRef(IMarshal *iface)
HRESULT MonikerMarshal_Create(IMoniker *inner, IUnknown **outer)
static ULONG WINAPI MonikerMarshalInner_Release(IUnknown *iface)
static RTL_CRITICAL_SECTION_DEBUG critsect_debug
static HRESULT WINAPI RunningObjectTableImpl_Revoke(IRunningObjectTable *iface, DWORD dwRegister)
static HRESULT EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list, ULONG pos, IEnumMoniker **ppenumMoniker)
static HRESULT create_stream_on_mip_ro(const InterfaceData *mip, IStream **stream)
static HRESULT WINAPI RunningObjectTableImpl_Register(IRunningObjectTable *iface, DWORD flags, IUnknown *punkObject, IMoniker *pmkObjectName, DWORD *pdwRegister)
static MonikerMarshal * impl_from_IUnknown(IUnknown *iface)
static MonikerMarshal * impl_from_IMarshal(IMarshal *iface)
static const IUnknownVtbl VT_MonikerMarshalInner
HRESULT WINAPI InternalIrotNoteChangeTime(IrotCookie cookie, const FILETIME *time)
static RunningObjectTableImpl * impl_from_IRunningObjectTable(IRunningObjectTable *iface)
HRESULT WINAPI InternalIrotIsRunning(const MonikerComparisonData *moniker_data)
HRESULT WINAPI InternalIrotGetTimeOfLastChange(const MonikerComparisonData *moniker_data, FILETIME *time)
static HRESULT WINAPI MonikerMarshal_GetUnmarshalClass(LPMARSHAL iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
static HRESULT WINAPI MonikerMarshal_QueryInterface(IMarshal *iface, REFIID riid, LPVOID *ppv)
static ULONG WINAPI MonikerMarshalInner_AddRef(IUnknown *iface)
static ULONG WINAPI MonikerMarshal_Release(IMarshal *iface)
static HRESULT WINAPI EnumMonikerImpl_Next(IEnumMoniker *iface, ULONG celt, IMoniker **rgelt, ULONG *pceltFetched)
static ULONG WINAPI RunningObjectTableImpl_Release(IRunningObjectTable *iface)
static HRESULT WINAPI RunningObjectTableImpl_NoteChangeTime(IRunningObjectTable *iface, DWORD dwRegister, FILETIME *pfiletime)
static ULONG WINAPI EnumMonikerImpl_AddRef(IEnumMoniker *iface)
BOOL WINAPI InternalIsProcessInitialized(void)
static HRESULT WINAPI EnumMonikerImpl_QueryInterface(IEnumMoniker *iface, REFIID riid, void **ppvObject)
HRESULT WINAPI InternalIrotRegister(const MonikerComparisonData *moniker_data, const InterfaceData *object, const InterfaceData *moniker, const FILETIME *time, DWORD flags, IrotCookie *cookie, IrotContextHandle *ctxt_handle)
static RunningObjectTableImpl rot
static ULONG WINAPI RunningObjectTableImpl_AddRef(IRunningObjectTable *iface)
static HRESULT WINAPI MonikerMarshal_ReleaseMarshalData(LPMARSHAL iface, IStream *pStm)
static HRESULT WINAPI RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable *iface, IMoniker *pmkObjectName, FILETIME *pfiletime)
static HRESULT WINAPI RunningObjectTableImpl_IsRunning(IRunningObjectTable *iface, IMoniker *pmkObjectName)
void __RPC_USER MIDL_user_free(void *p)
static HRESULT WINAPI MonikerMarshal_UnmarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void **ppv)
static const IRunningObjectTableVtbl VT_RunningObjectTableImpl
static const IMarshalVtbl VT_MonikerMarshal
static const IEnumMonikerVtbl VT_EnumMonikerImpl
HRESULT WINAPI InternalIrotRevoke(IrotCookie cookie, IrotContextHandle *ctxt_handle, PInterfaceData *object, PInterfaceData *moniker)
HRESULT WINAPI StgOpenStorage(const OLECHAR *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen)
HRESULT FileMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LPDWORD pchEaten, IMoniker **ppmk)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
static ERESOURCE GlobalLock
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
#define memcpy(s1, s2, n)
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
#define STGM_SHARE_DENY_WRITE
interface IMoniker * LPMONIKER
interface IBindCtx * LPBC
interface IMarshal * LPMARSHAL
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
BOOL WINAPI IsValidInterface(LPUNKNOWN punk)
const GUID IID_IParseDisplayName
const GUID IID_IEnumMoniker
#define IsEqualIID(riid1, riid2)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
IEnumMoniker IEnumMoniker_iface
InterfaceList * moniker_list
IRunningObjectTable IRunningObjectTable_iface
LIST_ENTRY ProcessLocksList
IrotContextHandle ctxt_handle
MonikerComparisonData * moniker_data
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
_In_ PUSBD_INTERFACE_LIST_ENTRY InterfaceList
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define MK_E_INVALIDEXTENSION
#define HKEY_CLASSES_ROOT