26 L"DDEMLUnicodeClient",
28 L"DDEMLUnicodeServer",
157 pustrOut->Buffer =
NULL;
164 if ((pustrUnsafe->Length & 1) || (pustrUnsafe->Buffer ==
NULL))
171 if (
IS_ATOM(pustrUnsafe->Buffer))
174 pustrOut->MaximumLength = pustrOut->Length = 0;
175 pustrOut->Buffer = pustrUnsafe->Buffer;
180 pustrOut->Length = pustrUnsafe->Length;
181 pustrOut->MaximumLength = pustrOut->Length +
sizeof(
WCHAR);
185 pustrOut->MaximumLength,
187 if (!pustrOut->Buffer)
194 RtlCopyMemory(pustrOut->Buffer, pustrUnsafe->Buffer, pustrOut->Length);
195 pustrOut->Buffer[pustrOut->Length /
sizeof(
WCHAR)] =
L'\0';
201 if (pustrOut->Buffer)
219 if (
Class->lpszClientUnicodeMenuName !=
NULL &&
Class->MenuNameIsString)
241 CallProc =
Class->spcpdFirst;
242 while (CallProc !=
NULL)
249 CallProc = NextCallProc;
256 if (
Class->atomClassName)
259 if (
Class->atomNVClassName)
284 pDesk =
Class->rpdeskParent;
311 pi->pclsPrivateList =
Class->pclsNext;
323 pi->pclsPublicList =
Class->pclsNext;
338 PWSTR AtomName = szBuf;
341 if (ClassName->Length != 0)
343 if (ClassName->Length +
sizeof(
UNICODE_NULL) >
sizeof(szBuf))
349 if (AtomName ==
NULL)
364 if (AtomName != szBuf)
375 AtomName = ClassName->Buffer;
382 if (AtomName != ClassName->Buffer && AtomName != szBuf)
430 BaseClass =
Class->pclsBase;
452 if (ClassName->Length > 0)
463 if (
IS_ATOM(ClassName->Buffer))
513 Ret =
Class->lpfnWndProc;
529 if ( Ret !=
Class->lpfnWndProc ||
537 return (gcpd ? gcpd : Ret);
558 Class->Unicode = !Ansi;
572 Class->lpfnWndProc = chWndProc;
594 Class->lpfnWndProc = chWndProc;
601 Class->Unicode = !Ansi;
610 chWndProc =
Class->lpfnWndProc;
615 Class->Unicode = !Ansi;
616 Class->lpfnWndProc = chWndProc;
633 ASSERT(BaseClass->pclsBase == BaseClass);
635 if (BaseClass->rpdeskParent ==
Desktop)
643 if (BaseClass->rpdeskParent ==
NULL)
645 ASSERT(BaseClass->cWndReferenceCount == 0);
659 Class = BaseClass->pclsClone;
677 ClassSize =
sizeof(*BaseClass) + (
SIZE_T)BaseClass->cbclsExtra;
695 TRACE(
"Clone Class 0x%p hM 0x%p\n %S\n",
Class,
Class->hModule,
Class->lpszClientUnicodeMenuName);
708 Class->cWndReferenceCount = 0;
710 if (BaseClass->rpdeskParent ==
NULL)
719 Class->pclsNext = BaseClass->pclsNext;
726 BaseClass->pclsBase =
NULL;
727 BaseClass->pclsClone =
NULL;
734 Class->pclsBase = BaseClass;
735 Class->pclsNext = BaseClass->pclsClone;
754 ASSERT(BaseClass->pclsBase == BaseClass);
769 Class->cWndReferenceCount++;
791 *CloneLink =
Class->pclsNext;
792 Class->pclsClone =
Class->pclsBase->pclsClone;
796 Class->pclsNext = (*BaseClassLink)->pclsNext;
799 Clone =
Class->pclsClone;
800 while (Clone !=
NULL)
819 PCLS *PrevLink, BaseClass, CurrentClass;
823 BaseClass =
Class->pclsBase;
825 if (--
Class->cWndReferenceCount == 0)
827 if (BaseClass ==
Class)
839 PrevLink = &
pi->pclsPublicList;
841 PrevLink = &
pi->pclsPrivateList;
843 CurrentClass = *PrevLink;
844 while (CurrentClass != BaseClass)
849 CurrentClass = CurrentClass->
pclsNext;
852 ASSERT(*PrevLink == BaseClass);
874 while (CurrentClass !=
Class)
879 CurrentClass = CurrentClass->
pclsNext;
908 ClassSize =
sizeof(*Class) + (
SIZE_T)
Class->cbclsExtra;
912 if (NewClass !=
NULL)
931 *ClassLinkPtr = &NewClass->
pclsNext;
963 NextClass =
Class->pclsNext;
968 Class->cWndReferenceCount == 0)
1022 &
pi->pclsPrivateList,
1028 &
pi->pclsPublicList,
1033 ERR(
"Failed to move process classes from desktop 0x%p to the shared heap!\n",
Desktop);
1058 TRACE(
"lpwcx=%p ClassName=%wZ MenuName=%wZ dwFlags=%08x Desktop=%p pi=%p\n",
1064 ERR(
"Failed to register class atom!\n");
1071 ERR(
"Failed to register version class atom!\n");
1076 ClassSize =
sizeof(*Class) + lpwcx->cbClsExtra;
1077 if (MenuName->Length != 0)
1081 if (pszMenuName ==
NULL)
1095 TRACE(
"This CLASS has no Desktop to heap from! Atom %u\n",
Atom);
1107 Class->atomClassName = verAtom;
1119 PWSTR pszMenuNameBuffer = pszMenuName;
1125 Class->lpfnWndProc = lpwcx->lpfnWndProc;
1126 Class->style = lpwcx->style;
1127 Class->cbclsExtra = lpwcx->cbClsExtra;
1128 Class->cbwndExtra = lpwcx->cbWndExtra;
1129 Class->hModule = lpwcx->hInstance;
1134 Class->hbrBackground = lpwcx->hbrBackground;
1137 if (pszMenuNameBuffer !=
NULL)
1141 Class->lpszClientUnicodeMenuName = pszMenuNameBuffer;
1147 pszMenuNameBuffer += (MenuName->Length /
sizeof(
WCHAR)) + 1;
1150 Class->lpszClientUnicodeMenuName = MenuName->Buffer;
1153 if (pszMenuNameBuffer !=
NULL)
1157 Class->lpszClientAnsiMenuName = (
PSTR)pszMenuNameBuffer;
1165 ERR(
"Failed to convert unicode menu name to ansi!\n");
1172 Class->lpszClientAnsiMenuName = (
PSTR)MenuName->Buffer;
1175 Class->lpszMenuName =
Class->lpszClientUnicodeMenuName;
1224 ERR(
"Failed creating the class: 0x%x\n",
Status);
1228 if (pszMenuName !=
NULL)
1242 ERR(
"Failed to allocate class on Desktop 0x%p\n",
Desktop);
1244 if (pszMenuName !=
NULL)
1253 TRACE(
"Created class 0x%p with name %wZ and proc 0x%p for atom 0x%x and version atom 0x%x and hInstance 0x%p, global %u\n",
1282 PrevLink = &
Class->pclsNext;
1292 IntGetAtomFromStringOrAtom(
1298 if (ClassName->Length != 0)
1301 PWSTR AtomName = szBuf;
1307 if (ClassName->Length +
sizeof(
UNICODE_NULL) >
sizeof(szBuf))
1312 if (AtomName ==
NULL)
1327 if (AtomName != szBuf)
1338 if (AtomName != szBuf)
1375 if (IntGetAtomFromStringOrAtom(ClassName, &
Atom) &&
1387 &
pi->pclsPrivateList,
1398 &
pi->pclsPublicList,
1408 &
pi->pclsPrivateList,
1418 &
pi->pclsPublicList,
1455 TRACE(
"Finding Class %wZ for hInstance 0x%p\n", ClassName,
hInstance);
1467 ERR(
"Class 0x%p not found\n", ClassName->
Buffer);
1471 ERR(
"Class \"%wZ\" not found\n", ClassName);
1477 TRACE(
"Referencing Class 0x%p with atom 0x%x\n",
Class, ClassAtom);
1483 ERR(
"Failed to reference window class!\n");
1511 if ( IntGetAtomFromStringOrAtom( ClassVersion, &ClassAtom) &&
1517 &
pi->pclsPrivateList,
1523 TRACE(
"Local Class 0x%x does already exist!\n", ClassAtom);
1532 &
pi->pclsPublicList,
1537 TRACE(
"Global Class 0x%x does already exist!\n", ClassAtom);
1559 List = &
pi->pclsPublicList;
1561 List = &
pi->pclsPrivateList;
1567 Ret =
Class->atomNVClassName;
1571 ERR(
"UserRegisterClass: Yes, that is right, you have no Class!\n");
1600 TRACE(
"UserUnregisterClass: No Class found.\n");
1606 if (
Class->cWndReferenceCount != 0 ||
1609 TRACE(
"UserUnregisterClass: Class has a Window. Ct %u : Clone 0x%p\n",
Class->cWndReferenceCount,
Class->pclsClone);
1623 TRACE(
"UserUnregisterClass: Good Exit!\n");
1624 Class->atomClassName = 0;
1629 ERR(
"UserUnregisterClass: Can not deregister Class Atom.\n");
1640 WCHAR szStaticTemp[32];
1663 Class->atomClassName,
1697 szTemp = szStaticTemp;
1720 BufLen = ClassName->MaximumLength;
1745 if (Ansi && szTemp !=
NULL && szTemp != szStaticTemp)
1762 if (MenuName->Length != 0)
1771 if (strBufW !=
NULL)
1806 Class->lpszClientUnicodeMenuName = strBufW;
1814 Class->lpszClientUnicodeMenuName = strBufW;
1823 ERR(
"Failed to copy class menu name!\n");
1836 Class->lpszClientUnicodeMenuName = MenuName->Buffer;
1837 Class->lpszClientAnsiMenuName = (
PSTR)MenuName->Buffer;
1844 Class->lpszClientUnicodeMenuName = MenuName->Buffer;
1845 Class->lpszClientAnsiMenuName = (
PSTR)MenuName->Buffer;
1874 TRACE(
"SetClassLong(%d, %x)\n",
Index, NewLong);
1924 Class->hbrBackground = (HBRUSH)NewLong;
1930 Class->hbrBackground = (HBRUSH)NewLong;
1965 Class->spcur = NewCursor;
1975 Class->spcur = NewCursor;
2027 if (NewLong && !
Class->spicnSm)
2041 if (!SmallIconHandle)
2051 if (SmallIconHandle)
2059 Class->spicn = NewIcon;
2069 Class->spicn = NewIcon;
2075 Class->spicnSm = NewSmallIcon;
2111 if (!SmallIconHandle)
2121 if (SmallIconHandle)
2125 NewIconFromCache =
TRUE;
2129 ERR(
"Failed getting a small icon for the class.\n");
2152 if (NewIconFromCache)
2156 Class->spicnSm = NewSmallIcon;
2166 if (NewIconFromCache)
2170 Class->spicnSm = NewSmallIcon;
2196 ERR(
"Setting the class menu name failed!\n");
2256 lpwcx->style =
Class->style;
2264 lpwcx->cbClsExtra =
Class->cbclsExtra;
2265 lpwcx->cbWndExtra =
Class->cbwndExtra;
2269 lpwcx->hbrBackground =
Class->hbrBackground;
2275 lpwcx->lpszMenuName =
Class->lpszClientUnicodeMenuName;
2282 if (
Class->lpszClientUnicodeMenuName !=
NULL &&
2283 Class->MenuNameIsString)
2291 lpwcx->hInstance =
NULL;
2335 ClassName.Length = 0;
2336 ClassName.MaximumLength = 0;
2365 ERR(
"SYSTEMCUR(ARROW) == NULL, should not happen!!\n");
2374 if (hBrush <= (HBRUSH)COLOR_MENUBAR)
2401 ERR(
"!!! Registering system class failed!\n");
2433 UNICODE_STRING CapturedName = {0}, CapturedMenuName = {0}, CapturedVersion = {0};
2440 ERR(
"NtUserRegisterClassExWOW Bad Flags!\n");
2447 TRACE(
"NtUserRegisterClassExWOW ClsN %wZ\n",ClassName);
2459 ERR(
"NtUserRegisterClassExWOW Wrong cbSize!\n");
2479 if ( (CapturedName.
Length & 1) ||
2480 (CapturedMenuName.Length & 1) ||
2483 CapturedMenuName.Length +
sizeof(
CLS))
2488 ERR(
"NtUserRegisterClassExWOW Invalid Parameter Error!\n");
2492 if (CapturedName.
Length != 0)
2502 ERR(
"NtUserRegisterClassExWOW ClassName Error!\n");
2507 if (CapturedVersion.Length != 0)
2510 CapturedVersion.Length,
2515 if (!
IS_ATOM(CapturedVersion.Buffer))
2517 ERR(
"NtUserRegisterClassExWOW ClassName Error!\n");
2522 if (CapturedMenuName.Length != 0)
2525 CapturedMenuName.Length,
2528 else if (CapturedMenuName.Buffer !=
NULL &&
2531 ERR(
"NtUserRegisterClassExWOW MenuName Error!\n");
2540 ERR(
"NtUserRegisterClassExWOW WndProc is CallProc!!\n");
2543 TRACE(
"NtUserRegisterClassExWOW MnuN %wZ\n",&CapturedMenuName);
2547 ERR(
"NtUserRegisterClassExWOW Exception Error!\n");
2566 TRACE(
"NtUserRegisterClassExWOW Null Return!\n");
2616 if (
Value.Length & 1)
2621 if (
Value.Length != 0)
2653 if (Ret && Ret != dwNewLong)
2698 ERR(
"Error capturing the class name\n");
2754 ERR(
"Error capturing the class name\n");
2781 ClassAtom =
Class->atomNVClassName;
2804 Ret = (
BOOL)ClassAtom;
2847 CapturedClassName = *ClassName;
2848 if (CapturedClassName.
Length != 0)
2851 CapturedClassName.
Length,
2864 ClassName->Length = CapturedClassName.
Length;
2895 ERR(
"Error capturing the class name\n");
BOOL IntCheckProcessDesktopClasses(IN PDESKTOP Desktop, IN BOOL FreeOnFailure)
#define ERROR_INVALID_PARAMETER
static const WCHAR Class[]
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
NTSYSAPI NTSTATUS NTAPI RtlLookupAtomInAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ PWSTR AtomName, _Out_ PRTL_ATOM Atom)
VOID FASTCALL UserEnterShared(VOID)
#define ERROR_INVALID_CURSOR_HANDLE
ENGAPI ULONG APIENTRY EngGetLastError(VOID)
#define GETPFNSERVER(fnid)
struct _DESKTOP * rpdeskParent
BOOL APIENTRY NtUserUnregisterClass(IN PUNICODE_STRING ClassNameOrAtom, IN HINSTANCE hInstance, OUT PCLSMENUNAME pClassMenuName)
#define STATUS_INSUFFICIENT_RESOURCES
WNDPROC pfnClientPrevious
static BOOL UserGetClassInfo(IN PCLS Class, OUT PWNDCLASSEXW lpwcx, IN BOOL Ansi, HINSTANCE hInstance)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
struct _WNDCLASSEXA * PWNDCLASSEXA
void FASTCALL DestroyProcessClasses(PPROCESSINFO Process)
_Success_(return==STATUS_PENDING)
DWORD dwRegisteredClasses
PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon)
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
BOOL UserUnregisterClass(IN PUNICODE_STRING ClassName, IN HINSTANCE hInstance, OUT PCLSMENUNAME pClassMenuName)
#define _At_(target, annos)
#define GETPFNCLIENTW(fnid)
BOOL FASTCALL UserRegisterSystemClasses(VOID)
#define STATUS_INVALID_PARAMETER
#define CURSORF_FROMRESOURCE
static PCLS IntGetClassForDesktop(IN OUT PCLS BaseClass, IN OUT PCLS *ClassLink, IN PDESKTOP Desktop)
static __inline BOOL IsCallProcHandle(IN WNDPROC lpWndProc)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG _In_opt_ PVOID Data
NTSYSAPI NTSTATUS NTAPI RtlAddAtomToAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ PWSTR AtomName, _Out_ PRTL_ATOM Atom)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
PRTL_ATOM_TABLE gAtomTable
struct _PROCESSINFO * PPROCESSINFO
static VOID IntFreeClassMenuName(IN OUT PCLS Class)
static WNDPROC FASTCALL IntSetClassWndProc(IN OUT PCLS Class, IN WNDPROC WndProc, IN BOOL Ansi)
static __inline BOOL UserHeapFree(PVOID lpMem)
#define ERROR_NOT_ENOUGH_MEMORY
PCLS FASTCALL IntCreateClass(IN CONST WNDCLASSEXW *lpwcx, IN PUNICODE_STRING ClassName, IN PUNICODE_STRING ClassVersion, IN PUNICODE_STRING MenuName, IN DWORD fnID, IN DWORD dwFlags, IN PDESKTOP Desktop, IN PPROCESSINFO pi)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
struct _CURICON_OBJECT * spcur
#define _When_(expr, annos)
PCLS APIENTRY NtUserGetWOWClass(HINSTANCE hInstance, PUNICODE_STRING ClassName)
static __inline PVOID UserHeapAlloc(SIZE_T Bytes)
static VOID IntDestroyClass(IN OUT PCLS Class)
ULONG_PTR FASTCALL UserGetCPD(PVOID pvClsWnd, GETCPD Flags, ULONG_PTR ProcIn)
_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)
static int Link(const char **args)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
struct _CURICON_OBJECT * spicn
REGISTER_SYSCLASS DefaultServerClasses[]
#define STATUS_BUFFER_TOO_SMALL
struct _THREADINFO * GetW32ThreadInfo(VOID)
WORD APIENTRY NtUserSetClassWord(HWND hWnd, INT nIndex, WORD wNewWord)
struct _CALLPROCDATA * spcpdNext
static BOOL IntSetClassAtom(IN OUT PCLS Class, IN PUNICODE_STRING ClassName)
#define ERROR_INVALID_ICON_HANDLE
PTHREADINFO gptiDesktopThread
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
static __inline PVOID DesktopHeapAlloc(IN PDESKTOP Desktop, IN SIZE_T Bytes)
#define ERROR_ACCESS_DENIED
static VOID IntMakeCloneBaseClass(IN OUT PCLS Class, IN OUT PCLS *BaseClassLink, IN OUT PCLS *CloneLink)
#define ERROR_CLASS_HAS_WINDOWS
BOOLEAN DestroyCallProc(_Inout_ PVOID Object)
struct _CURICON_OBJECT * spicnSm
#define GCLP_HBRBACKGROUND
#define ERROR_CLASS_ALREADY_EXISTS
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
BOOL FASTCALL UserObjectInDestroy(HANDLE h)
INT UserGetClassName(IN PCLS Class, IN OUT PUNICODE_STRING ClassName, IN RTL_ATOM Atom, IN BOOL Ansi)
static CHAR Desktop[MAX_PATH]
PWND FASTCALL UserGetWindowObject(HWND hWnd)
#define ProbeForWriteUnicodeString(Ptr)
_Must_inspect_result_ _In_ __in_data_source(USER_MODE) SIZE_T Size
HANDLE FASTCALL co_IntCopyImage(HANDLE hnd, UINT type, INT desiredx, INT desiredy, UINT flags)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
LONG NTAPI UserGetSystemMetrics(ULONG Index)
VOID FASTCALL UserEnterExclusive(VOID)
#define UserHMGetHandle(obj)
static NTSTATUS IntDeregisterClassAtom(IN RTL_ATOM Atom)
BOOL APIENTRY NtUserGetClassInfo(HINSTANCE hInstance, PUNICODE_STRING ClassName, LPWNDCLASSEXW lpWndClassEx, LPWSTR *ppszMenuName, BOOL bAnsi)
ULONG_PTR APIENTRY NtUserSetClassLong(HWND hWnd, INT Offset, ULONG_PTR dwNewLong, BOOL Ansi)
static BOOL IntMoveClassToSharedHeap(IN OUT PCLS Class, IN OUT PCLS **ClassLinkPtr)
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
#define InterlockedExchangePointer(Target, Value)
_Must_inspect_result_ _In_ ULONG Flags
struct _CLS * pclsPublicList
#define IS_INTRESOURCE(i)
#define ProbeForReadUint(Ptr)
static VOID IntCheckDesktopClasses(IN PDESKTOP Desktop, IN OUT PCLS *ClassList, IN BOOL FreeOnFailure, OUT BOOL *Ret)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
#define EXCEPTION_EXECUTE_HANDLER
ANSI_STRING * PANSI_STRING
PCLS IntGetAndReferenceClass(PUNICODE_STRING ClassName, HINSTANCE hInstance, BOOL bDesktopThread)
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 ExAllocatePoolWithTag(hernya, size, tag)
#define CSF_SERVERSIDEPROC
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
#define CSF_WOWDEFERDESTROY
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_Must_inspect_result_ _In_ WDFCMRESLIST List
#define GETPFNCLIENTA(fnid)
static __inline PVOID UserHeapAddressToUser(PVOID lpMem)
static const WCHAR Cleanup[]
#define _Must_inspect_result_
VOID FASTCALL SetLastNtError(NTSTATUS Status)
VOID UserAddCallProcToClass(IN OUT PCLS Class, IN PCALLPROCDATA CallProc)
NTSYSAPI DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING *)
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
_In_ ULONG _In_ ULONG Offset
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
VOID FASTCALL UserLeave(VOID)
#define LR_COPYFROMRESOURCE
#define W32PF_CLASSESREGISTERED
#define STATUS_OBJECT_NAME_NOT_FOUND
ULONG_PTR UserSetClassLongPtr(IN PCLS Class, IN INT Index, IN ULONG_PTR NewLong, IN BOOL Ansi)
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 PCLS IntFindClass(IN RTL_ATOM Atom, IN HINSTANCE hInstance, IN PCLS *ClassList, OUT PCLS **Link OPTIONAL)
RTL_ATOM APIENTRY NtUserRegisterClassExWOW(WNDCLASSEXW *lpwcx, PUNICODE_STRING ClassName, PUNICODE_STRING ClsVersion, PCLSMENUNAME pClassMenuName, DWORD fnID, DWORD Flags, LPDWORD pWow)
DBG_DEFAULT_CHANNEL(UserClass)
PCLS IntReferenceClass(IN OUT PCLS BaseClass, IN OUT PCLS *ClassLink, IN PDESKTOP Desktop)
BOOLEAN IntDestroyCurIconObject(_In_ PVOID Object)
BOOL FASTCALL LookupFnIdToiCls(int FnId, int *iCls)
BOOL UserPaintCaption(PWND pWnd, INT Flags)
UNICODE_STRING * PUNICODE_STRING
#define ProbeForReadUnicodeString(Ptr)
NTSYSAPI NTSTATUS NTAPI RtlDeleteAtomFromAtomTable(_In_ PRTL_ATOM_TABLE AtomTable, _In_ RTL_ATOM Atom)
#define ERROR_INVALID_INDEX
WNDPROC FASTCALL IntGetClassWndProc(PCLS Class, BOOL Ansi)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
INT APIENTRY NtUserGetClassName(IN HWND hWnd, IN BOOL Real, OUT PUNICODE_STRING ClassName)
VOID IntDereferenceClass(IN OUT PCLS Class, IN PDESKTOPINFO Desktop, IN PPROCESSINFO pi)
static PWSTR ControlsList[]
#define ICLASS_TO_MASK(iCls)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
RTL_ATOM IntGetClassAtom(_In_ PUNICODE_STRING ClassName, IN HINSTANCE hInstance OPTIONAL, IN PPROCESSINFO pi OPTIONAL, OUT PCLS *BaseClass OPTIONAL, OUT PCLS **Link OPTIONAL)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
static struct @4912 FnidToiCls[]
RTL_ATOM UserRegisterClass(IN CONST WNDCLASSEXW *lpwcx, IN PUNICODE_STRING ClassName, IN PUNICODE_STRING ClassVersion, IN PUNICODE_STRING MenuName, IN DWORD fnID, IN DWORD dwFlags)
#define _SEH2_EXCEPT(...)
static __inline BOOL DesktopHeapFree(IN PDESKTOP Desktop, IN PVOID lpMem)
#define _SEH2_GetExceptionCode()
#define _SEH2_YIELD(__stmt)
static BOOL IntRegisterClassAtom(IN PUNICODE_STRING ClassName, OUT RTL_ATOM *pAtom)
PUSER_HANDLE_TABLE gHandleTable
#define ExFreePoolWithTag(_P, _T)
void FASTCALL DceFreeClassDCE(PDCE)
#define ERROR_CLASS_DOES_NOT_EXIST
static BOOL IntSetClassMenuName(IN PCLS Class, IN PUNICODE_STRING MenuName)
#define ERROR_INVALID_FLAGS
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
BOOL FASTCALL RegisterControlAtoms(VOID)
VOID FASTCALL UserReferenceObject(PVOID obj)
PULONG MinorVersion OPTIONAL