117 *ppvObject = &
This->IROTData_iface;
119 *ppvObject = &
This->IMarshal_iface;
126 IMoniker_AddRef(iface);
149 TRACE(
"%p, refcount %lu\n", iface, refcount);
167 TRACE(
"(%p,%p)\n",iface,pClassID);
172 *pClassID = CLSID_CompositeMoniker;
187 TRACE(
"(%p)\n",iface);
207 WARN(
"Failed to read component count, hr %#lx.\n",
hr);
213 WARN(
"Unexpected component count %lu.\n",
count);
224 WARN(
"Failed to initialize component %lu, hr %#lx.\n",
i,
hr);
225 IMoniker_Release(
last);
229 IMoniker_Release(
last);
237 IMoniker_Release(
last);
294 TRACE(
"(%p,%p)\n",iface,pcbSize);
301 IMoniker_Enum(iface,
TRUE,&enumMk);
303 while(IEnumMoniker_Next(enumMk,1,&pmk,
NULL)==
S_OK){
305 IMoniker_GetSizeMax(pmk,&ptmpSize);
307 IMoniker_Release(pmk);
312 IEnumMoniker_Release(enumMk);
342 hr = IBindCtx_GetRunningObjectTable(pbc, &
rot);
345 hr = IRunningObjectTable_GetObject(
rot, iface, &
object);
346 IRunningObjectTable_Release(
rot);
350 IUnknown_Release(
object);
361 IMoniker_Release(
left);
369 IMoniker_Release(rightmost);
394 composed_left =
left;
395 IMoniker_AddRef(composed_left);
400 hr = IMoniker_BindToStorage(rightmost, pbc, composed_left,
riid,
result);
401 IMoniker_Release(composed_left);
404 IMoniker_Release(rightmost);
405 IMoniker_Release(
left);
414 IMoniker *
m, *reduced_left, *reduced_right;
418 TRACE(
"%p, %p, %ld, %p, %p.\n", iface, pbc, howfar, toleft, reduced);
420 if (!pbc || !reduced)
427 if (
FAILED(
hr = IMoniker_Reduce(
moniker->right, pbc, howfar, &
m, &reduced_right)))
429 IMoniker_Release(reduced_left);
433 if ((was_reduced = (reduced_left !=
moniker->left || reduced_right !=
moniker->right)))
440 IMoniker_AddRef(*reduced);
443 IMoniker_Release(reduced_left);
444 IMoniker_Release(reduced_right);
452 TRACE(
"%p, %p, %d, %p.\n", iface,
right, only_if_not_generic, composite);
500 TRACE(
"%p, %d, %p\n", iface, forward, ret_enum);
529 if (
moniker->comp_count != other_moniker->comp_count)
545 free(other_components);
554 DWORD left_hash, right_hash;
570 *
hash = left_hash ^ right_hash;
583 TRACE(
"%p, %p, %p, %p.\n", iface, pbc, toleft, newly_running);
592 hr = IMoniker_IsRunning(
c, pbc,
NULL, newly_running);
600 return IMoniker_IsEqual(iface, newly_running);
602 if (
FAILED(
hr = IBindCtx_GetRunningObjectTable(pbc, &
rot)))
605 hr = IRunningObjectTable_IsRunning(
rot, iface);
606 IRunningObjectTable_Release(
rot);
612 hr = IMoniker_IsRunning(rightmost, pbc,
left,
NULL);
614 IMoniker_Release(
left);
615 IMoniker_Release(rightmost);
628 TRACE(
"%p, %p, %p, %p.\n", iface, pbc, toleft, changetime);
630 if (!changetime || !pbc)
644 composed_left =
left;
645 IMoniker_AddRef(composed_left);
647 IMoniker_AddRef(running);
654 if (IRunningObjectTable_GetTimeOfLastChange(
rot, running, changetime) !=
S_OK)
655 hr = IMoniker_GetTimeOfLastChange(rightmost, pbc, composed_left, changetime);
656 IRunningObjectTable_Release(
rot);
661 IMoniker_Release(composed_left);
663 IMoniker_Release(running);
664 IMoniker_Release(rightmost);
665 IMoniker_Release(
left);
673 IMoniker *right_inverted, *left_inverted;
676 TRACE(
"%p, %p.\n", iface, inverse);
686 IMoniker_Release(right_inverted);
692 IMoniker_Release(left_inverted);
693 IMoniker_Release(right_inverted);
702 unsigned int i,
count, prefix_len = 0;
731 if (!(prefix_components =
calloc(
count,
sizeof(*prefix_components))))
734 free(other_components);
745 prefix_components[prefix_len++] =
p;
751 free(other_components);
755 free(prefix_components);
759 last = prefix_components[0];
760 for (
i = 1;
i < prefix_len; ++
i)
763 IMoniker_Release(
last);
764 IMoniker_Release(prefix_components[
i]);
768 free(prefix_components);
775 else if (prefix_len <
count)
787 if ((
hr = IMoniker_IsEqual(leftmost,
other)) ==
S_OK)
794 IMoniker_Release(leftmost);
807 IMoniker_AddRef(
last);
812 IMoniker_Release(
last);
825 unsigned int count, this_count, other_count, prefix_len = 0;
828 unsigned int start = 0, other_start = 0;
831 TRACE(
"%p, %p, %p.\n", iface,
other, relpath);
846 count =
min(other_count, this_count);
847 while (IMoniker_IsEqual(
components[prefix_len], other_components[prefix_len]) ==
S_OK)
849 if (++prefix_len ==
count)
break;
854 this_count -= prefix_len;
855 other_count -= prefix_len;
856 other_start += prefix_len;
863 *other_components = rel;
874 hr = IMoniker_Inverse(
tail, &inv);
875 IMoniker_Release(
tail);
883 if (
tail || other_tail)
888 IMoniker_AddRef(*relpath);
893 IMoniker_Release(rel);
895 IMoniker_Release(
tail);
897 IMoniker_Release(other_tail);
899 free(other_components);
912 TRACE(
"%p, %p, %p, %p\n", iface, pbc, pmkToLeft, displayname);
914 if (!pbc || !displayname || !
moniker->comp_count)
947 TRACE(
"%p, %p, %p, %s, %p, %p.\n", iface, pbc, pmkToLeft,
debugstr_w(
name), eaten,
result);
958 IMoniker_Release(
left);
959 IMoniker_Release(rightmost);
970 TRACE(
"(%p,%p)\n",iface,pwdMksys);
975 (*pwdMksys)=MKSYS_GENERICCOMPOSITE;
1002 TRACE(
"(%p)\n",iface);
1004 return IMoniker_AddRef(&
This->IMoniker_iface);
1014 TRACE(
"(%p)\n",iface);
1016 return IMoniker_Release(&
This->IMoniker_iface);
1025 if (
FAILED(
hr = IMoniker_QueryInterface(
moniker, &IID_IROTData, (
void **)&rot_data)))
1027 WARN(
"Failed to get IROTData for component moniker, hr %#lx.\n",
hr);
1031 hr = IROTData_GetComparisonData(rot_data,
data, max_len,
ret_len);
1032 IROTData_Release(rot_data);
1058 WARN(
"Failed to get comparison data length for left component, hr %#lx.\n",
hr);
1068 WARN(
"Failed to get comparison data length for right component, hr %#lx.\n",
hr);
1077 max_len -=
sizeof(
CLSID);
1080 WARN(
"Failed to get comparison data for left component, hr %#lx.\n",
hr);
1087 WARN(
"Failed to get comparison data for right component, hr %#lx.\n",
hr);
1107 TRACE(
"(%p)\n",iface);
1116 TRACE(
"(%p)\n",iface);
1123 void* pvDestContext,
DWORD mshlflags,
CLSID* pCid)
1128 dwDestContext, pvDestContext, mshlflags, pCid);
1130 return IMoniker_GetClassID(&
This->IMoniker_iface, pCid);
1135 void* pvDestContext,
DWORD mshlflags,
DWORD* pSize)
1142 dwDestContext, pvDestContext, mshlflags, pSize);
1150 pvDestContext, mshlflags)))
1157 pvDestContext, mshlflags)))
1172 TRACE(
"%p, %p, %s, %p, %lx, %p, %#lx\n", iface,
stream,
debugstr_guid(
riid), pv, dwDestContext, pvDestContext,
flags);
1179 WARN(
"Failed to marshal left component, hr %#lx.\n",
hr);
1184 WARN(
"Failed to marshal right component, hr %#lx.\n",
hr);
1199 IMoniker_Release(
moniker->left);
1205 IMoniker_Release(
moniker->right);
1211 WARN(
"Failed to unmarshal left moniker, hr %#lx.\n",
hr);
1217 WARN(
"Failed to unmarshal right moniker, hr %#lx.\n",
hr);
1226 TRACE(
"(%p)\n", pStm);
1263 if ((*ppvObject)==0)
1267 IEnumMoniker_AddRef(iface);
1292 TRACE(
"%p, refcount %lu.\n", iface, refcount);
1296 for (
i = 0;
i <
e->count; ++
i)
1297 IMoniker_Release(
e->monikers[
i]);
1311 TRACE(
"%p, %lu, %p, %p.\n", iface,
count,
m, fetched);
1319 for (
i = 0; (
e->pos <
e->count) && (
i <
count); ++
i)
1321 m[
i] =
e->monikers[
e->pos++];
1322 IMoniker_AddRef(
m[
i]);
1340 if ((
e->pos +
count) >=
e->count)
1352 TRACE(
"%p.\n", iface);
1387 if (!(
object =
calloc(1,
sizeof(*
object))))
1392 object->count =
count;
1403 IMoniker_AddRef(
object->monikers[
i]);
1406 *
ret = &
object->IEnumMoniker_iface;
1487 IMoniker_AddRef(
node->moniker);
1512 IMoniker_Release(
node->moniker);
1529 if (
node->parent->left ==
node)
node->parent->left = replace_with;
1530 else node->parent->right = replace_with;
1533 else if (replace_with->
moniker)
1537 IMoniker_AddRef(
node->moniker);
1559 IMoniker_Release(
node->moniker);
1566 IMoniker *left_moniker, *right_moniker;
1583 IMoniker_Release(left_moniker);
1588 IMoniker_Release(left_moniker);
1589 IMoniker_Release(right_moniker);
1615 IMoniker_AddRef(*
left);
1616 *rightmost = composite->
right;
1617 IMoniker_AddRef(*rightmost);
1628 WARN(
"Couldn't get right most component.\n");
1633 *rightmost =
node->moniker;
1634 IMoniker_AddRef(*rightmost);
1641 IMoniker_Release(*rightmost);
1655 *leftmost = composite->
left;
1656 IMoniker_AddRef(*leftmost);
1665 WARN(
"Couldn't get left most component.\n");
1670 *leftmost =
node->moniker;
1671 IMoniker_AddRef(*leftmost);
1681 struct comp_node *left_tree, *right_tree;
1682 unsigned int modified = 0;
1700 if (
FAILED(IMoniker_ComposeWith(
l->moniker,
r->moniker,
TRUE, &
c)))
break;
1706 IMoniker_Release(
l->moniker);
1717 IMoniker_AddRef(*new_left);
1719 IMoniker_AddRef(*new_right);
1736 if (*new_left) IMoniker_Release(*new_left);
1737 if (*new_right) IMoniker_Release(*new_right);
1738 *new_left = *new_right =
NULL;
1752 if (!(
object =
calloc(1,
sizeof(*
object))))
1769 IMoniker_Release(&
object->IMoniker_iface);
1773 if (!new_left || !new_right)
1775 *
moniker = new_left ? new_left : new_right;
1776 IMoniker_Release(&
object->IMoniker_iface);
1780 object->left = new_left;
1781 object->right = new_right;
1801 IMoniker_AddRef(*composite);
1807 IMoniker_AddRef(*composite);
1822 FIXME(
"(),stub!\n");
1843 hr = IMoniker_QueryInterface(pMoniker,
riid,
ppv);
1844 IMoniker_Release(pMoniker);
struct outqueuenode * tail
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static HRESULT WINAPI EnumMonikerImpl_Skip(IEnumMoniker *iface, ULONG count)
static CompositeMonikerImpl * impl_from_IMarshal(IMarshal *iface)
static void moniker_tree_discard(struct comp_node *node, BOOL left)
static HRESULT WINAPI CompositeMonikerMarshalImpl_DisconnectObject(IMarshal *iface, DWORD dwReserved)
static CompositeMonikerImpl * impl_from_IMoniker(IMoniker *iface)
static HRESULT WINAPI CompositeMonikerImpl_CommonPrefixWith(IMoniker *iface, IMoniker *other, IMoniker **prefix)
static void moniker_tree_replace_node(struct comp_node *node, struct comp_node *replace_with)
static ULONG WINAPI CompositeMonikerImpl_Release(IMoniker *iface)
static const IMarshalVtbl VT_MarshalImpl
HRESULT WINAPI MonikerCommonPrefixWith(IMoniker *pmkThis, IMoniker *pmkOther, IMoniker **ppmkCommon)
static HRESULT WINAPI CompositeMonikerImpl_GetTimeOfLastChange(IMoniker *iface, IBindCtx *pbc, IMoniker *toleft, FILETIME *changetime)
static HRESULT WINAPI EnumMonikerImpl_Reset(IEnumMoniker *iface)
static EnumMonikerImpl * impl_from_IEnumMoniker(IEnumMoniker *iface)
static HRESULT WINAPI CompositeMonikerMarshalImpl_UnmarshalInterface(IMarshal *iface, IStream *stream, REFIID riid, void **ppv)
static ULONG WINAPI EnumMonikerImpl_Release(IEnumMoniker *iface)
static HRESULT WINAPI CompositeMonikerImpl_GetSizeMax(IMoniker *iface, ULARGE_INTEGER *pcbSize)
static HRESULT WINAPI CompositeMonikerMarshalImpl_MarshalInterface(IMarshal *iface, IStream *stream, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD flags)
static CompositeMonikerImpl * impl_from_IROTData(IROTData *iface)
static HRESULT create_enumerator(IMoniker **components, unsigned int count, BOOL forward, IEnumMoniker **ret)
static HRESULT create_composite(IMoniker *left, IMoniker *right, IMoniker **moniker)
static HRESULT composite_compose_components(IMoniker **comp, unsigned int count, IMoniker **ret)
static HRESULT WINAPI CompositeMonikerImpl_IsSystemMoniker(IMoniker *iface, DWORD *pwdMksys)
static ULONG WINAPI CompositeMonikerMarshalImpl_AddRef(IMarshal *iface)
static HRESULT WINAPI CompositeMonikerROTDataImpl_QueryInterface(IROTData *iface, REFIID riid, VOID **ppvObject)
static HRESULT WINAPI CompositeMonikerImpl_Reduce(IMoniker *iface, IBindCtx *pbc, DWORD howfar, IMoniker **toleft, IMoniker **reduced)
struct EnumMonikerImpl EnumMonikerImpl
static const IMonikerVtbl VT_CompositeMonikerImpl
static HRESULT WINAPI CompositeMonikerMarshalImpl_QueryInterface(IMarshal *iface, REFIID riid, LPVOID *ppv)
static HRESULT WINAPI EnumMonikerImpl_Clone(IEnumMoniker *iface, IEnumMoniker **ret)
static HRESULT WINAPI CompositeMonikerImpl_ParseDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR name, ULONG *eaten, IMoniker **result)
static ULONG WINAPI CompositeMonikerImpl_AddRef(IMoniker *iface)
static struct comp_node * moniker_tree_get_rightmost(struct comp_node *root)
static HRESULT WINAPI CompositeMonikerImpl_Enum(IMoniker *iface, BOOL forward, IEnumMoniker **ret_enum)
static CompositeMonikerImpl * unsafe_impl_from_IMoniker(IMoniker *iface)
static void composite_get_components(IMoniker *moniker, IMoniker **components, unsigned int *index)
static HRESULT WINAPI EnumMonikerImpl_Next(IEnumMoniker *iface, ULONG count, IMoniker **m, ULONG *fetched)
HRESULT WINAPI CompositeMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv)
static ULONG WINAPI CompositeMonikerMarshalImpl_Release(IMarshal *iface)
static HRESULT WINAPI CompositeMonikerImpl_BindToObject(IMoniker *iface, IBindCtx *pbc, IMoniker *toleft, REFIID riid, void **result)
static const IROTDataVtbl VT_ROTDataImpl
static ULONG WINAPI CompositeMonikerROTDataImpl_AddRef(IROTData *iface)
static HRESULT composite_get_leftmost(CompositeMonikerImpl *composite, IMoniker **leftmost)
static HRESULT WINAPI CompositeMonikerImpl_Inverse(IMoniker *iface, IMoniker **inverse)
static HRESULT composite_save_components(IMoniker *moniker, IStream *stream)
static void moniker_tree_node_release(struct comp_node *node)
static HRESULT WINAPI CompositeMonikerImpl_GetClassID(IMoniker *iface, CLSID *pClassID)
static HRESULT composite_get_moniker_comparison_data(IMoniker *moniker, BYTE *data, ULONG max_len, ULONG *ret_len)
static HRESULT WINAPI CompositeMonikerROTDataImpl_GetComparisonData(IROTData *iface, BYTE *data, ULONG max_len, ULONG *ret_len)
static HRESULT WINAPI CompositeMonikerImpl_IsEqual(IMoniker *iface, IMoniker *other)
static HRESULT WINAPI CompositeMonikerImpl_IsRunning(IMoniker *iface, IBindCtx *pbc, IMoniker *toleft, IMoniker *newly_running)
static HRESULT WINAPI CompositeMonikerMarshalImpl_GetUnmarshalClass(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
static HRESULT compose_with(IMoniker *left, IMoniker *right, IMoniker **c)
static HRESULT WINAPI CompositeMonikerImpl_IsDirty(IMoniker *iface)
static HRESULT moniker_get_tree_representation(IMoniker *moniker, struct comp_node *parent, struct comp_node **ret)
static void moniker_get_tree_comp_count(const struct comp_node *root, unsigned int *count)
static struct comp_node * moniker_tree_get_leftmost(struct comp_node *root)
static HRESULT WINAPI CompositeMonikerImpl_Hash(IMoniker *iface, DWORD *hash)
static HRESULT WINAPI CompositeMonikerImpl_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *toleft, REFIID riid, void **result)
static HRESULT WINAPI CompositeMonikerImpl_GetDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *displayname)
static ULONG WINAPI EnumMonikerImpl_AddRef(IEnumMoniker *iface)
static HRESULT WINAPI CompositeMonikerImpl_QueryInterface(IMoniker *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI CompositeMonikerMarshalImpl_GetMarshalSizeMax(IMarshal *iface, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize)
static HRESULT WINAPI CompositeMonikerMarshalImpl_ReleaseMarshalData(IMarshal *iface, IStream *pStm)
static HRESULT WINAPI CompositeMonikerImpl_Load(IMoniker *iface, IStream *stream)
static void moniker_tree_release(struct comp_node *node)
static HRESULT composite_get_rightmost(CompositeMonikerImpl *composite, IMoniker **left, IMoniker **rightmost)
static HRESULT moniker_simplify_composition(IMoniker *left, IMoniker *right, unsigned int *count, IMoniker **new_left, IMoniker **new_right)
static HRESULT moniker_create_from_tree(const struct comp_node *root, unsigned int *count, IMoniker **moniker)
static HRESULT WINAPI EnumMonikerImpl_QueryInterface(IEnumMoniker *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI CompositeMonikerImpl_RelativePathTo(IMoniker *iface, IMoniker *other, IMoniker **relpath)
static ULONG WINAPI CompositeMonikerROTDataImpl_Release(IROTData *iface)
static HRESULT WINAPI CompositeMonikerImpl_ComposeWith(IMoniker *iface, IMoniker *right, BOOL only_if_not_generic, IMoniker **composite)
static HRESULT composite_get_components_alloc(IMoniker *iface, unsigned int *count, IMoniker ***components)
static const IEnumMonikerVtbl VT_EnumMonikerImpl
HRESULT WINAPI CreateGenericComposite(IMoniker *left, IMoniker *right, IMoniker **composite)
static HRESULT WINAPI CompositeMonikerImpl_Save(IMoniker *iface, IStream *stream, BOOL clear_dirty)
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
HRESULT WINAPI CoGetMarshalSizeMax(ULONG *size, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
HRESULT WINAPI OleLoadFromStream(IStream *pStm, REFIID iidInterface, void **ppvObj)
HRESULT WINAPI OleSaveToStream(IPersistStream *pPStm, IStream *pStm)
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLenum GLenum GLuint components
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
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
#define memcpy(s1, s2, n)
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
const GUID IID_IEnumMoniker
const GUID IID_IPersistStream
#define IsEqualIID(riid1, riid2)
IEnumMoniker IEnumMoniker_iface
struct comp_node * parent
Character const *const prefix
#define CONTAINING_RECORD(address, type, field)
#define MK_S_REDUCED_TO_SELF
#define CLASS_E_NOAGGREGATION