#include <win32k.h>
DBG_DEFAULT_CHANNEL(UserClass);
+static PWSTR ControlsList[] =
+{
+ L"Button",
+ L"Edit",
+ L"Static",
+ L"ListBox",
+ L"ScrollBar",
+ L"ComboBox",
+ L"MDIClient",
+ L"ComboLBox",
+ L"DDEMLEvent",
+ L"DDEMLMom",
+ L"DMGClass",
+ L"DDEMLAnsiClient",
+ L"DDEMLUnicodeClient",
+ L"DDEMLAnsiServer",
+ L"DDEMLUnicodeServer",
+ L"IME",
+ L"Ghost",
+};
+
static NTSTATUS IntDeregisterClassAtom(IN RTL_ATOM Atom);
REGISTER_SYSCLASS DefaultServerClasses[] =
return TRUE;
}
+BOOL FASTCALL
+RegisterControlAtoms(VOID)
+{
+ RTL_ATOM Atom;
+ UNICODE_STRING ClassName;
+ INT i = 0;
+
+ while ( i < ICLS_DESKTOP)
+ {
+ RtlInitUnicodeString(&ClassName, ControlsList[i]);
+ if (IntRegisterClassAtom(&ClassName, &Atom))
+ {
+ gpsi->atomSysClass[i] = Atom;
+ ERR("Reg Control Atoms 0x%x\n",Atom);
+ }
+ i++;
+ }
+ return TRUE;
+}
+
static NTSTATUS
IntDeregisterClassAtom(IN RTL_ATOM Atom)
{
Class->fnid = fnID;
Class->CSF_flags = dwFlags;
- if (LookupFnIdToiCls(Class->fnid, &iCls))
+ if (LookupFnIdToiCls(Class->fnid, &iCls) && gpsi->atomSysClass[iCls] == 0)
{
gpsi->atomSysClass[iCls] = Class->atomClassName;
}
#include <win32k.h>
DBG_DEFAULT_CHANNEL(UserMisc);
+BOOL FASTCALL RegisterControlAtoms(VOID);
+
/* GLOBALS ********************************************************************/
PTHREADINFO gptiCurrent = NULL;
ATOM AtomWndObj; // Window Object atom.
ATOM AtomLayer; // Window Layer atom.
ATOM AtomFlashWndState; // Window Flash State atom.
+ATOM AtomDDETrack; // Window DDE Tracking atom.
HINSTANCE hModClient = NULL;
BOOL ClientPfnInit = FALSE;
ATOM gaGuiConsoleWndClass;
NTSTATUS FASTCALL
InitUserAtoms(VOID)
{
+ RegisterControlAtoms();
+
gpsi->atomSysClass[ICLS_MENU] = 32768;
gpsi->atomSysClass[ICLS_DESKTOP] = 32769;
gpsi->atomSysClass[ICLS_DIALOG] = 32770;
gpsi->atomFrostedWindowProp = IntAddGlobalAtom(L"SysFrostedWindow", TRUE);
+ AtomDDETrack = IntAddGlobalAtom(L"SysDT", TRUE);
+
/*
* FIXME: AddPropW uses the global kernel atom table, thus leading to conflicts if we use
- * the win32k atom table for this ones. What is the right thing to do ?
+ * the win32k atom table for this one. What is the right thing to do ?
*/
// AtomWndObj = IntAddGlobalAtom(L"SysWNDO", TRUE);
NtAddAtom(L"SysWNDO", 14, &AtomWndObj);
+
AtomLayer = IntAddGlobalAtom(L"SysLayer", TRUE);
AtomFlashWndState = IntAddGlobalAtom(L"FlashWState", TRUE);