47 {OCR_APPSTARTING,
NULL},
93 pcur->pcurNext = *ppcurHead;
115 for (ppcur = ppcurHead;
120 if ((*ppcur) == pcur)
123 (*ppcur) = pcur->pcurNext;
127 pcur->CURSORF_flags &= ~CURSORF_LINKED;
158 if (
id == OIC_WINLOGO+1 )
166 for (
i = 0 ;
i < 6;
i++)
212 WARN(
"Requesting invalid/destroyed cursor.\n");
265 if (
x ==
gpsi->ptCursor.x &&
y ==
gpsi->ptCursor.y)
372 for (
i = 0;
i < AniCurIcon->
cpcur;
i++)
428 TRACE(
"Enter NtUserGetIconInfo\n");
433 WARN(
"Nothing to fill.\n");
442 WARN(
"UserGetIconObject(0x%p) Failed.\n", hCurIcon);
454 FrameCurIcon = ((
PACON)CurIcon)->aspcur[0];
467 colorBpp = FrameCurIcon->
bpp;
507 if (
BufLen > (lpModule->MaximumLength))
509 lpModule->Length = 0;
510 lpModule->MaximumLength =
BufLen;
515 BufLen = lpModule->MaximumLength;
517 lpModule->Length =
BufLen;
578 TRACE(
"Leave NtUserGetIconInfo, ret=%i\n", Ret);
600 TRACE(
"Enter NtUserGetIconSize\n");
612 CurIcon = AniCurIcon->
aspcur[0];
638 TRACE(
"Leave NtUserGetIconSize, ret=%i\n", bRet);
658 TRACE(
"Enter NtUserGetCursorInfo\n");
693 TRACE(
"Leave NtUserGetCursorInfo, ret=%i\n", Ret);
800 TRACE(
"Enter NtUserDestroyCursorIcon (%p, %i)\n", hCurIcon, bForce);
815 ERR(
"Trying to delete global cursor!\n");
830 WARN(
"Trying to delete current cursor!\n");
837 WARN(
"Trying to delete shared cursor.\n");
850 TRACE(
"Leave NtUserDestroyCursorIcon, ret=%i\n",
ret);
874 TRACE(
"Enter NtUserFindExistingCursorIcon\n");
1004 TRACE(
"Enter NtUserGetClipCursor\n");
1038 TRACE(
"Leave NtUserGetClipCursor, ret=%i\n", Ret);
1055 TRACE(
"Enter NtUserSetCursor: %p\n", hCursor);
1091 TRACE(
"Returning Global Cursor hcur %p\n",hOldCursor);
1123 FIXME(
" is UNIMPLEMENTED.\n");
1139 ERR(
"Mismatch in CURSORF_flags! cursor: 0x%08lx, data: 0x%08lx\n",
1140 pcur->CURSORF_flags, pcursordata->CURSORF_flags);
1145 if (pcur->hbmMask !=
NULL)
1147 ERR(
"Cursor data already set!\n");
1152 if (pcursordata->hbmMask ==
NULL)
1154 ERR(
"NtUserSetCursorIconData was got no hbmMask.\n");
1162 ERR(
"Failed to set ownership of hbmMask %p.\n", pcursordata->hbmMask);
1167 if (pcursordata->hbmColor)
1172 ERR(
"Failed to set ownership of hbmColor %p.\n", pcursordata->hbmColor);
1179 if (pcursordata->hbmAlpha)
1184 ERR(
"Failed to set ownership of hbmAlpha %p.\n", pcursordata->hbmAlpha);
1186 if (pcursordata->hbmColor)
1196 if (pcur->strName.Buffer !=
NULL)
1202 RtlInitEmptyUnicodeString(&pcur->strName,
NULL, 0);
1206 if (pcur->atomModName != 0)
1212 pcur->atomModName = atomModName;
1213 pcur->rt = pcursordata->rt;
1215 pcur->xHotspot = pcursordata->xHotspot;
1216 pcur->yHotspot = pcursordata->yHotspot;
1217 pcur->hbmMask = pcursordata->hbmMask;
1218 pcur->hbmColor = pcursordata->hbmColor;
1219 pcur->hbmAlpha = pcursordata->hbmAlpha;
1220 pcur->rcBounds.left = 0;
1221 pcur->rcBounds.top = 0;
1222 pcur->rcBounds.right = pcursordata->cx;
1223 pcur->rcBounds.bottom = pcursordata->cy;
1224 pcur->hbmUserAlpha = pcursordata->hbmUserAlpha;
1225 pcur->bpp = pcursordata->bpp;
1226 pcur->cx = pcursordata->cx;
1227 pcur->cy = pcursordata->cy;
1228 if (pustrName !=
NULL)
1230 pcur->strName = *pustrName;
1263 ERR(
"Mismatch in CURSORF_flags! acon: 0x%08lx, data: 0x%08lx\n",
1264 pacon->CURSORF_flags, pcursordata->CURSORF_flags);
1269 if (pacon->aspcur !=
NULL)
1271 ERR(
"Acon data already set!\n");
1276 for (
i = 0;
i < pcursordata->cicur;
i++)
1279 if (pcursordata->aicur[
i] >= pcursordata->cpcur)
1281 ERR(
"aicur[%lu] is out or range. Got %lu, cpcur = %u\n",
1282 i, pcursordata->aicur[
i], pcursordata->cpcur);
1292 (pcursordata->cicur *
sizeof(
DWORD)) +
1293 (pcursordata->cicur *
sizeof(
INT));
1299 ERR(
"Failed to allocate memory (cpcur = %u, cicur = %u)\n",
1300 pcursordata->cpcur, pcursordata->cicur);
1305 aicur = (
DWORD*)&aspcur[pcursordata->cpcur];
1306 ajifRate = (
INT*)&aicur[pcursordata->cicur];
1310 RtlCopyMemory(ajifRate, pcursordata->ajifRate, pcursordata->cicur *
sizeof(
INT));
1316 pcdFrame = pcursordata->
aspcur;
1319 for (
i = 0;
i < pcursordata->cpcur;
i++)
1323 if (hcurFrame ==
NULL)
1325 ERR(
"Failed to create a cursor for frame %u\n",
i);
1337 ERR(
"Invalid flags for acon frame %u: 0x%08lx\n",
1345 ERR(
"Failed to set cursor data for frame %u\n",
i);
1355 if (pacon->strName.Buffer !=
NULL)
1361 RtlInitEmptyUnicodeString(&pacon->strName,
NULL, 0);
1365 if (pacon->atomModName != 0)
1371 if (pacon->aspcur !=
NULL)
1373 for (
i = 0;
i < pacon->cpcur;
i++)
1382 pacon->atomModName = atomModName;
1383 pacon->rt = pcursordata->rt;
1385 pacon->cpcur = pcursordata->cpcur;
1386 pacon->cicur = pcursordata->cicur;
1387 pacon->aspcur = aspcur;
1388 pacon->aicur = aicur;
1389 pacon->ajifRate = ajifRate;
1391 if (pustrName !=
NULL)
1401 for (
i = 0;
i < pcursordata->cpcur;
i++)
1403 if (aspcur[
i] ==
NULL)
1431 if (pustrModule !=
NULL)
1435 pustrModule->Buffer,
1439 ERR(
"Failed to create atom from module name '%wZ': 0x%08lx\n",
1454 ERR(
"Failed to reference cursor %p\n", hcursor);
1478 if (bResult !=
FALSE)
1490 if (atomModName != 0)
1526 TRACE(
"Enter NtUserSetCursorIconData\n");
1537 cursordata = *pCursorData;
1543 if ((cursordata.
cpcur == 0) || (cursordata.
cicur == 0) ||
1544 (cursordata.
cpcur > 1000) || (cursordata.
cicur > 1000))
1546 ERR(
"Range error (cpcur = %u, cicur = %u)\n",
1559 if (pvBuffer ==
NULL)
1561 ERR(
"Failed to allocate memory (cpcur = %u, cicur = %u)\n",
1569 ajifRate = (
INT*)&aicur[cursordata.
cicur];
1590 cursordata.
aspcur = aspcur;
1591 cursordata.
aicur = aicur;
1610 if (pustrModule !=
NULL)
1616 ERR(
"Failed to copy pustrModule: status 0x%08lx\n",
status);
1622 if (pustrRsrc !=
NULL)
1628 ERR(
"Failed to copy pustrRsrc: status 0x%08lx\n",
status);
1645 pustrModule ? &ustrModule :
NULL,
1646 pustrRsrc ? &ustrRsrc :
NULL,
1660 if (pvBuffer !=
NULL)
1666 if (bResult ==
FALSE)
1675 TRACE(
"Leave NtUserSetCursorIconData, bResult = %i\n", bResult);
1697 HBRUSH hbrFlickerFreeDraw,
1700 PSURFACE psurfDest, psurfMask, psurfColor;
1703 HBITMAP hbmMask, hbmColor, hbmAlpha;
1705 RECTL rcDest, rcSrc;
1712 ERR(
"DrawIconEx called without mask or color bitmap to draw.\n");
1719 if (istepIfAniCur >= pAcon->
cicur)
1721 ERR(
"NtUserDrawIconEx: istepIfAniCur too big!\n");
1724 pIcon = pAcon->
aspcur[pAcon->
aicur[istepIfAniCur]];
1736 if (psurfMask ==
NULL)
1738 ERR(
"Unable to lock the mask surface.\n");
1743 if (hbmColor ==
NULL)
1751 ERR(
"Unable to lock the color bitmap.\n");
1759 ERR(
"Could not lock the destination DC.\n");
1772 cxWidth = pIcon->
cx;
1782 cyHeight = pIcon->
cy;
1786 RECTL_vSetRect(&rcDest, xLeft, yTop, xLeft + cxWidth, yTop + cyHeight);
1794 psurfDest = pdc->dclevel.pSurface;
1796 if (psurfDest ==
NULL)
1810 bOffScreen = hbrFlickerFreeDraw &&
1819 TRACE(
"Performing off-screen rendering.\n");
1823 ERR(
"Failed to get brush object.\n");
1831 if (!psurfOffScreen)
1833 ERR(
"Failed to allocate the off-screen surface.\n");
1860 ERR(
"Failed to paint the off-screen surface.\n");
1865 psurfDest = psurfOffScreen;
1867 pdcClipObj = (
CLIPOBJ *)&pdc->co;
1889 ERR(
"Failed to paint the off-screen surface.\n");
1897 TRACE(
"Performing on screen rendering.\n");
1898 pdcClipObj = (
CLIPOBJ *)&pdc->co;
1911 ERR(
"SURFACE_LockSurface failed!\n");
1930 ERR(
"NtGdiAlphaBlend failed!\n");
1956 ERR(
"Failed to mask the bitmap data.\n");
1986 ERR(
"Failed to render the icon bitmap.\n");
2015 ERR(
"Failed to render the icon bitmap.\n");
2030 RECTL_vSetRect(&rcDest, xLeft, yTop, xLeft + cxWidth, yTop + cyHeight);
2038 psurfDest = pdc->dclevel.pSurface;
2045 &psurfOffScreen->SurfObj,
2092 HBRUSH hbrFlickerFreeDraw,
2100 TRACE(
"Enter NtUserDrawIconEx\n");
2105 ERR(
"UserGetCurIconObject(0x%p) failed!\n",
hIcon);
2143 TRACE(
"Enter NtUserGetCursorFrameInfo\n");
2191 TRACE(
"Leaving NtUserGetCursorFrameInfo, ret = 0x%p\n",
ret);
2227 for (
i = 0 ;
i < 16;
i++)
2233 if (pcurOrig)
break;
2248 FIXME(
"Need to copy cursor data or do something! pcurOrig %p new pcur %p\n",pcurOrig,pcur);
HBITMAP FASTCALL BITMAP_CopyBitmap(HBITMAP hBitmap)
BOOL NTAPI GreSetBitmapOwner(_In_ HBITMAP hbmp, _In_ ULONG ulOwner)
#define DBG_DEFAULT_CHANNEL(ch)
static BOOLEAN IntLPtoDP(DC *pdc, PPOINTL ppt, UINT count)
struct _CURICON_OBJECT * PCURICON_OBJECT
#define CURSORF_USER_MASK
VOID FASTCALL DC_vPrepareDCsForBlit(PDC pdcDest, const RECT *rcDest, PDC pdcSrc, const RECT *rcSrc)
VOID FASTCALL DC_vFinishBlit(PDC pdc1, PDC pdc2)
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
FORCEINLINE PDC DC_LockDc(HDC hdc)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
static void cleanup(void)
static const WCHAR Cleanup[]
VOID NTAPI EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo)
VOID NTAPI EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, PSURFACE psurf, COLORREF crBackgroundClr, COLORREF crForegroundClr, PPALETTE ppalDC)
#define ExAllocatePoolWithTag(hernya, size, tag)
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
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)
#define BRUSH_ShareLockBrush(hBrush)
#define BRUSH_ShareUnlockBrush(pBrush)
#define GDI_OBJECT_TYPE_BRUSH
#define GDI_HANDLE_GET_TYPE(h)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
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
#define UserHMGetHandle(obj)
_Out_opt_ PICONINFO _Inout_opt_ PUNICODE_STRING _Inout_opt_ PUNICODE_STRING _Out_opt_ LPDWORD _In_ BOOL bInternal
struct _THREADINFO * GetW32ThreadInfo(VOID)
_Out_opt_ PICONINFO IconInfo
struct tagCURSORDATA CURSORDATA
#define CURSORF_ACONFRAME
_Out_opt_ PICONINFO _Inout_opt_ PUNICODE_STRING _Inout_opt_ PUNICODE_STRING lpResName
_Out_opt_ PICONINFO _Inout_opt_ PUNICODE_STRING _Inout_opt_ PUNICODE_STRING _Out_opt_ LPDWORD pbpp
#define EXCEPTION_EXECUTE_HANDLER
BOOL APIENTRY IntEngStretchBlt(SURFOBJ *DestObj, SURFOBJ *SourceObj, SURFOBJ *Mask, CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation, COLORADJUSTMENT *pca, RECTL *DestRect, RECTL *SourceRect, POINTL *pMaskOrigin, BRUSHOBJ *Brush, POINTL *BrushOrigin, ULONG Mode)
#define MmCopyToCaller(x, y, z)
#define ExFreePoolWithTag(_P, _T)
static DWORD DWORD DWORD DWORD * steps
VOID FASTCALL co_MsqInsertMouseMessage(MSG *Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook)
PCURICON_OBJECT FASTCALL UserSetCursor(PCURICON_OBJECT NewCursor, BOOL ForceChange)
NTSYSAPI NTSTATUS NTAPI RtlAddAtomToAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ PWSTR AtomName, _Out_ PRTL_ATOM Atom)
NTSYSAPI NTSTATUS NTAPI RtlLookupAtomInAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ PWSTR AtomName, _Out_ PRTL_ATOM Atom)
NTSYSAPI NTSTATUS NTAPI RtlDeleteAtomFromAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ RTL_ATOM Atom)
NTSYSAPI NTSTATUS NTAPI RtlQueryAtomInAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ RTL_ATOM Atom, _Out_opt_ PULONG RefCount, _Out_opt_ PULONG PinCount, _Out_opt_z_bytecap_(*NameLength) PWSTR AtomName, _Inout_opt_ PULONG NameLength)
#define GDI_OBJ_HMGR_POWNED
#define GDI_OBJ_HMGR_PUBLIC
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
BOOL FASTCALL CheckWinstaAttributeAccess(ACCESS_MASK DesiredAccess)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
static __inline NTSTATUS ProbeAndCaptureUnicodeString(OUT PUNICODE_STRING Dest, IN KPROCESSOR_MODE CurrentMode, IN const UNICODE_STRING *UnsafeSrc)
static __inline VOID ReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString, IN KPROCESSOR_MODE CurrentMode)
Implementation of the Explorer desktop window.
struct _CURICON_OBJECT * pcurNext
struct _CURICON_OBJECT * pCursorCache
struct _PROCESSINFO * ppi
struct _PALETTE *const ppal
PCURICON_OBJECT CurrentCursorObject
struct tagCURSORDATA * aspcur
#define __WARNING_READ_OVERRUN
#define _PRAGMA_WARNING_SUPPRESS(x)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
#define W32PF_CREATEDWINORDC
BOOL APIENTRY IntEngAlphaBlend(_Inout_ SURFOBJ *psoDest, _In_ SURFOBJ *psoSource, _In_opt_ CLIPOBJ *pco, _In_opt_ XLATEOBJ *pxlo, _In_ RECTL *prclDest, _In_ RECTL *prclSrc, _In_ BLENDOBJ *pBlendObj)
BOOL APIENTRY IntEngBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 Rop4)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
PSURFACE NTAPI SURFACE_AllocSurface(_In_ USHORT iType, _In_ ULONG cx, _In_ ULONG cy, _In_ ULONG iFormat, _In_ ULONG fjBitmap, _In_opt_ ULONG cjWidth, _In_opt_ ULONG cjBufSize, _In_opt_ PVOID pvBits)
#define SURFACE_ShareUnlockSurface(pBMObj)
#define SURFACE_ShareLockSurface(hBMObj)
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
VOID NTAPI GDIOBJ_vDeleteObject(POBJ pobj)
FORCEINLINE VOID RECTL_vSetRect(_Out_ RECTL *prcl, _In_ LONG left, _In_ LONG top, _In_ LONG right, _In_ LONG bottom)
FORCEINLINE VOID RECTL_vOffsetRect(_Inout_ RECTL *prcl, _In_ INT cx, _In_ INT cy)
_Must_inspect_result_ NTSTATUS NTAPI ProbeAndCaptureUnicodeStringOrAtom(_Out_ _When_(return >=0, _At_(pustrOut->Buffer, _Post_ _Notnull_)) PUNICODE_STRING pustrOut, __in_data_source(USER_MODE) _In_ PUNICODE_STRING pustrUnsafe)
BOOL APIENTRY NtUserGetClipCursor(RECTL *lpRect)
VOID FreeCurIconObject(_In_ PVOID Object)
static VOID IntInsertCursorIntoList(_Inout_ PCURICON_OBJECT pcur)
BOOL APIENTRY NtUserDrawIconEx(HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags, BOOL bMetaHDC, PVOID pDIXData)
HANDLE IntCreateCurIconHandle(BOOLEAN Animated)
BOOL APIENTRY UserSetCursorIconData(_In_ HCURSOR hcursor, _In_opt_ PUNICODE_STRING pustrModule, _In_opt_ PUNICODE_STRING pustrRsrc, _In_ PCURSORDATA pcursordata)
static BOOL IntSetCursorData(_Inout_ PCURICON_OBJECT pcur, _In_opt_ PUNICODE_STRING pustrName, _In_ ATOM atomModName, _In_ const CURSORDATA *pcursordata)
BOOL APIENTRY NtUserGetIconSize(HANDLE hCurIcon, UINT istepIfAniCur, PLONG plcx, PLONG plcy)
HICON NTAPI NtUserFindExistingCursorIcon(_In_ PUNICODE_STRING pustrModule, _In_ PUNICODE_STRING pustrRsrc, _In_ FINDEXISTINGCURICONPARAM *param)
BOOL APIENTRY NtUserSetCursorContents(HANDLE hCurIcon, PICONINFO UnsafeIconInfo)
BOOL InitCursorImpl(VOID)
BOOL APIENTRY NtUserClipCursor(RECTL *prcl)
BOOL UserSetCursorPos(INT x, INT y, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook)
BOOL APIENTRY NtUserDestroyCursor(_In_ HANDLE hCurIcon, _In_ BOOL bForce)
__kernel_entry BOOL APIENTRY NtUserSetCursorIconData(_In_ HCURSOR hcursor, _In_opt_ PUNICODE_STRING pustrModule, _In_opt_ PUNICODE_STRING pustrRsrc, _In_ const CURSORDATA *pCursorData)
VOID IntLoadSystenIcons(HICON hcur, DWORD id)
PCURICON_OBJECT IntSystemSetCursor(PCURICON_OBJECT pcurNew)
PSYSTEM_CURSORINFO IntGetSysCursorInfo(VOID)
BOOL APIENTRY NtUserSetSystemCursor(HCURSOR hcur, DWORD id)
BOOL APIENTRY NtUserGetCursorInfo(PCURSORINFO pci)
FORCEINLINE BOOL is_icon(PCURICON_OBJECT object)
PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon)
BOOL APIENTRY UserClipCursor(RECTL *prcl)
BOOL UserDrawIconEx(HDC hDc, INT xLeft, INT yTop, PCURICON_OBJECT pIcon, INT cxWidth, INT cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
HCURSOR APIENTRY NtUserSetCursor(HCURSOR hCursor)
static BOOL IntSetAconData(_Inout_ PACON pacon, _In_opt_ PUNICODE_STRING pustrName, _In_ ATOM atomModName, _In_ const CURSORDATA *pcursordata)
VOID FASTCALL IntCleanupCurIconCache(PPROCESSINFO Win32Process)
SYSTEM_CURSORINFO gSysCursorInfo
PCURICON_OBJECT gcurFirst
HCURSOR NTAPI NtUserGetCursorFrameInfo(HCURSOR hCursor, DWORD istep, INT *rate_jiffies, DWORD *num_steps)
BOOLEAN IntDestroyCurIconObject(_In_ PVOID Object)
static VOID IntRemoveCursorFromList(_Inout_ PCURICON_OBJECT pcur)
PWND FASTCALL UserGetDesktopWindow(VOID)
LONG NTAPI UserGetSystemMetrics(ULONG Index)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
PVOID FASTCALL UserReferenceObjectByHandle(HANDLE handle, HANDLE_TYPE type)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
PUSER_HANDLE_TABLE gHandleTable
BOOL FASTCALL UserObjectInDestroy(HANDLE h)
void FreeProcMarkObject(_In_ PVOID Object)
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
PVOID UserGetObjectNoErr(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
VOID FASTCALL UserReferenceObject(PVOID obj)
PRTL_ATOM_TABLE gAtomTable
_In_opt_ SURFOBJ _In_opt_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ RECTL _In_opt_ POINTL _In_opt_ POINTL _In_opt_ BRUSHOBJ _In_opt_ POINTL _In_ ROP4 rop4
_In_ ULONG _In_ CLIPOBJ _In_ RECTL * prcl
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define ERROR_INVALID_CURSOR_HANDLE
#define IS_INTRESOURCE(i)
#define WINSTA_READATTRIBUTES
#define WINSTA_WRITEATTRIBUTES
VOID NTAPI EXLATEOBJ_vInitialize(_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
VOID NTAPI EXLATEOBJ_vCleanup(_Inout_ PEXLATEOBJ pexlo)
VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate(PEXLATEOBJ pexlo, PPALETTE ppalDst, COLORREF crBackgroundClr, COLORREF crForegroundClr)