2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: ntuser init. and main funcs.
5 * FILE: subsystems/win32/win32k/ntuser/ntuser.c
7 * 16 July 2005 Created (hardon)
10 /* INCLUDES ******************************************************************/
19 /* GLOBALS *******************************************************************/
22 ATOM AtomMessage
; // Window Message atom.
23 ATOM AtomWndObj
; // Window Object atom.
25 HINSTANCE hModClient
= NULL
;
26 BOOL ClientPfnInit
= FALSE
;
28 /* PRIVATE FUNCTIONS *********************************************************/
35 gpsi
->atomSysClass
[ICLS_MENU
] = 32768;
36 gpsi
->atomSysClass
[ICLS_DESKTOP
] = 32769;
37 gpsi
->atomSysClass
[ICLS_DIALOG
] = 32770;
38 gpsi
->atomSysClass
[ICLS_SWITCH
] = 32771;
39 gpsi
->atomSysClass
[ICLS_ICONTITLE
] = 32772;
40 gpsi
->atomSysClass
[ICLS_TOOLTIPS
] = 32774;
42 /* System Message Atom */
43 AtomMessage
= IntAddGlobalAtom(L
"Message", TRUE
);
44 gpsi
->atomSysClass
[ICLS_HWNDMESSAGE
] = AtomMessage
;
46 /* System Context Help Id Atom */
47 gpsi
->atomContextHelpIdProp
= IntAddGlobalAtom(L
"SysCH", TRUE
);
49 AtomWndObj
= IntAddGlobalAtom(L
"SysWNDO", TRUE
);
51 return STATUS_SUCCESS
;
54 /* FUNCTIONS *****************************************************************/
57 NTSTATUS FASTCALL
InitUserImpl(VOID
)
61 ExInitializeResourceLite(&UserLock
);
63 if (!UserCreateHandleTable())
65 DPRINT1("Failed creating handle table\n");
66 return STATUS_INSUFFICIENT_RESOURCES
;
69 Status
= InitSessionImpl();
70 if (!NT_SUCCESS(Status
))
72 DPRINT1("Error init session impl.\n");
78 gpsi
= UserHeapAlloc(sizeof(SERVERINFO
));
81 RtlZeroMemory(gpsi
, sizeof(SERVERINFO
));
82 DPRINT("Global Server Data -> %x\n", gpsi
);
90 return STATUS_SUCCESS
;
97 HANDLE hPowerRequestEvent
,
98 HANDLE hMediaRequestEvent
)
100 // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
101 // Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations"
102 // Create Event for Diconnect Desktop.
106 // DrvChangeDisplaySettings.
107 // Update Shared Device Caps.
108 // Initialize User Screen.
110 // Create ThreadInfo for this Thread!
115 // Callback to User32 Client Thread Setup
117 co_IntClientThreadSetup();
120 // Set Global SERVERINFO Error flags.
123 NtUserUpdatePerUserSystemParameters(0, TRUE
);
127 return STATUS_SUCCESS
;
131 Called from win32csr.
137 HANDLE hPowerRequestEvent
,
138 HANDLE hMediaRequestEvent
)
142 DPRINT("Enter NtUserInitialize(%lx, %p, %p)\n",
143 dwWinVersion
, hPowerRequestEvent
, hMediaRequestEvent
);
145 /* Check the Windows version */
146 if (dwWinVersion
!= 0)
148 return STATUS_UNSUCCESSFUL
;
151 /* Acquire exclusive lock */
152 UserEnterExclusive();
154 /* Check if we are already initialized */
158 return STATUS_UNSUCCESSFUL
;
161 // Initialize Power Request List.
162 // Initialize Media Change.
163 // InitializeGreCSRSS();
165 // Startup DxGraphics.
166 // calls ** IntGdiGetLanguageID() and sets it **.
167 // Enables Fonts drivers, Initialize Font table & Stock Fonts.
170 /* Initialize USER */
171 Status
= UserInitialize(hPowerRequestEvent
, hMediaRequestEvent
);
173 /* Set us as initialized */
174 gbInitialized
= TRUE
;
184 True if current thread owns the lock (possibly shared)
186 BOOL FASTCALL
UserIsEntered(VOID
)
188 return ExIsResourceAcquiredExclusiveLite(&UserLock
)
189 || ExIsResourceAcquiredSharedLite(&UserLock
);
192 BOOL FASTCALL
UserIsEnteredExclusive(VOID
)
194 return ExIsResourceAcquiredExclusiveLite(&UserLock
);
197 VOID FASTCALL
CleanupUserImpl(VOID
)
199 ExDeleteResourceLite(&UserLock
);
202 VOID FASTCALL
UserEnterShared(VOID
)
204 KeEnterCriticalRegion();
205 ExAcquireResourceSharedLite(&UserLock
, TRUE
);
208 VOID FASTCALL
UserEnterExclusive(VOID
)
210 KeEnterCriticalRegion();
211 ExAcquireResourceExclusiveLite(&UserLock
, TRUE
);
214 VOID FASTCALL
UserLeave(VOID
)
216 ExReleaseResourceLite(&UserLock
);
217 KeLeaveCriticalRegion();