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
;
92 HANDLE hPowerRequestEvent
,
93 HANDLE hMediaRequestEvent
)
97 // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
98 // Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations"
99 // Create Event for Diconnect Desktop.
101 /* Initialize Video. */
102 Status
= InitVideo();
103 if (!NT_SUCCESS(Status
)) return Status
;
107 // DrvChangeDisplaySettings.
108 // Update Shared Device Caps.
109 // Initialize User Screen.
111 // Create ThreadInfo for this Thread!
116 // Callback to User32 Client Thread Setup
118 co_IntClientThreadSetup();
121 // Set Global SERVERINFO Error flags.
124 NtUserUpdatePerUserSystemParameters(0, TRUE
);
128 return STATUS_SUCCESS
;
132 Called from win32csr.
138 HANDLE hPowerRequestEvent
,
139 HANDLE hMediaRequestEvent
)
143 DPRINT1("Enter NtUserInitialize(%lx, %p, %p)\n",
144 dwWinVersion
, hPowerRequestEvent
, hMediaRequestEvent
);
146 /* Check the Windows version */
147 if (dwWinVersion
!= 0)
149 return STATUS_UNSUCCESSFUL
;
152 /* Acquire exclusive lock */
153 UserEnterExclusive();
155 /* Check if we are already initialized */
159 return STATUS_UNSUCCESSFUL
;
162 // Initialize Power Request List.
163 // Initialize Media Change.
164 // InitializeGreCSRSS();
166 // Startup DxGraphics.
167 // calls ** IntGdiGetLanguageID() and sets it **.
168 // Enables Fonts drivers, Initialize Font table & Stock Fonts.
171 /* Initialize USER */
172 Status
= UserInitialize(hPowerRequestEvent
, hMediaRequestEvent
);
174 /* Set us as initialized */
175 gbInitialized
= TRUE
;
185 True if current thread owns the lock (possibly shared)
187 BOOL FASTCALL
UserIsEntered(VOID
)
189 return ExIsResourceAcquiredExclusiveLite(&UserLock
)
190 || ExIsResourceAcquiredSharedLite(&UserLock
);
193 BOOL FASTCALL
UserIsEnteredExclusive(VOID
)
195 return ExIsResourceAcquiredExclusiveLite(&UserLock
);
198 VOID FASTCALL
CleanupUserImpl(VOID
)
200 ExDeleteResourceLite(&UserLock
);
203 VOID FASTCALL
UserEnterShared(VOID
)
205 KeEnterCriticalRegion();
206 ExAcquireResourceSharedLite(&UserLock
, TRUE
);
209 VOID FASTCALL
UserEnterExclusive(VOID
)
211 KeEnterCriticalRegion();
212 ExAcquireResourceExclusiveLite(&UserLock
, TRUE
);
215 VOID FASTCALL
UserLeave(VOID
)
217 ExReleaseResourceLite(&UserLock
);
218 KeLeaveCriticalRegion();