67#define NONAMELESSUNION
114 if(off == 0)
return NULL;
115 return (DVTARGETDEVICE*)((
char*)
data + off);
128 if(
data->entries[
idx].fmtetc.ptd ==
NULL)
return 0;
129 return (
char*)
data->entries[
idx].fmtetc.ptd - (
char*)
data;
182 0, 0, { (
DWORD_PTR)(__FILE__
": clipboard last snapshot") }
201static const WCHAR clipbrd_wndclass[] = {
'C',
'L',
'I',
'P',
'B',
'R',
'D',
'W',
'N',
'D',
'C',
'L',
'A',
'S',
'S',0};
219 if (!
fmt)
return "(null)";
266 TRACE(
"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
270 TRACE(
"-- Interface: E_NOINTERFACE\n");
301 TRACE(
"() - destroying IEnumFORMATETC(%p)\n",
This);
324 cfetch =
This->data->count -
This->pos;
331 for(
i = 0;
i < cfetch;
i++)
344 *pceltFethed = cfetch;
407 for(
i = 0;
i <
This->data->count;
i++)
414static const IEnumFORMATETCVtbl
efvt =
443 TRACE(
"(%p)->()\n", ef);
455 void *src_ptr, *dst_ptr;
496 if (!dest_ptr)
return E_FAIL;
553 BitBlt(dest_dc, 0, 0, bm.bmWidth, bm.bmHeight, src_dc, 0, 0,
SRCCOPY);
577 std.tymed =
fmt->tymed = TYMED_ISTORAGE;
589 ILockBytes_Release(ptrILockBytes);
593 WARN(
"() : IDataObject_GetDataHere failed to render clipboard data! (%x)\n",
hr);
606 fmt2.dwAspect = DVASPECT_CONTENT;
608 fmt2.tymed = TYMED_MFPICT;
610 memset(&std2, 0,
sizeof(STGMEDIUM));
611 std2.tymed = TYMED_MFPICT;
622 OLECHAR name[]={ 2,
'O',
'l',
'e',
'P',
'r',
'e',
's',
'0',
'0',
'0', 0};
629 CHAR strOleTypeName[51];
630 BYTE OlePresStreamHeader [] =
632 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00,
633 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
634 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
635 0x00, 0x00, 0x00, 0x00
641 memcpy(&
pdh, OlePresStreamHeader,
sizeof(OlePresStreamHeader));
643 pdh.dwObjectExtentX = mfp->
xExt;
644 pdh.dwObjectExtentY = mfp->
yExt;
656 IStream_Release(pStream);
675 WARN(
"() : Failed to set rendered clipboard data into clipboard!\n");
693 if(entries[
i].fmtetc.cfFormat ==
cf)
722 ILockBytes_Release(lbs);
731 med.tymed = stg_fmt.tymed = TYMED_ISTORAGE;
733 med.pUnkForRelease =
NULL;
735 hr = IDataObject_GetDataHere(
data, &stg_fmt, &med);
738 memset(&med, 0,
sizeof(med));
739 hr = IDataObject_GetData(
data, &stg_fmt, &med);
742 hr = IStorage_CopyTo(med.u.pstg, 0,
NULL,
NULL, stg);
749 IStorage_Release(stg);
776 med.tymed = stm_fmt.tymed = TYMED_ISTREAM;
778 med.pUnkForRelease =
NULL;
780 hr = IDataObject_GetDataHere(
data, &stm_fmt, &med);
786 memset(&med, 0,
sizeof(med));
787 hr = IDataObject_GetData(
data, &stm_fmt, &med);
791 IStream_Seek(med.u.pstm, offs, STREAM_SEEK_CUR, &
pos);
792 IStream_Seek(med.u.pstm, offs, STREAM_SEEK_SET,
NULL);
798 IStream_Release(stm);
802 if(stm) IStream_Release(stm);
822 mem_fmt.tymed = TYMED_HGLOBAL;
823 memset(&med, 0,
sizeof(med));
825 hr = IDataObject_GetData(
data, &mem_fmt, &med);
850 mem_fmt.tymed = TYMED_ENHMF;
851 memset(&med, 0,
sizeof(med));
853 hr = IDataObject_GetData(
data, &mem_fmt, &med);
878 mem_fmt.tymed = TYMED_MFPICT;
879 memset(&med, 0,
sizeof(med));
881 hr = IDataObject_GetData(
data, &mem_fmt, &med);
908 mem_fmt.tymed = TYMED_GDI;
909 memset(&med, 0,
sizeof(med));
911 hr = IDataObject_GetData(
data, &mem_fmt, &med);
940 if(
fmt->tymed & TYMED_ISTORAGE)
944 else if(
fmt->tymed & TYMED_ISTREAM)
948 else if(
fmt->tymed & TYMED_HGLOBAL)
952 else if(
fmt->tymed & TYMED_ENHMF)
956 else if(
fmt->tymed & TYMED_MFPICT)
961 else if(
fmt->tymed & TYMED_GDI)
968 FIXME(
"Unhandled tymed %x\n",
fmt->tymed);
976 WARN(
"() : Failed to set rendered clipboard data into clipboard!\n");
977 if(
fmt->tymed & TYMED_MFPICT)
979 else if(
fmt->tymed & TYMED_GDI)
1062 if(
This->data) IDataObject_Release(
This->data);
1122 IStream_Seek(stm,
pos, STREAM_SEEK_SET,
NULL);
1125 IStream_Release(stm);
1134 if(
cf >= 0xc000)
return TYMED_ISTREAM | TYMED_HGLOBAL;
1141 return TYMED_ISTREAM | TYMED_HGLOBAL;
1145 return TYMED_MFPICT;
1149 FIXME(
"returning TYMED_NULL for cf %04x\n",
cf);
1186 for(
i = 0;
i <
ret->count;
i++)
1187 ret->entries[
i].fmtetc.ptd =
1216 ret->entries[
idx].fmtetc.cfFormat =
cf;
1218 ret->entries[
idx].fmtetc.dwAspect = DVASPECT_CONTENT;
1219 ret->entries[
idx].fmtetc.lindex = -1;
1221 ret->entries[
idx].first_use = 1;
1238 med->pUnkForRelease =
NULL;
1239 med->tymed = TYMED_NULL;
1258 med->pUnkForRelease =
NULL;
1259 med->tymed = TYMED_NULL;
1271 med->tymed = TYMED_ISTREAM;
1286 med->pUnkForRelease =
NULL;
1287 med->tymed = TYMED_NULL;
1302 ILockBytes_Release(lbs);
1308 ILockBytes_Release(lbs);
1315 med->tymed = TYMED_ISTORAGE;
1326 med->pUnkForRelease =
NULL;
1327 med->tymed = TYMED_NULL;
1331 med->tymed = TYMED_ENHMF;
1344 med->pUnkForRelease =
NULL;
1345 med->tymed = TYMED_NULL;
1352 med->tymed = TYMED_GDI;
1358 const WCHAR *str1, *str2;
1360 if(off1 == 0 && off2 == 0)
return TRUE;
1361 if(off1 == 0 || off2 == 0)
return FALSE;
1363 str1 = (
const WCHAR*)((
const char*)t1 + off1);
1364 str2 = (
const WCHAR*)((
const char*)t2 + off2);
1366 return !
wcscmp(str1, str2);
1369static inline BOOL td_equal(
const DVTARGETDEVICE *t1,
const DVTARGETDEVICE *t2)
1374 if(!
string_off_equal(t1, t1->tdDriverNameOffset, t2, t2->tdDriverNameOffset))
1376 if(!
string_off_equal(t1, t1->tdDeviceNameOffset, t2, t2->tdDeviceNameOffset))
1403 memset(med, 0,
sizeof(*med));
1412 hr = IDataObject_GetData(
This->data,
fmt, med);
1419 if(
fmt->lindex != -1)
1443 if(!
mask && (
entry->fmtetc.tymed & (TYMED_ISTREAM | TYMED_HGLOBAL | TYMED_ISTORAGE)))
1444 mask =
fmt->tymed & (TYMED_ISTREAM | TYMED_HGLOBAL | TYMED_ISTORAGE);
1462 if(
mask & TYMED_HGLOBAL)
1464 else if(
mask & TYMED_ISTREAM)
1466 else if(
mask & TYMED_ISTORAGE)
1468 else if(
mask & TYMED_ENHMF)
1470 else if(
mask & TYMED_GDI)
1474 FIXME(
"Unhandled tymed - mask %x req tymed %x\n",
mask,
fmt->tymed);
1509 hr = IDataObject_GetDataHere(
This->data,
fmt, med);
1535 supported =
entry->fmtetc.tymed;
1538 supported = TYMED_HGLOBAL;
1547 if(dst_size >= src_size)
1563 hr = IStream_Write(med->u.pstm,
src, src_size,
NULL);
1567 case TYMED_ISTORAGE:
1570 if(!(supported & TYMED_ISTORAGE))
1584 FIXME(
"Unhandled tymed - supported %x req tymed %x\n", supported, med->tymed);
1622 TRACE(
"(%p, %p, %p)\n", iface, fmt_in, fmt_out);
1636 STGMEDIUM *med,
BOOL release)
1638 TRACE(
"(%p, %p, %p, %d): not implemented\n", iface,
fmt, med, release);
1652 TRACE(
"(%p, %x, %p)\n", iface,
dir, enum_fmt);
1679 TRACE(
"(%p, %p, %x, %p, %p): not implemented\n", iface,
fmt,
flags,
sink, conn);
1690 TRACE(
"(%p, %d): not implemented\n", iface, conn);
1702 TRACE(
"(%p, %p): not implemented\n", iface, enum_advise);
1735 This->seq_no = seq_no;
1746 static const WCHAR OwnerLink[] = {
'O',
'w',
'n',
'e',
'r',
'L',
'i',
'n',
'k',0};
1747 static const WCHAR FileName[] = {
'F',
'i',
'l',
'e',
'N',
'a',
'm',
'e',0};
1748 static const WCHAR FileNameW[] = {
'F',
'i',
'l',
'e',
'N',
'a',
'm',
'e',
'W',0};
1749 static const WCHAR DataObject[] = {
'D',
'a',
't',
'a',
'O',
'b',
'j',
'e',
'c',
't',0};
1750 static const WCHAR EmbeddedObject[] = {
'E',
'm',
'b',
'e',
'd',
'd',
'e',
'd',
' ',
'O',
'b',
'j',
'e',
'c',
't',0};
1751 static const WCHAR EmbedSource[] = {
'E',
'm',
'b',
'e',
'd',
' ',
'S',
'o',
'u',
'r',
'c',
'e',0};
1752 static const WCHAR CustomLinkSource[] = {
'C',
'u',
's',
't',
'o',
'm',
' ',
'L',
'i',
'n',
'k',
' ',
'S',
'o',
'u',
'r',
'c',
'e',0};
1753 static const WCHAR LinkSource[] = {
'L',
'i',
'n',
'k',
' ',
'S',
'o',
'u',
'r',
'c',
'e',0};
1754 static const WCHAR ObjectDescriptor[] = {
'O',
'b',
'j',
'e',
'c',
't',
' ',
'D',
'e',
's',
'c',
'r',
'i',
'p',
't',
'o',
'r',0};
1755 static const WCHAR LinkSourceDescriptor[] = {
'L',
'i',
'n',
'k',
' ',
'S',
'o',
'u',
'r',
'c',
'e',
' ',
1756 'D',
'e',
's',
'c',
'r',
'i',
'p',
't',
'o',
'r',0};
1757 static const WCHAR OlePrivateData[] = {
'O',
'l',
'e',
' ',
'P',
'r',
'i',
'v',
'a',
't',
'e',
' ',
'D',
'a',
't',
'a',0};
1759 static const WCHAR WineMarshalledDataObject[] = {
'W',
'i',
'n',
'e',
' ',
'M',
'a',
'r',
's',
'h',
'a',
'l',
'l',
'e',
'd',
' ',
1760 'D',
'a',
't',
'a',
'O',
'b',
'j',
'e',
'c',
't',0};
1793 if (!clipbrd)
return;
1837 hr = IDataObject_EnumFormatEtc(
data, DATADIR_GET, &enum_fmt);
1840 while(IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL) ==
S_OK)
1843 needed +=
sizeof(priv_data->
entries[0]);
1846 needed +=
fmt.ptd->tdSize;
1855 needed +=
sizeof(priv_data->
entries[0]);
1859 priv_data->
unk1 = 0;
1860 priv_data->
size = needed;
1861 priv_data->
unk2 = 1;
1863 priv_data->
unk3[0] = 0;
1864 priv_data->
unk3[1] = 0;
1866 IEnumFORMATETC_Reset(enum_fmt);
1871 while(IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL) ==
S_OK)
1878 memcpy((
char*)priv_data + target_offset,
fmt.ptd,
fmt.ptd->tdSize);
1880 target_offset +=
fmt.ptd->tdSize;
1894 IEnumFORMATETC_Release(enum_fmt);
1943 pos.QuadPart =
size.QuadPart = 0;
1945 IStream_Seek(stm,
pos, STREAM_SEEK_SET,
NULL);
1947 IStream_Seek(stm,
pos, STREAM_SEEK_SET,
NULL);
1948 IStream_SetSize(stm,
size);
2000 IDataObject_Release(clipbrd->
src_data);
2010 IDataObject_AddRef(
data);
2015 MSHCTX_LOCAL,
NULL, MSHLFLAGS_TABLESTRONG);
2016 IUnknown_Release(unk);
2035 static const WCHAR ole32W[] = {
'o',
'l',
'e',
'3',
'2',0};
2042 IDataObject_AddRef(clipbrd->
src_data);
2082 TRACE(
"(): WM_RENDERFORMAT(cfFormat=%x)\n",
cf);
2098 TRACE(
"(): WM_RENDERALLFORMATS\n");
2104 if(entries[
i].first_use)
2112 TRACE(
"(): WM_DESTROYCLIPBOARD\n");
2132 static const WCHAR ole32W[] = {
'o',
'l',
'e',
'3',
'2',0};
2133 static const WCHAR title[] = {
'C',
'l',
'i',
'p',
'b',
'o',
'a',
'r',
'd',
'W',
'i',
'n',
'd',
'o',
'w',0};
2136 class.cbSize =
sizeof(
class);
2139 class.cbClsExtra = 0;
2140 class.cbWndExtra = 0;
2141 class.hInstance =
hinst;
2144 class.hbrBackground = 0;
2145 class.lpszMenuName =
NULL;
2147 class.hIconSm =
NULL;
2278 IDataObject_AddRef(*
obj);
#define CO_E_NOTINITIALIZED
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
static HRESULT copy_formatetc(FORMATETC *dst, const FORMATETC *src)
static struct oletls * COM_CurrentInfo(void)
const char * wine_dbg_sprintf(const char *format,...)
#define HeapFree(x, y, z)
#define WideCharToMultiByte
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
static HRESULT get_data_from_storage(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
static HRESULT get_data_from_enhmetafile(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
static HRESULT render_format(IDataObject *data, LPFORMATETC fmt)
static HRESULT dup_metafilepict(HGLOBAL src, HGLOBAL *pdest)
static void release_marshal_data(IStream *stm)
static HRESULT WINAPI snapshot_QueryInterface(IDataObject *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Skip(LPENUMFORMATETC iface, ULONG celt)
static HRESULT set_clipboard_formats(ole_clipbrd *clipbrd, IDataObject *data)
static HRESULT get_stgmed_for_stream(HGLOBAL h, STGMEDIUM *med)
static DWORD_PTR td_get_offs(ole_priv_data *data, DWORD idx)
HRESULT WINAPI OleIsCurrentClipboard(IDataObject *data)
static HRESULT WINAPI snapshot_QueryGetData(IDataObject *iface, FORMATETC *fmt)
static DVTARGETDEVICE * td_offs_to_ptr(ole_priv_data *data, DWORD_PTR off)
static HRESULT WINAPI snapshot_GetDataHere(IDataObject *iface, FORMATETC *fmt, STGMEDIUM *med)
static HWND create_clipbrd_window(void)
static BOOL string_off_equal(const DVTARGETDEVICE *t1, WORD off1, const DVTARGETDEVICE *t2, WORD off2)
UINT dataobject_clipboard_format
static HRESULT get_stgmed_for_global(HGLOBAL h, STGMEDIUM *med)
static HRESULT get_current_dataobject(IDataObject **data)
UINT ole_private_data_clipboard_format
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_QueryInterface(LPENUMFORMATETC iface, REFIID riid, LPVOID *ppvObj)
static HRESULT dup_bitmap(HBITMAP src, HBITMAP *pdest)
static void free_metafilepict(HGLOBAL src)
static HRESULT get_data_from_global(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Clone(LPENUMFORMATETC iface, LPENUMFORMATETC *obj)
static HRESULT WINAPI snapshot_GetData(IDataObject *iface, FORMATETC *fmt, STGMEDIUM *med)
static void register_clipboard_formats(void)
void OLEClipbrd_Initialize(void)
HRESULT WINAPI OleSetClipboard(IDataObject *data)
UINT embedded_object_clipboard_format
static HRESULT get_stgmed_for_storage(HGLOBAL h, STGMEDIUM *med)
static BOOL td_equal(const DVTARGETDEVICE *t1, const DVTARGETDEVICE *t2)
static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_AddRef(LPENUMFORMATETC iface)
struct PresentationDataHeader PresentationDataHeader
static CRITICAL_SECTION_DEBUG latest_snapshot_cs_debug
static HRESULT dup_global_mem(HGLOBAL src, DWORD flags, HGLOBAL *dst)
static HRESULT set_src_dataobject(ole_clipbrd *clipbrd, IDataObject *data)
UINT filenameW_clipboard_format
static snapshot * impl_from_IDataObject(IDataObject *iface)
static HRESULT WINAPI snapshot_DUnadvise(IDataObject *iface, DWORD conn)
static const IDataObjectVtbl snapshot_vtable
static HRESULT get_priv_data(ole_priv_data **data)
UINT filename_clipboard_format
static UINT wine_marshal_clipboard_format
static HWND get_current_ole_clip_window(void)
static const IEnumFORMATETCVtbl efvt
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Reset(LPENUMFORMATETC iface)
static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_Release(LPENUMFORMATETC iface)
static HRESULT expose_marshalled_dataobject(ole_clipbrd *clipbrd, IDataObject *data)
static LRESULT CALLBACK clipbrd_wndproc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
static HRESULT enum_fmtetc_construct(ole_priv_data *data, UINT pos, IEnumFORMATETC **obj)
static HRESULT get_data_from_metafilepict(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
UINT ownerlink_clipboard_format
UINT object_descriptor_clipboard_format
static ole_priv_data_entry * find_format_in_list(ole_priv_data_entry *entries, DWORD num, UINT cf)
static HRESULT get_stgmed_for_emf(HENHMETAFILE hemf, STGMEDIUM *med)
static HRESULT render_embed_source_hack(IDataObject *data, LPFORMATETC fmt)
static DWORD get_tymed_from_nonole_cf(UINT cf)
static HRESULT WINAPI snapshot_DAdvise(IDataObject *iface, FORMATETC *fmt, DWORD flags, IAdviseSink *sink, DWORD *conn)
static ULONG WINAPI snapshot_Release(IDataObject *iface)
static snapshot * snapshot_construct(DWORD seq_no)
static const char * dump_fmtetc(FORMATETC *fmt)
UINT link_source_descriptor_clipboard_format
static enum_fmtetc * impl_from_IEnumFORMATETC(IEnumFORMATETC *iface)
static HRESULT WINAPI snapshot_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **enum_advise)
static HRESULT WINAPI snapshot_GetCanonicalFormatEtc(IDataObject *iface, FORMATETC *fmt_in, FORMATETC *fmt_out)
static HRESULT get_data_from_stream(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
static HRESULT WINAPI snapshot_SetData(IDataObject *iface, FORMATETC *fmt, STGMEDIUM *med, BOOL release)
static HRESULT get_data_from_bitmap(IDataObject *data, FORMATETC *fmt, HBITMAP *hbm)
HRESULT WINAPI OleFlushClipboard(void)
static ULONG WINAPI snapshot_AddRef(IDataObject *iface)
HRESULT WINAPI OleGetClipboard(IDataObject **obj)
static ole_clipbrd * theOleClipboard
static const WCHAR clipbrd_wndclass[]
static HRESULT set_dataobject_format(HWND hwnd)
static HRESULT get_stgmed_for_bitmap(HBITMAP hbmp, STGMEDIUM *med)
UINT custom_link_source_clipboard_format
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Next(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed)
static HRESULT WINAPI snapshot_EnumFormatEtc(IDataObject *iface, DWORD dir, IEnumFORMATETC **enum_fmt)
static HRESULT get_clipbrd_window(ole_clipbrd *clipbrd, HWND *wnd)
void OLEClipbrd_UnInitialize(void)
static HRESULT get_ole_clipbrd(ole_clipbrd **clipbrd)
static CRITICAL_SECTION latest_snapshot_cs
UINT embed_source_clipboard_format
UINT link_source_clipboard_format
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *ppszProgID)
HRESULT WINAPI GetHGlobalFromStream(IStream *pstm, HGLOBAL *phglobal)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
HRESULT WINAPI CoMarshalInterface(IStream *pStream, REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
HRESULT WINAPI ReadClassStg(IStorage *pstg, CLSID *pclsid)
HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName)
HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
HRESULT STORAGE_CreateOleStream(IStorage *storage, DWORD flags)
HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt)
HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen)
static IDataObject DataObject
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum GLboolean sink
GLfloat GLfloat GLfloat GLfloat h
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
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL global, BOOL delete_on_release, ILockBytes **ret)
#define memcpy(s1, s2, n)
static LPDATAOBJECT clip_data
EXTINLINE DWORD WINAPI GetClipboardSequenceNumber(VOID)
#define STGM_SHARE_EXCLUSIVE
interface IEnumFORMATETC * LPENUMFORMATETC
const GUID IID_IEnumFORMATETC
const GUID IID_IDataObject
#define IsEqualIID(riid1, riid2)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
LIST_ENTRY ProcessLocksList
IEnumFORMATETC IEnumFORMATETC_iface
snapshot * latest_snapshot
ole_priv_data * cached_enum
ole_priv_data_entry entries[1]
IDataObject IDataObject_iface
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
*nSize LPSTR _Inout_ LPDWORD nSize
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
#define CLIPBRD_E_CANT_CLOSE
#define CLIPBRD_E_CANT_EMPTY
#define CLIPBRD_E_CANT_OPEN
#define CLIPBRD_E_CANT_SET
#define DATA_S_SAMEFORMATETC
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HENHMETAFILE WINAPI CopyEnhMetaFileW(_In_ HENHMETAFILE hemfSrc, _In_opt_ LPCWSTR pszFile)
HMETAFILE WINAPI CopyMetaFileW(_In_ HMETAFILE hmfSrc, _In_opt_ LPCWSTR pszFile)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
UINT WINAPI GetMetaFileBitsEx(_In_ HMETAFILE hMF, _In_ UINT cbBuffer, _Out_writes_bytes_opt_(cbBuffer) LPVOID lpData)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
BOOL WINAPI DeleteDC(_In_ HDC)
BOOL WINAPI IsWindow(_In_opt_ HWND)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_DESTROYCLIPBOARD
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
BOOL WINAPI CloseClipboard(void)
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
UINT WINAPI EnumClipboardFormats(_In_ UINT)
HANDLE WINAPI GetClipboardData(_In_ UINT)
BOOL WINAPI EmptyClipboard(void)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
int WINAPI GetClipboardFormatNameW(_In_ UINT format, _Out_writes_(cchMaxCount) LPWSTR lpszFormatName, _In_ int cchMaxCount)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI DestroyWindow(_In_ HWND)
#define WM_RENDERALLFORMATS
BOOL WINAPI IsClipboardFormatAvailable(_In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)