14#define DATA_DELAYED (HANDLE)0
15#define DATA_SYNTH_USER (HANDLE)1
16#define DATA_SYNTH_KRNL (HANDLE)2
17#define IS_DATA_DELAYED(ce) ((ce)->hData == DATA_DELAYED)
18#define IS_DATA_SYNTHESIZED(ce) ((ce)->hData == DATA_SYNTH_USER || (ce)->hData == DATA_SYNTH_KRNL)
31 ERR(
"Cannot open winsta\n");
129 pElement->
hData = hData;
168 memset(&bmiBuffer, 0,
sizeof(bmiBuffer));
239 TRACE(
"IntSynthesizeBitmap(%p, %p)\n", pWinStaObj, pBmEl);
293 BOOL bHaveText, bHaveUniText, bHaveOemText, bHaveLocale, bHaveBm, bHaveDib, bHaveMFP, bHaveEMF;
305 if (!bHaveLocale && (bHaveText || bHaveOemText || bHaveUniText))
324 if (!bHaveText && (bHaveUniText || bHaveOemText))
328 if (!bHaveOemText && (bHaveUniText || bHaveText))
332 if (!bHaveUniText && (bHaveText || bHaveOemText))
336 if (!bHaveBm && bHaveDib)
340 if (bHaveMFP && !bHaveEMF)
344 if (bHaveEMF && !bHaveMFP)
349 if (!bHaveDib && bHaveBm)
470 if (pElement !=
NULL)
515 ERR(
"Access denied!\n");
630 TRACE(
"NtUserChangeClipboardChain(%p, %p)\n", hWndRemove, hWndNewNext);
726 TRACE(
"NtUserEmptyClipboard()\n");
743 if (fmt < 0xc000 || fmt > 0xffff)
749 if (cchMaxCount < 1 || !lpszFormatName)
761 cchMaxCount *
sizeof(
WCHAR));
762 iRet /=
sizeof(
WCHAR);
846 for (
i = 0;
i < cFormats; ++
i)
850 iRet = paFormatPriorityList[
i];
877 TRACE(
"NtUserIsClipboardFormatAvailable(%x)\n",
fmt);
904 TRACE(
"NtUserGetClipboardData(%x, %p)\n",
fmt, pgcd);
1003 hRet = pElement->
hData;
1017 TRACE(
"NtUserGetClipboardData returns %p\n", hRet);
1034 ERR(
"Access denied!\n");
1054 TRACE(
"hData stored\n");
1068 TRACE(
"SetClipboardData delayed format: %u\n",
fmt);
1075 TRACE(
"NtUserSetClipboardData returns: %p\n", hRet);
1089 TRACE(
"NtUserSetClipboardData(%x %p %p)\n",
fmt, hData, pUnsafeScd);
1201 pMemObj->
cbData = cbData;
1252 if (cbData > pMemObj->
cbData)
1253 cbData = pMemObj->
cbData;
#define CF_DSPENHMETAFILE
#define CF_DSPMETAFILEPICT
HBITMAP NTAPI GreCreateDIBitmapInternal(IN HDC hDc, IN INT cx, IN INT cy, IN DWORD fInit, IN OPTIONAL LPBYTE pjInit, IN OPTIONAL PBITMAPINFO pbmi, IN DWORD iUsage, IN FLONG fl, IN UINT cjMaxBits, IN HANDLE hcmXform)
#define DBG_DEFAULT_CHANNEL(ch)
#define STATUS_INVALID_HANDLE
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
static void cleanup(void)
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
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
struct tagCLIPBOARDDATA * PCLIPBOARDDATA
#define UserHMGetHandle(obj)
#define EXCEPTION_EXECUTE_HANDLER
#define memcpy(s1, s2, n)
#define ExFreePoolWithTag(_P, _T)
_In_ ULONG _In_ ULONG Offset
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
#define GDI_OBJ_HMGR_POWNED
#define GDI_OBJ_HMGR_PUBLIC
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
NTSTATUS FASTCALL IntValidateWindowStationHandle(HWINSTA WindowStation, KPROCESSOR_MODE AccessMode, ACCESS_MASK DesiredAccess, PWINSTATION_OBJECT *Object, POBJECT_HANDLE_INFORMATION pObjectHandleInfo)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
BITMAPINFOHEADER bmiHeader
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define RtlCopyMemory(Destination, Source, Length)
_In_z_ PCWSTR _In_ ULONG _Post_z_ PVOID _In_ ULONG cjDataSize
ULONG FASTCALL IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG cjBufSize)
PWND FASTCALL UserGetWindowObject(HWND hWnd)
HWINSTA FASTCALL UserGetProcessWindowStation(VOID)
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
INT FASTCALL DIB_BitmapInfoSize(const BITMAPINFO *info, WORD coloruse, BOOL max)
BITMAPINFO *FASTCALL DIB_ConvertBitmapInfo(CONST BITMAPINFO *bmi, DWORD Usage)
VOID FASTCALL DIB_FreeConvertedBitmapInfo(BITMAPINFO *converted, BITMAPINFO *orig, DWORD Usage)
INT APIENTRY GreGetDIBitsInternal(HDC hDC, HBITMAP hBitmap, UINT StartScan, UINT ScanLines, LPBYTE Bits, LPBITMAPINFO Info, UINT Usage, UINT MaxBits, UINT MaxInfo)
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
static BOOL FASTCALL IntIsFormatAvailable(PWINSTATION_OBJECT pWinStaObj, UINT fmt)
static VOID NTAPI IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
static BOOL FASTCALL IntIsClipboardOpenByMe(PWINSTATION_OBJECT pWinSta)
HWND APIENTRY NtUserGetOpenClipboardWindow(VOID)
BOOL APIENTRY NtUserChangeClipboardChain(HWND hWndRemove, HWND hWndNewNext)
BOOL APIENTRY NtUserEmptyClipboard(VOID)
BOOL NTAPI UserEmptyClipboard(VOID)
VOID NTAPI UserEmptyClipboardData(PWINSTATION_OBJECT pWinSta)
#define IS_DATA_SYNTHESIZED(ce)
HWND APIENTRY NtUserGetClipboardViewer(VOID)
INT APIENTRY NtUserGetPriorityClipboardFormat(UINT *paFormatPriorityList, INT cFormats)
NTSTATUS APIENTRY NtUserCreateLocalMemHandle(HANDLE hMem, PVOID pData, DWORD cbData, DWORD *pcbData)
static PCLIP FASTCALL IntGetFormatElement(PWINSTATION_OBJECT pWinStaObj, UINT fmt)
DWORD APIENTRY NtUserCountClipboardFormats(VOID)
BOOL APIENTRY NtUserCloseClipboard(VOID)
static VOID NTAPI IntSynthesizeDib(PWINSTATION_OBJECT pWinStaObj, HBITMAP hbm)
HWND APIENTRY NtUserGetClipboardOwner(VOID)
HANDLE APIENTRY NtUserConvertMemHandle(PVOID pData, DWORD cbData)
UINT APIENTRY UserEnumClipboardFormats(UINT fmt)
BOOL NTAPI UserCloseClipboard(VOID)
HANDLE APIENTRY NtUserSetClipboardData(UINT fmt, HANDLE hData, PSETCLIPBDATA pUnsafeScd)
BOOL APIENTRY NtUserIsClipboardFormatAvailable(UINT fmt)
HANDLE APIENTRY NtUserGetClipboardData(UINT fmt, PGETCLIPBDATA pgcd)
INT APIENTRY NtUserGetClipboardFormatName(UINT fmt, LPWSTR lpszFormatName, INT cchMaxCount)
static VOID WINAPI IntSynthesizeBitmap(PWINSTATION_OBJECT pWinStaObj, PCLIP pBmEl)
#define IS_DATA_DELAYED(ce)
BOOL NTAPI UserOpenClipboard(HWND hWnd)
BOOL APIENTRY NtUserOpenClipboard(HWND hWnd, DWORD Unknown1)
VOID FASTCALL UserClipboardFreeWindow(PWND pWindow)
static VOID FASTCALL IntFreeElementData(PCLIP pElement)
static PWINSTATION_OBJECT FASTCALL IntGetWinStaForCbAccess(VOID)
HWND APIENTRY NtUserSetClipboardViewer(HWND hWndNewViewer)
static PCLIP NTAPI IntAddFormatedData(PWINSTATION_OBJECT pWinStaObj, UINT fmt, HANDLE hData, BOOLEAN fGlobalHandle, BOOL bEnd)
VOID FASTCALL UserClipboardRelease(PWND pWindow)
DWORD APIENTRY NtUserGetClipboardSequenceNumber(VOID)
HANDLE NTAPI UserSetClipboardData(UINT fmt, HANDLE hData, PSETCLIPBDATA scd)
LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
PUSER_HANDLE_TABLE gHandleTable
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define ERROR_CLIPBOARD_NOT_OPEN
#define ERROR_INVALID_WINDOW_HANDLE
struct tagBITMAPINFO * PBITMAPINFO
#define WM_DESTROYCLIPBOARD
#define WINSTA_ACCESSCLIPBOARD
#define WM_RENDERALLFORMATS
#define ObDereferenceObject