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 *****************************************************************/
63 ExInitializeResourceLite(&UserLock
);
65 if (!UserCreateHandleTable())
67 DPRINT1("Failed creating handle table\n");
68 return STATUS_INSUFFICIENT_RESOURCES
;
71 Status
= InitSessionImpl();
72 if (!NT_SUCCESS(Status
))
74 DPRINT1("Error init session impl.\n");
82 return STATUS_SUCCESS
;
91 HANDLE hPowerRequestEvent
,
92 HANDLE hMediaRequestEvent
)
94 // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
95 // Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations"
96 // Create Event for Diconnect Desktop.
101 // DrvChangeDisplaySettings.
102 // Update Shared Device Caps.
103 // Initialize User Screen.
105 // Create ThreadInfo for this Thread!
110 // Callback to User32 Client Thread Setup
112 co_IntClientThreadSetup();
115 // Set Global SERVERINFO Error flags.
118 NtUserUpdatePerUserSystemParameters(0, TRUE
);
122 return STATUS_SUCCESS
;
126 Called from win32csr.
132 HANDLE hPowerRequestEvent
,
133 HANDLE hMediaRequestEvent
)
137 DPRINT1("Enter NtUserInitialize(%lx, %p, %p)\n",
138 dwWinVersion
, hPowerRequestEvent
, hMediaRequestEvent
);
140 /* Check the Windows version */
141 if (dwWinVersion
!= 0)
143 return STATUS_UNSUCCESSFUL
;
146 /* Acquire exclusive lock */
147 UserEnterExclusive();
149 /* Check if we are already initialized */
153 return STATUS_UNSUCCESSFUL
;
156 // Initialize Power Request List.
157 // Initialize Media Change.
158 // InitializeGreCSRSS();
160 // Startup DxGraphics.
161 // calls ** IntGdiGetLanguageID() and sets it **.
162 // Enables Fonts drivers, Initialize Font table & Stock Fonts.
165 /* Initialize USER */
166 Status
= UserInitialize(hPowerRequestEvent
, hMediaRequestEvent
);
168 /* Set us as initialized */
169 gbInitialized
= TRUE
;
179 True if current thread owns the lock (possibly shared)
181 BOOL FASTCALL
UserIsEntered(VOID
)
183 return ExIsResourceAcquiredExclusiveLite(&UserLock
)
184 || ExIsResourceAcquiredSharedLite(&UserLock
);
187 BOOL FASTCALL
UserIsEnteredExclusive(VOID
)
189 return ExIsResourceAcquiredExclusiveLite(&UserLock
);
192 VOID FASTCALL
CleanupUserImpl(VOID
)
194 ExDeleteResourceLite(&UserLock
);
197 VOID FASTCALL
UserEnterShared(VOID
)
199 KeEnterCriticalRegion();
200 ExAcquireResourceSharedLite(&UserLock
, TRUE
);
203 VOID FASTCALL
UserEnterExclusive(VOID
)
205 KeEnterCriticalRegion();
206 ExAcquireResourceExclusiveLite(&UserLock
, TRUE
);
209 VOID FASTCALL
UserLeave(VOID
)
211 ExReleaseResourceLite(&UserLock
);
212 KeLeaveCriticalRegion();