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");
80 return STATUS_SUCCESS
;
89 HANDLE hPowerRequestEvent
,
90 HANDLE hMediaRequestEvent
)
92 // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
93 // Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations"
94 // Create Event for Diconnect Desktop.
99 // DrvChangeDisplaySettings.
100 // Update Shared Device Caps.
101 // Initialize User Screen.
103 // Create ThreadInfo for this Thread!
108 // Callback to User32 Client Thread Setup
110 co_IntClientThreadSetup();
113 // Set Global SERVERINFO Error flags.
116 NtUserUpdatePerUserSystemParameters(0, TRUE
);
120 return STATUS_SUCCESS
;
124 Called from win32csr.
130 HANDLE hPowerRequestEvent
,
131 HANDLE hMediaRequestEvent
)
135 DPRINT1("Enter NtUserInitialize(%lx, %p, %p)\n",
136 dwWinVersion
, hPowerRequestEvent
, hMediaRequestEvent
);
138 /* Check the Windows version */
139 if (dwWinVersion
!= 0)
141 return STATUS_UNSUCCESSFUL
;
144 /* Acquire exclusive lock */
145 UserEnterExclusive();
147 /* Check if we are already initialized */
151 return STATUS_UNSUCCESSFUL
;
154 // Initialize Power Request List.
155 // Initialize Media Change.
156 // InitializeGreCSRSS();
158 // Startup DxGraphics.
159 // calls ** IntGdiGetLanguageID() and sets it **.
160 // Enables Fonts drivers, Initialize Font table & Stock Fonts.
163 /* Initialize USER */
164 Status
= UserInitialize(hPowerRequestEvent
, hMediaRequestEvent
);
166 /* Set us as initialized */
167 gbInitialized
= TRUE
;
177 True if current thread owns the lock (possibly shared)
179 BOOL FASTCALL
UserIsEntered(VOID
)
181 return ExIsResourceAcquiredExclusiveLite(&UserLock
)
182 || ExIsResourceAcquiredSharedLite(&UserLock
);
185 BOOL FASTCALL
UserIsEnteredExclusive(VOID
)
187 return ExIsResourceAcquiredExclusiveLite(&UserLock
);
190 VOID FASTCALL
CleanupUserImpl(VOID
)
192 ExDeleteResourceLite(&UserLock
);
195 VOID FASTCALL
UserEnterShared(VOID
)
197 KeEnterCriticalRegion();
198 ExAcquireResourceSharedLite(&UserLock
, TRUE
);
201 VOID FASTCALL
UserEnterExclusive(VOID
)
203 KeEnterCriticalRegion();
204 ExAcquireResourceExclusiveLite(&UserLock
, TRUE
);
207 VOID FASTCALL
UserLeave(VOID
)
209 ExReleaseResourceLite(&UserLock
);
210 KeLeaveCriticalRegion();