#ifndef _WIN32K_CLASS_H
#define _WIN32K_CLASS_H
-#include <windows.h>
-#include <ddk/ntddk.h>
-#include <ddk/ntapi.h>
-#include <napi/win32.h>
-
#define IS_ATOM(x) \
(((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000))
typedef struct _WNDCLASS_OBJECT
{
UINT cbSize;
+ LONG refs; /* windows using this class (is 0 after class creation) */
UINT style;
WNDPROC lpfnWndProcA;
WNDPROC lpfnWndProcW;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
+ HMENU hMenu;
UNICODE_STRING lpszMenuName;
RTL_ATOM Atom;
HICON hIconSm;
BOOL Unicode;
BOOL Global;
- LIST_ENTRY ListEntry;
- LIST_ENTRY GlobalListEntry; /* HACK!!! */
+ LIST_ENTRY ListEntry; /* linked into owning process */
PCHAR ExtraData;
- /* list of windows */
- FAST_MUTEX ClassWindowsListLock;
- LIST_ENTRY ClassWindowsListHead;
} WNDCLASS_OBJECT, *PWNDCLASS_OBJECT;
NTSTATUS FASTCALL
NTSTATUS FASTCALL
CleanupClassImpl(VOID);
-#define IntLockProcessClasses(W32Process) \
- ExAcquireFastMutex(&(W32Process)->ClassListLock)
-
-#define IntUnLockProcessClasses(W32Process) \
- ExReleaseFastMutex(&(W32Process)->ClassListLock)
-
-#define IntLockClassWindows(ClassObj) \
- ExAcquireFastMutex(&(ClassObj)->ClassWindowsListLock)
+void FASTCALL DestroyProcessClasses(PW32PROCESS Process );
-#define IntUnLockClassWindows(ClassObj) \
- ExReleaseFastMutex(&(ClassObj)->ClassWindowsListLock)
+inline VOID FASTCALL
+ClassDerefObject(PWNDCLASS_OBJECT Class);
-#define ClassDereferenceObject(ClassObj) \
- ObmDereferenceObject(ClassObj)
+inline VOID FASTCALL
+ClassRefObject(PWNDCLASS_OBJECT Class);
-BOOL FASTCALL
-ClassReferenceClassByAtom(
- PWNDCLASS_OBJECT* Class,
+PWNDCLASS_OBJECT FASTCALL
+ClassGetClassByAtom(
RTL_ATOM Atom,
HINSTANCE hInstance);
-BOOL FASTCALL
-ClassReferenceClassByName(
- PWNDCLASS_OBJECT *Class,
+PWNDCLASS_OBJECT FASTCALL
+ClassGetClassByName(
LPCWSTR ClassName,
HINSTANCE hInstance);
-BOOL FASTCALL
-ClassReferenceClassByNameOrAtom(
- PWNDCLASS_OBJECT *Class,
+PWNDCLASS_OBJECT FASTCALL
+ClassGetClassByNameOrAtom(
LPCWSTR ClassNameOrAtom,
HINSTANCE hInstance);