26 L"DDEMLUnicodeClient",
28 L"DDEMLUnicodeServer",
158 RtlInitEmptyUnicodeString(pustrOut,
NULL, 0);
164 ustrCopy = *pustrUnsafe;
177 pustrOut->MaximumLength = pustrOut->Length = 0;
178 pustrOut->Buffer = ustrCopy.
Buffer;
183 pustrOut->Length = ustrCopy.
Length;
184 pustrOut->MaximumLength = pustrOut->Length +
sizeof(
WCHAR);
188 pustrOut->MaximumLength,
190 if (!pustrOut->Buffer)
198 pustrOut->Buffer[pustrOut->Length /
sizeof(
WCHAR)] =
L'\0';
204 if (pustrOut->Buffer)
222 if (
Class->lpszClientUnicodeMenuName !=
NULL &&
Class->MenuNameIsString)
244 CallProc =
Class->spcpdFirst;
245 while (CallProc !=
NULL)
252 CallProc = NextCallProc;
259 if (
Class->atomClassName)
262 if (
Class->atomNVClassName)
287 pDesk =
Class->rpdeskParent;
314 pi->pclsPrivateList =
Class->pclsNext;
326 pi->pclsPublicList =
Class->pclsNext;
341 PWSTR AtomName = szBuf;
344 if (ClassName->Length != 0)
346 if (ClassName->Length +
sizeof(
UNICODE_NULL) >
sizeof(szBuf))
352 if (AtomName ==
NULL)
367 if (AtomName != szBuf)
378 AtomName = ClassName->Buffer;
385 if (AtomName != ClassName->Buffer && AtomName != szBuf)
433 BaseClass =
Class->pclsBase;
455 if (ClassName->Length > 0)
466 if (
IS_ATOM(ClassName->Buffer))
516 Ret =
Class->lpfnWndProc;
532 if ( Ret !=
Class->lpfnWndProc ||
540 return (gcpd ? gcpd : Ret);
560 Class->CSF_flags &= ~CSF_SERVERSIDEPROC;
561 Class->Unicode = !Ansi;
575 Class->lpfnWndProc = chWndProc;
597 Class->lpfnWndProc = chWndProc;
599 Class->CSF_flags &= ~CSF_ANSIPROC;
604 Class->Unicode = !Ansi;
609 Class->CSF_flags &= ~CSF_ANSIPROC;
613 chWndProc =
Class->lpfnWndProc;
618 Class->Unicode = !Ansi;
619 Class->lpfnWndProc = chWndProc;
636 ASSERT(BaseClass->pclsBase == BaseClass);
638 if (BaseClass->rpdeskParent ==
Desktop)
646 if (BaseClass->rpdeskParent ==
NULL)
648 ASSERT(BaseClass->cWndReferenceCount == 0);
662 Class = BaseClass->pclsClone;
680 ClassSize =
sizeof(*BaseClass) + (
SIZE_T)BaseClass->cbclsExtra;
698 TRACE(
"Clone Class 0x%p hM 0x%p\n %S\n",
Class,
Class->hModule,
Class->lpszClientUnicodeMenuName);
711 Class->cWndReferenceCount = 0;
713 if (BaseClass->rpdeskParent ==
NULL)
722 Class->pclsNext = BaseClass->pclsNext;
729 BaseClass->pclsBase =
NULL;
730 BaseClass->pclsClone =
NULL;
737 Class->pclsBase = BaseClass;
738 Class->pclsNext = BaseClass->pclsClone;
757 ASSERT(BaseClass->pclsBase == BaseClass);
772 Class->cWndReferenceCount++;
794 *CloneLink =
Class->pclsNext;
795 Class->pclsClone =
Class->pclsBase->pclsClone;
799 Class->pclsNext = (*BaseClassLink)->pclsNext;
802 Clone =
Class->pclsClone;
803 while (Clone !=
NULL)
822 PCLS *PrevLink, BaseClass, CurrentClass;
826 BaseClass =
Class->pclsBase;
828 if (--
Class->cWndReferenceCount == 0)
830 if (BaseClass ==
Class)
842 PrevLink = &
pi->pclsPublicList;
844 PrevLink = &
pi->pclsPrivateList;
846 CurrentClass = *PrevLink;
847 while (CurrentClass != BaseClass)
852 CurrentClass = CurrentClass->
pclsNext;
855 ASSERT(*PrevLink == BaseClass);
877 while (CurrentClass !=
Class)
882 CurrentClass = CurrentClass->
pclsNext;
911 ClassSize =
sizeof(*Class) + (
SIZE_T)
Class->cbclsExtra;
915 if (NewClass !=
NULL)
934 *ClassLinkPtr = &NewClass->
pclsNext;
966 NextClass =
Class->pclsNext;
971 Class->cWndReferenceCount == 0)
1025 &
pi->pclsPrivateList,
1031 &
pi->pclsPublicList,
1036 ERR(
"Failed to move process classes from desktop 0x%p to the shared heap!\n",
Desktop);
1061 TRACE(
"lpwcx=%p ClassName=%wZ MenuName=%wZ dwFlags=%08x Desktop=%p pi=%p\n",
1067 ERR(
"Failed to register class atom!\n");
1074 ERR(
"Failed to register version class atom!\n");
1079 ClassSize =
sizeof(*Class) + lpwcx->cbClsExtra;
1080 if (MenuName->Length != 0)
1084 if (pszMenuName ==
NULL)
1098 TRACE(
"This CLASS has no Desktop to heap from! Atom %u\n",
Atom);
1110 Class->atomClassName = verAtom;
1122 PWSTR pszMenuNameBuffer = pszMenuName;
1128 Class->lpfnWndProc = lpwcx->lpfnWndProc;
1129 Class->style = lpwcx->style;
1130 Class->cbclsExtra = lpwcx->cbClsExtra;
1131 Class->cbwndExtra = lpwcx->cbWndExtra;
1132 Class->hModule = lpwcx->hInstance;
1137 Class->hbrBackground = lpwcx->hbrBackground;
1140 if (pszMenuNameBuffer !=
NULL)
1144 Class->lpszClientUnicodeMenuName = pszMenuNameBuffer;
1150 pszMenuNameBuffer += (MenuName->Length /
sizeof(
WCHAR)) + 1;
1153 Class->lpszClientUnicodeMenuName = MenuName->Buffer;
1156 if (pszMenuNameBuffer !=
NULL)
1160 Class->lpszClientAnsiMenuName = (
PSTR)pszMenuNameBuffer;
1168 ERR(
"Failed to convert unicode menu name to ansi!\n");
1175 Class->lpszClientAnsiMenuName = (
PSTR)MenuName->Buffer;
1178 Class->lpszMenuName =
Class->lpszClientUnicodeMenuName;
1208 Class->CSF_flags &= ~CSF_ANSIPROC;
1227 ERR(
"Failed creating the class: 0x%x\n",
Status);
1231 if (pszMenuName !=
NULL)
1245 ERR(
"Failed to allocate class on Desktop 0x%p\n",
Desktop);
1247 if (pszMenuName !=
NULL)
1256 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",
1285 PrevLink = &
Class->pclsNext;
1295IntGetAtomFromStringOrAtom(
1301 if (ClassName->Length != 0)
1304 PWSTR AtomName = szBuf;
1310 if (ClassName->Length +
sizeof(
UNICODE_NULL) >
sizeof(szBuf))
1315 if (AtomName ==
NULL)
1330 if (AtomName != szBuf)
1341 if (AtomName != szBuf)
1358 if (ClassName->Buffer)
1386 if (IntGetAtomFromStringOrAtom(ClassName, &
Atom) &&
1398 &
pi->pclsPrivateList,
1409 &
pi->pclsPublicList,
1419 &
pi->pclsPrivateList,
1429 &
pi->pclsPublicList,
1466 TRACE(
"Finding Class %wZ for hInstance 0x%p\n", ClassName,
hInstance);
1478 ERR(
"Class 0x%p not found\n", ClassName->
Buffer);
1482 ERR(
"Class \"%wZ\" not found\n", ClassName);
1488 TRACE(
"Referencing Class 0x%p with atom 0x%x\n",
Class, ClassAtom);
1494 ERR(
"Failed to reference window class!\n");
1522 if ( IntGetAtomFromStringOrAtom( ClassVersion, &ClassAtom) &&
1528 &
pi->pclsPrivateList,
1534 TRACE(
"Local Class 0x%x does already exist!\n", ClassAtom);
1543 &
pi->pclsPublicList,
1548 TRACE(
"Global Class 0x%x does already exist!\n", ClassAtom);
1570 List = &
pi->pclsPublicList;
1572 List = &
pi->pclsPrivateList;
1578 Ret =
Class->atomNVClassName;
1582 ERR(
"UserRegisterClass: Yes, that is right, you have no Class!\n");
1611 TRACE(
"UserUnregisterClass: No Class found.\n");
1617 if (
Class->cWndReferenceCount != 0 ||
1620 TRACE(
"UserUnregisterClass: Class has a Window. Ct %u : Clone 0x%p\n",
Class->cWndReferenceCount,
Class->pclsClone);
1634 TRACE(
"UserUnregisterClass: Good Exit!\n");
1635 Class->atomClassName = 0;
1640 ERR(
"UserUnregisterClass: Can not deregister Class Atom.\n");
1651 WCHAR szStaticTemp[32];
1674 Class->atomClassName,
1708 szTemp = szStaticTemp;
1731 BufLen = ClassName->MaximumLength;
1756 if (Ansi && szTemp !=
NULL && szTemp != szStaticTemp)
1773 if (MenuName->Length != 0)
1782 if (strBufW !=
NULL)
1817 Class->lpszClientUnicodeMenuName = strBufW;
1825 Class->lpszClientUnicodeMenuName = strBufW;
1834 ERR(
"Failed to copy class menu name!\n");
1847 Class->lpszClientUnicodeMenuName = MenuName->Buffer;
1848 Class->lpszClientAnsiMenuName = (
PSTR)MenuName->Buffer;
1855 Class->lpszClientUnicodeMenuName = MenuName->Buffer;
1856 Class->lpszClientAnsiMenuName = (
PSTR)MenuName->Buffer;
1885 TRACE(
"SetClassLong(%d, %x)\n",
Index, NewLong);
1935 Class->hbrBackground = (HBRUSH)NewLong;
1941 Class->hbrBackground = (HBRUSH)NewLong;
1976 Class->spcur = NewCursor;
1986 Class->spcur = NewCursor;
2035 Class->CSF_flags &= ~CSF_CACHEDSMICON;
2038 if (NewLong && !
Class->spicnSm)
2052 if (!SmallIconHandle)
2062 if (SmallIconHandle)
2070 Class->spicn = NewIcon;
2080 Class->spicn = NewIcon;
2086 Class->spicnSm = NewSmallIcon;
2122 if (!SmallIconHandle)
2132 if (SmallIconHandle)
2136 NewIconFromCache =
TRUE;
2140 ERR(
"Failed getting a small icon for the class.\n");
2163 if (NewIconFromCache)
2166 Class->CSF_flags &= ~CSF_CACHEDSMICON;
2167 Class->spicnSm = NewSmallIcon;
2177 if (NewIconFromCache)
2180 Class->CSF_flags &= ~CSF_CACHEDSMICON;
2181 Class->spicnSm = NewSmallIcon;
2207 ERR(
"Setting the class menu name failed!\n");
2267 lpwcx->style =
Class->style;
2271 lpwcx->style &= ~CS_GLOBALCLASS;
2275 lpwcx->cbClsExtra =
Class->cbclsExtra;
2276 lpwcx->cbWndExtra =
Class->cbwndExtra;
2280 lpwcx->hbrBackground =
Class->hbrBackground;
2286 lpwcx->lpszMenuName =
Class->lpszClientUnicodeMenuName;
2293 if (
Class->lpszClientUnicodeMenuName !=
NULL &&
2294 Class->MenuNameIsString)
2302 lpwcx->hInstance =
NULL;
2346 ClassName.Length = 0;
2347 ClassName.MaximumLength = 0;
2376 ERR(
"SYSTEMCUR(ARROW) == NULL, should not happen!!\n");
2385 if (hBrush <= (HBRUSH)COLOR_MENUBAR)
2412 ERR(
"!!! Registering system class failed!\n");
2444 UNICODE_STRING CapturedName = {0}, CapturedMenuName = {0}, CapturedVersion = {0};
2451 ERR(
"NtUserRegisterClassExWOW Bad Flags!\n");
2458 TRACE(
"NtUserRegisterClassExWOW ClsN %wZ\n",ClassName);
2470 ERR(
"NtUserRegisterClassExWOW Wrong cbSize!\n");
2490 if ( (CapturedName.
Length & 1) ||
2491 (CapturedMenuName.Length & 1) ||
2494 CapturedMenuName.Length +
sizeof(
CLS))
2499 ERR(
"NtUserRegisterClassExWOW Invalid Parameter Error!\n");
2503 if (CapturedName.
Length != 0)
2513 ERR(
"NtUserRegisterClassExWOW ClassName Error!\n");
2518 if (CapturedVersion.Length != 0)
2521 CapturedVersion.Length,
2526 if (!
IS_ATOM(CapturedVersion.Buffer))
2528 ERR(
"NtUserRegisterClassExWOW ClassName Error!\n");
2533 if (CapturedMenuName.Length != 0)
2536 CapturedMenuName.Length,
2539 else if (CapturedMenuName.Buffer !=
NULL &&
2542 ERR(
"NtUserRegisterClassExWOW MenuName Error!\n");
2551 ERR(
"NtUserRegisterClassExWOW WndProc is CallProc!!\n");
2554 TRACE(
"NtUserRegisterClassExWOW MnuN %wZ\n",&CapturedMenuName);
2558 ERR(
"NtUserRegisterClassExWOW Exception Error!\n");
2577 TRACE(
"NtUserRegisterClassExWOW Null Return!\n");
2627 if (
Value.Length & 1)
2632 if (
Value.Length != 0)
2664 if (Ret && Ret != dwNewLong)
2709 ERR(
"Error capturing the class name\n");
2765 ERR(
"Error capturing the class name\n");
2792 ClassAtom =
Class->atomNVClassName;
2815 Ret = (
BOOL)ClassAtom;
2858 CapturedClassName = *ClassName;
2859 if (CapturedClassName.
Length != 0)
2862 CapturedClassName.
Length,
2875 ClassName->Length = CapturedClassName.
Length;
2906 ERR(
"Error capturing the class name\n");
#define DBG_DEFAULT_CHANNEL(ch)
ULONG_PTR FASTCALL UserGetCPD(PVOID pvClsWnd, GETCPD Flags, ULONG_PTR ProcIn)
BOOLEAN DestroyCallProc(_Inout_ PVOID Object)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
static __inline BOOL IsCallProcHandle(IN WNDPROC lpWndProc)
void FASTCALL DceFreeClassDCE(PDCE)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
static const WCHAR Cleanup[]
#define InterlockedExchangePointer(Target, Value)
UNICODE_STRING * PUNICODE_STRING
#define ExAllocatePoolWithTag(hernya, size, tag)
ANSI_STRING * PANSI_STRING
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)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
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 EXCEPTION_EXECUTE_HANDLER
#define ICLASS_TO_MASK(iCls)
struct _PROCESSINFO * GetW32ProcessInfo(VOID)
#define GETPFNCLIENTW(fnid)
#define GETPFNCLIENTA(fnid)
#define UserHMGetHandle(obj)
struct _THREADINFO * GetW32ThreadInfo(VOID)
#define GETPFNSERVER(fnid)
#define CURSORF_FROMRESOURCE
#define CSF_SERVERSIDEPROC
#define CSF_WOWDEFERDESTROY
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
#define ExFreePoolWithTag(_P, _T)
#define _At_(target, annos)
#define _Must_inspect_result_
#define _When_(expr, annos)
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)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
_In_ ULONG _In_ ULONG Offset
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
BOOL UserPaintCaption(PWND pWnd, INT Flags)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
struct _PROCESSINFO * PPROCESSINFO
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define ProbeForWriteUnicodeString(Ptr)
#define ProbeForReadUint(Ptr)
#define ProbeForReadUnicodeString(Ptr)
#define STATUS_BUFFER_TOO_SMALL
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
#define __in_data_source(src_sym)
PULONG MinorVersion OPTIONAL
WNDPROC pfnClientPrevious
struct _CALLPROCDATA * spcpdNext
struct _CURICON_OBJECT * spcur
struct _DESKTOP * rpdeskParent
struct _CURICON_OBJECT * spicn
struct _CURICON_OBJECT * spicnSm
DWORD dwRegisteredClasses
struct _CLS * pclsPublicList
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
PWND FASTCALL UserGetWindowObject(HWND hWnd)
static __inline PVOID UserHeapAlloc(SIZE_T Bytes)
static __inline PVOID UserHeapAddressToUser(PVOID lpMem)
static __inline BOOL UserHeapFree(PVOID lpMem)
static int Link(const char **args)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_Must_inspect_result_ _In_ WDFCMRESLIST List
#define W32PF_CLASSESREGISTERED
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
HANDLE FASTCALL co_IntCopyImage(HANDLE hnd, UINT type, INT desiredx, INT desiredy, UINT flags)
static VOID IntFreeClassMenuName(IN OUT PCLS Class)
INT UserGetClassName(IN PCLS Class, IN OUT PUNICODE_STRING ClassName, IN RTL_ATOM Atom, IN BOOL Ansi)
ULONG_PTR UserSetClassLongPtr(IN PCLS Class, IN INT Index, IN ULONG_PTR NewLong, IN BOOL Ansi)
static VOID IntMakeCloneBaseClass(IN OUT PCLS Class, IN OUT PCLS *BaseClassLink, IN OUT PCLS *CloneLink)
static BOOL IntMoveClassToSharedHeap(IN OUT PCLS Class, IN OUT PCLS **ClassLinkPtr)
static PCLS IntFindClass(IN RTL_ATOM Atom, IN HINSTANCE hInstance, IN PCLS *ClassList, OUT PCLS **Link OPTIONAL)
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)
REGISTER_SYSCLASS DefaultServerClasses[]
INT APIENTRY NtUserGetClassName(IN HWND hWnd, IN BOOL Real, OUT PUNICODE_STRING ClassName)
VOID UserAddCallProcToClass(IN OUT PCLS Class, IN PCALLPROCDATA CallProc)
WORD APIENTRY NtUserSetClassWord(HWND hWnd, INT nIndex, WORD wNewWord)
PCLS IntReferenceClass(IN OUT PCLS BaseClass, IN OUT PCLS *ClassLink, IN PDESKTOP Desktop)
static PCLS IntGetClassForDesktop(IN OUT PCLS BaseClass, IN OUT PCLS *ClassLink, IN PDESKTOP Desktop)
BOOL IntCheckProcessDesktopClasses(IN PDESKTOP Desktop, IN BOOL FreeOnFailure)
BOOL FASTCALL RegisterControlAtoms(VOID)
void FASTCALL DestroyProcessClasses(PPROCESSINFO Process)
VOID IntDereferenceClass(IN OUT PCLS Class, IN PDESKTOPINFO Desktop, IN PPROCESSINFO pi)
static BOOL UserGetClassInfo(IN PCLS Class, OUT PWNDCLASSEXW lpwcx, IN BOOL Ansi, HINSTANCE hInstance)
static PWSTR ControlsList[]
static BOOL IntRegisterClassAtom(IN PUNICODE_STRING ClassName, OUT RTL_ATOM *pAtom)
PCLS APIENTRY NtUserGetWOWClass(HINSTANCE hInstance, PUNICODE_STRING ClassName)
RTL_ATOM IntGetClassAtom(_In_ PUNICODE_STRING ClassName, IN HINSTANCE hInstance OPTIONAL, IN PPROCESSINFO pi OPTIONAL, OUT PCLS *BaseClass OPTIONAL, OUT PCLS **Link OPTIONAL)
static BOOL IntSetClassMenuName(IN PCLS Class, IN PUNICODE_STRING MenuName)
_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)
WNDPROC FASTCALL IntGetClassWndProc(PCLS Class, BOOL Ansi)
BOOL APIENTRY NtUserUnregisterClass(IN PUNICODE_STRING ClassNameOrAtom, IN HINSTANCE hInstance, OUT PCLSMENUNAME pClassMenuName)
PCLS IntGetAndReferenceClass(PUNICODE_STRING ClassName, HINSTANCE hInstance, BOOL bDesktopThread)
static BOOL IntSetClassAtom(IN OUT PCLS Class, IN PUNICODE_STRING ClassName)
static struct @5122 FnidToiCls[]
static VOID IntCheckDesktopClasses(IN PDESKTOP Desktop, IN OUT PCLS *ClassList, IN BOOL FreeOnFailure, OUT BOOL *Ret)
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)
RTL_ATOM APIENTRY NtUserRegisterClassExWOW(WNDCLASSEXW *lpwcx, PUNICODE_STRING ClassName, PUNICODE_STRING ClsVersion, PCLSMENUNAME pClassMenuName, DWORD fnID, DWORD Flags, LPDWORD pWow)
BOOL FASTCALL UserRegisterSystemClasses(VOID)
BOOL UserUnregisterClass(IN PUNICODE_STRING ClassName, IN HINSTANCE hInstance, OUT PCLSMENUNAME pClassMenuName)
static NTSTATUS IntDeregisterClassAtom(IN RTL_ATOM Atom)
ULONG_PTR APIENTRY NtUserSetClassLong(HWND hWnd, INT Offset, ULONG_PTR dwNewLong, BOOL Ansi)
static VOID IntDestroyClass(IN OUT PCLS Class)
BOOL APIENTRY NtUserGetClassInfo(HINSTANCE hInstance, PUNICODE_STRING ClassName, LPWNDCLASSEXW lpWndClassEx, LPWSTR *ppszMenuName, BOOL bAnsi)
BOOL FASTCALL LookupFnIdToiCls(int FnId, int *iCls)
static WNDPROC FASTCALL IntSetClassWndProc(IN OUT PCLS Class, IN WNDPROC WndProc, IN BOOL Ansi)
PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon)
BOOLEAN IntDestroyCurIconObject(_In_ PVOID Object)
PTHREADINFO gptiDesktopThread
static __inline PVOID DesktopHeapAlloc(IN PDESKTOP Desktop, IN SIZE_T Bytes)
static __inline BOOL DesktopHeapFree(IN PDESKTOP Desktop, IN PVOID lpMem)
LONG NTAPI UserGetSystemMetrics(ULONG Index)
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
PUSER_HANDLE_TABLE gHandleTable
BOOL FASTCALL UserObjectInDestroy(HANDLE h)
VOID FASTCALL UserReferenceObject(PVOID obj)
PRTL_ATOM_TABLE gAtomTable
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
ENGAPI ULONG APIENTRY EngGetLastError(VOID)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define ERROR_CLASS_HAS_WINDOWS
#define ERROR_CLASS_ALREADY_EXISTS
#define ERROR_INVALID_INDEX
#define ERROR_INVALID_CURSOR_HANDLE
#define ERROR_CLASS_DOES_NOT_EXIST
#define ERROR_INVALID_FLAGS
#define ERROR_INVALID_ICON_HANDLE
#define LR_COPYFROMRESOURCE
#define IS_INTRESOURCE(i)
struct _WNDCLASSEXA * PWNDCLASSEXA
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
#define GCLP_HBRBACKGROUND
_Must_inspect_result_ _In_ ULONG Flags
#define RtlUnicodeStringToAnsiSize(String)