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");
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;
INT APIENTRY NtUserGetClipboardFormatName(UINT fmt, LPWSTR lpszFormatName, INT cchMaxCount)
#define ERROR_INVALID_PARAMETER
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL DIB_FreeConvertedBitmapInfo(BITMAPINFO *converted, BITMAPINFO *orig, DWORD Usage)
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
static VOID NTAPI IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
static BOOL(WINAPI *pAddClipboardFormatListener)(HWND hwnd)
BITMAPINFOHEADER bmiHeader
static PCLIP FASTCALL IntGetFormatElement(PWINSTATION_OBJECT pWinStaObj, UINT fmt)
static VOID WINAPI IntSynthesizeBitmap(PWINSTATION_OBJECT pWinStaObj, PCLIP pBmEl)
VOID NTAPI UserEmptyClipboardData(PWINSTATION_OBJECT pWinSta)
#define WM_RENDERALLFORMATS
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
#define IS_DATA_SYNTHESIZED(ce)
#define CF_DSPMETAFILEPICT
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
VOID FASTCALL UserClipboardRelease(PWND pWindow)
UINT APIENTRY UserEnumClipboardFormats(UINT fmt)
INT APIENTRY NtUserGetPriorityClipboardFormat(UINT *paFormatPriorityList, INT cFormats)
#define ERROR_NOT_ENOUGH_MEMORY
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
BOOL NTAPI UserOpenClipboard(HWND hWnd)
static VOID FASTCALL IntFreeElementData(PCLIP pElement)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
#define STATUS_INVALID_HANDLE
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
HWND APIENTRY NtUserSetClipboardViewer(HWND hWndNewViewer)
INT FASTCALL DIB_BitmapInfoSize(const BITMAPINFO *info, WORD coloruse, BOOL max)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define ERROR_ACCESS_DENIED
BOOL NTAPI UserCloseClipboard(VOID)
_In_z_ PCWSTR _In_ ULONG _Post_z_ PVOID _In_ ULONG cjDataSize
HANDLE APIENTRY NtUserGetClipboardData(UINT fmt, PGETCLIPBDATA pgcd)
#define CF_DSPENHMETAFILE
BOOL APIENTRY NtUserIsClipboardFormatAvailable(UINT fmt)
HWND APIENTRY NtUserGetClipboardOwner(VOID)
#define EXCEPTION_EXECUTE_HANDLER
static BOOL FASTCALL IntIsClipboardOpenByMe(PWINSTATION_OBJECT pWinSta)
HWND APIENTRY NtUserGetClipboardViewer(VOID)
NTSTATUS APIENTRY NtUserCreateLocalMemHandle(HANDLE hMem, PVOID pData, DWORD cbData, DWORD *pcbData)
NTSTATUS FASTCALL IntValidateWindowStationHandle(HWINSTA WindowStation, KPROCESSOR_MODE AccessMode, ACCESS_MASK DesiredAccess, PWINSTATION_OBJECT *Object, POBJECT_HANDLE_INFORMATION pObjectHandleInfo)
VOID FASTCALL UserClipboardFreeWindow(PWND pWindow)
PWND FASTCALL UserGetWindowObject(HWND hWnd)
BOOL APIENTRY NtUserChangeClipboardChain(HWND hWndRemove, HWND hWndNewNext)
VOID FASTCALL UserEnterExclusive(VOID)
#define ERROR_INVALID_WINDOW_HANDLE
DWORD APIENTRY NtUserCountClipboardFormats(VOID)
#define _SEH2_YIELD(STMT_)
HANDLE APIENTRY NtUserSetClipboardData(UINT fmt, HANDLE hData, PSETCLIPBDATA pUnsafeScd)
HANDLE APIENTRY NtUserConvertMemHandle(PVOID pData, DWORD cbData)
#define NT_SUCCESS(StatCode)
#define ObDereferenceObject
BOOL APIENTRY NtUserEmptyClipboard(VOID)
static PCLIP NTAPI IntAddFormatedData(PWINSTATION_OBJECT pWinStaObj, UINT fmt, HANDLE hData, BOOLEAN fGlobalHandle, BOOL bEnd)
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)
HWINSTA FASTCALL UserGetProcessWindowStation(VOID)
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
#define memcpy(s1, s2, n)
#define GDI_OBJ_HMGR_POWNED
VOID FASTCALL SetLastNtError(NTSTATUS Status)
BOOL APIENTRY NtUserCloseClipboard(VOID)
BOOL NTAPI UserEmptyClipboard(VOID)
_In_ ULONG _In_ ULONG Offset
VOID FASTCALL UserLeave(VOID)
#define ERROR_CLIPBOARD_NOT_OPEN
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
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
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
static VOID NTAPI IntSynthesizeDib(PWINSTATION_OBJECT pWinStaObj, HBITMAP hbm)
static BOOL FASTCALL IntIsFormatAvailable(PWINSTATION_OBJECT pWinStaObj, UINT fmt)
BOOL APIENTRY NtUserOpenClipboard(HWND hWnd, DWORD Unknown1)
LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
#define GDI_OBJ_HMGR_PUBLIC
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
ULONG FASTCALL IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG cjBufSize)
struct tagCLIPBOARDDATA * PCLIPBOARDDATA
#define WM_DESTROYCLIPBOARD
BITMAPINFO *FASTCALL DIB_ConvertBitmapInfo(CONST BITMAPINFO *bmi, DWORD Usage)
static PWINSTATION_OBJECT FASTCALL IntGetWinStaForCbAccess(VOID)
DBG_DEFAULT_CHANNEL(UserClipbrd)
char * cleanup(char *str)
#define RtlCopyMemory(Destination, Source, Length)
#define IS_DATA_DELAYED(ce)
struct tagBITMAPINFO * PBITMAPINFO
#define _SEH2_EXCEPT(...)
#define WINSTA_ACCESSCLIPBOARD
#define ExFreePoolWithTag(_P, _T)
#define _SEH2_GetExceptionCode()
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
PUSER_HANDLE_TABLE gHandleTable
HWND APIENTRY NtUserGetOpenClipboardWindow(VOID)
HANDLE NTAPI UserSetClipboardData(UINT fmt, HANDLE hData, PSETCLIPBDATA scd)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
DWORD APIENTRY NtUserGetClipboardSequenceNumber(VOID)
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
INT APIENTRY GreGetDIBitsInternal(HDC hDC, HBITMAP hBitmap, UINT StartScan, UINT ScanLines, LPBYTE Bits, LPBITMAPINFO Info, UINT Usage, UINT MaxBits, UINT MaxInfo)