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") }
201 static 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++)
414 static 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);
1369 static 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);
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
static ULONG WINAPI snapshot_AddRef(IDataObject *iface)
static HRESULT WINAPI snapshot_QueryInterface(IDataObject *iface, REFIID riid, void **ppvObject)
UINT ownerlink_clipboard_format
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
static HRESULT WINAPI snapshot_QueryGetData(IDataObject *iface, FORMATETC *fmt)
static CRITICAL_SECTION_DEBUG latest_snapshot_cs_debug
void OLEClipbrd_UnInitialize(void)
HRESULT WINAPI OleSetClipboard(IDataObject *data)
static HRESULT WINAPI snapshot_DAdvise(IDataObject *iface, FORMATETC *fmt, DWORD flags, IAdviseSink *sink, DWORD *conn)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
UINT filename_clipboard_format
HRESULT WINAPI GetHGlobalFromStream(IStream *pstm, HGLOBAL *phglobal)
static HRESULT expose_marshalled_dataobject(ole_clipbrd *clipbrd, IDataObject *data)
static HRESULT get_stgmed_for_storage(HGLOBAL h, STGMEDIUM *med)
HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL global, BOOL delete_on_release, ILockBytes **ret)
BOOL WINAPI IsClipboardFormatAvailable(_In_ UINT)
void OLEClipbrd_Initialize(void)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
#define WideCharToMultiByte
#define DATA_S_SAMEFORMATETC
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define STGM_SHARE_EXCLUSIVE
static HRESULT WINAPI snapshot_GetDataHere(IDataObject *iface, FORMATETC *fmt, STGMEDIUM *med)
IEnumFORMATETC IEnumFORMATETC_iface
static HRESULT enum_fmtetc_construct(ole_priv_data *data, UINT pos, IEnumFORMATETC **obj)
static BOOL string_off_equal(const DVTARGETDEVICE *t1, WORD off1, const DVTARGETDEVICE *t2, WORD off2)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
UINT custom_link_source_clipboard_format
struct PresentationDataHeader PresentationDataHeader
#define WM_RENDERALLFORMATS
static HRESULT render_format(IDataObject *data, LPFORMATETC fmt)
static IDataObject DataObject
static DVTARGETDEVICE * td_offs_to_ptr(ole_priv_data *data, DWORD_PTR off)
static HRESULT dup_bitmap(HBITMAP src, HBITMAP *pdest)
UINT link_source_descriptor_clipboard_format
GLuint GLuint GLsizei count
static ole_priv_data_entry * find_format_in_list(ole_priv_data_entry *entries, DWORD num, UINT cf)
*nSize LPSTR _Inout_ LPDWORD nSize
static void free_metafilepict(HGLOBAL src)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HANDLE WINAPI GetClipboardData(UINT uFormat)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
static UINT wine_marshal_clipboard_format
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
const GUID IID_IDataObject
UINT embedded_object_clipboard_format
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static LPDATAOBJECT clip_data
BOOL WINAPI DestroyWindow(_In_ HWND)
static const IEnumFORMATETCVtbl efvt
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
static HRESULT WINAPI snapshot_DUnadvise(IDataObject *iface, DWORD conn)
static struct oletls * COM_CurrentInfo(void)
GLsizei GLenum GLboolean sink
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static const char * dump_fmtetc(FORMATETC *fmt)
#define CO_E_NOTINITIALIZED
GLfloat GLfloat GLfloat GLfloat h
const char * wine_dbg_sprintf(const char *format,...)
static enum_fmtetc * impl_from_IEnumFORMATETC(IEnumFORMATETC *iface)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
GLenum GLuint GLenum GLsizei const GLchar * buf
HRESULT WINAPI OleIsCurrentClipboard(IDataObject *data)
UINT ole_private_data_clipboard_format
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *ppszProgID)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
static HRESULT get_data_from_storage(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
static CRITICAL_SECTION latest_snapshot_cs
HRESULT WINAPI OleGetClipboard(IDataObject **obj)
static UINT WPARAM LPARAM lparam
HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
UINT WINAPI RegisterClipboardFormatW(LPCWSTR lpszFormat)
HRESULT STORAGE_CreateOleStream(IStorage *storage, DWORD flags)
static HRESULT copy_formatetc(FORMATETC *dst, const FORMATETC *src)
UINT dataobject_clipboard_format
static HRESULT get_current_dataobject(IDataObject **data)
struct ole_clipbrd ole_clipbrd
WINE_DEFAULT_DEBUG_CHANNEL(ole)
static void release_marshal_data(IStream *stm)
static HRESULT get_data_from_stream(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
static HRESULT WINAPI snapshot_SetData(IDataObject *iface, FORMATETC *fmt, STGMEDIUM *med, BOOL release)
INT WINAPI GetClipboardFormatNameW(UINT uFormat, LPWSTR lpszFormatName, INT cchMaxCount)
static HRESULT set_clipboard_formats(ole_clipbrd *clipbrd, IDataObject *data)
static HRESULT render_embed_source_hack(IDataObject *data, LPFORMATETC fmt)
HANDLE WINAPI SetClipboardData(UINT uFormat, HANDLE hMem)
BOOL WINAPI EmptyClipboard(void)
IDataObject IDataObject_iface
BOOL WINAPI OpenClipboard(HWND hWndNewOwner)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_AddRef(LPENUMFORMATETC iface)
static HWND create_clipbrd_window(void)
static HRESULT get_stgmed_for_stream(HGLOBAL h, STGMEDIUM *med)
static BOOL td_equal(const DVTARGETDEVICE *t1, const DVTARGETDEVICE *t2)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
static HRESULT WINAPI snapshot_EnumFormatEtc(IDataObject *iface, DWORD dir, IEnumFORMATETC **enum_fmt)
struct enum_fmtetc enum_fmtetc
const GUID IID_IEnumFORMATETC
HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen)
HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
BOOL WINAPI CloseClipboard(void)
HENHMETAFILE WINAPI CopyEnhMetaFileW(_In_ HENHMETAFILE hemfSrc, _In_opt_ LPCWSTR pszFile)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Skip(LPENUMFORMATETC iface, ULONG celt)
UINT link_source_clipboard_format
interface IEnumFORMATETC * LPENUMFORMATETC
static LRESULT CALLBACK clipbrd_wndproc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
#define InterlockedDecrement
HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName)
static HRESULT get_data_from_enhmetafile(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
static HRESULT get_data_from_metafilepict(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
#define memcpy(s1, s2, n)
REFIID LPVOID * ppvObject
LIST_ENTRY ProcessLocksList
static HRESULT get_clipbrd_window(ole_clipbrd *clipbrd, HWND *wnd)
EXTINLINE DWORD WINAPI GetClipboardSequenceNumber(VOID)
static HRESULT set_src_dataobject(ole_clipbrd *clipbrd, IDataObject *data)
static DWORD_PTR td_get_offs(ole_priv_data *data, DWORD idx)
#define CLIPBRD_E_CANT_CLOSE
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Next(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
snapshot * latest_snapshot
static snapshot * impl_from_IDataObject(IDataObject *iface)
ole_priv_data * cached_enum
static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_Release(LPENUMFORMATETC iface)
static HRESULT set_dataobject_format(HWND hwnd)
static ULONG WINAPI snapshot_Release(IDataObject *iface)
#define InterlockedIncrement
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 WINAPI DeleteDC(_In_ HDC)
static DWORD get_tymed_from_nonole_cf(UINT cf)
static snapshot * snapshot_construct(DWORD seq_no)
static HRESULT get_ole_clipbrd(ole_clipbrd **clipbrd)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HMETAFILE WINAPI CopyMetaFileW(_In_ HMETAFILE hmfSrc, _In_opt_ LPCWSTR pszFile)
#define FIELD_OFFSET(t, f)
HRESULT WINAPI ReadClassStg(IStorage *pstg, CLSID *pclsid)
UINT object_descriptor_clipboard_format
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
static HRESULT get_stgmed_for_global(HGLOBAL h, STGMEDIUM *med)
UINT WINAPI EnumClipboardFormats(UINT format)
static HRESULT WINAPI snapshot_GetData(IDataObject *iface, FORMATETC *fmt, STGMEDIUM *med)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Clone(LPENUMFORMATETC iface, LPENUMFORMATETC *obj)
#define CLIPBRD_E_CANT_SET
#define CLIPBRD_E_CANT_EMPTY
#define CLIPBRD_E_CANT_OPEN
static HRESULT get_data_from_global(IDataObject *data, FORMATETC *fmt, HGLOBAL *mem)
UINT embed_source_clipboard_format
#define WM_DESTROYCLIPBOARD
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
static const WCHAR clipbrd_wndclass[]
static HRESULT get_priv_data(ole_priv_data **data)
static void register_clipboard_formats(void)
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
static HRESULT dup_metafilepict(HGLOBAL src, HGLOBAL *pdest)
ole_priv_data_entry entries[1]
UINT filenameW_clipboard_format
static HRESULT get_data_from_bitmap(IDataObject *data, FORMATETC *fmt, HBITMAP *hbm)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
HRESULT WINAPI OleFlushClipboard(void)
static HRESULT WINAPI snapshot_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **enum_advise)
HRESULT WINAPI CoMarshalInterface(IStream *pStream, REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags)
UINT WINAPI GetMetaFileBitsEx(_In_ HMETAFILE hMF, _In_ UINT cbBuffer, _Out_writes_bytes_opt_(cbBuffer) LPVOID lpData)
static const IDataObjectVtbl snapshot_vtable
static HRESULT get_stgmed_for_bitmap(HBITMAP hbmp, STGMEDIUM *med)
static ole_clipbrd * theOleClipboard
#define HeapFree(x, y, z)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Reset(LPENUMFORMATETC iface)
#define IsEqualIID(riid1, riid2)
static HRESULT dup_global_mem(HGLOBAL src, DWORD flags, HGLOBAL *dst)
static VOID NTAPI 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)
static HWND get_current_ole_clip_window(void)
static HRESULT WINAPI snapshot_GetCanonicalFormatEtc(IDataObject *iface, FORMATETC *fmt_in, FORMATETC *fmt_out)
static UINT WPARAM wparam
static HRESULT get_stgmed_for_emf(HENHMETAFILE hemf, STGMEDIUM *med)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_QueryInterface(LPENUMFORMATETC iface, REFIID riid, LPVOID *ppvObj)