Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenntuser.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS kernel 00004 * PURPOSE: ntuser init. and main funcs. 00005 * FILE: subsystems/win32/win32k/ntuser/ntuser.c 00006 */ 00007 00008 #include <win32k.h> 00009 DBG_DEFAULT_CHANNEL(UserMisc); 00010 00011 /* GLOBALS *******************************************************************/ 00012 00013 PTHREADINFO gptiCurrent = NULL; 00014 PPROCESSINFO gppiInputProvider = NULL; 00015 ERESOURCE UserLock; 00016 ATOM AtomMessage; // Window Message atom. 00017 ATOM AtomWndObj; // Window Object atom. 00018 ATOM AtomLayer; // Window Layer atom. 00019 ATOM AtomFlashWndState; // Window Flash State atom. 00020 BOOL gbInitialized; 00021 HINSTANCE hModClient = NULL; 00022 BOOL ClientPfnInit = FALSE; 00023 00024 /* PRIVATE FUNCTIONS *********************************************************/ 00025 00026 static 00027 NTSTATUS FASTCALL 00028 InitUserAtoms(VOID) 00029 { 00030 00031 gpsi->atomSysClass[ICLS_MENU] = 32768; 00032 gpsi->atomSysClass[ICLS_DESKTOP] = 32769; 00033 gpsi->atomSysClass[ICLS_DIALOG] = 32770; 00034 gpsi->atomSysClass[ICLS_SWITCH] = 32771; 00035 gpsi->atomSysClass[ICLS_ICONTITLE] = 32772; 00036 gpsi->atomSysClass[ICLS_TOOLTIPS] = 32774; 00037 00038 /* System Message Atom */ 00039 AtomMessage = IntAddGlobalAtom(L"Message", TRUE); 00040 gpsi->atomSysClass[ICLS_HWNDMESSAGE] = AtomMessage; 00041 00042 /* System Context Help Id Atom */ 00043 gpsi->atomContextHelpIdProp = IntAddGlobalAtom(L"SysCH", TRUE); 00044 00045 gpsi->atomIconSmProp = IntAddGlobalAtom(L"SysICS", TRUE); 00046 gpsi->atomIconProp = IntAddGlobalAtom(L"SysIC", TRUE); 00047 00048 gpsi->atomFrostedWindowProp = IntAddGlobalAtom(L"SysFrostedWindow", TRUE); 00049 00050 AtomWndObj = IntAddGlobalAtom(L"SysWNDO", TRUE); 00051 AtomLayer = IntAddGlobalAtom(L"SysLayer", TRUE); 00052 AtomFlashWndState = IntAddGlobalAtom(L"FlashWState", TRUE); 00053 00054 return STATUS_SUCCESS; 00055 } 00056 00057 /* FUNCTIONS *****************************************************************/ 00058 00059 INIT_FUNCTION 00060 NTSTATUS 00061 NTAPI 00062 InitUserImpl(VOID) 00063 { 00064 NTSTATUS Status; 00065 00066 ExInitializeResourceLite(&UserLock); 00067 00068 if (!UserCreateHandleTable()) 00069 { 00070 ERR("Failed creating handle table\n"); 00071 return STATUS_INSUFFICIENT_RESOURCES; 00072 } 00073 00074 Status = InitSessionImpl(); 00075 if (!NT_SUCCESS(Status)) 00076 { 00077 ERR("Error init session impl.\n"); 00078 return Status; 00079 } 00080 00081 InitUserAtoms(); 00082 00083 InitSysParams(); 00084 00085 return STATUS_SUCCESS; 00086 } 00087 00088 NTSTATUS 00089 NTAPI 00090 InitVideo(); 00091 00092 NTSTATUS 00093 NTAPI 00094 UserInitialize( 00095 HANDLE hPowerRequestEvent, 00096 HANDLE hMediaRequestEvent) 00097 { 00098 static const DWORD wPattern55AA[] = /* 32 bit aligned */ 00099 { 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, 00100 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa }; 00101 HBITMAP hPattern55AABitmap = NULL; 00102 NTSTATUS Status; 00103 00104 // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA) 00105 // Create Event for Diconnect Desktop. 00106 00107 Status = UserCreateWinstaDirectoy(); 00108 if (!NT_SUCCESS(Status)) return Status; 00109 00110 /* Initialize Video. */ 00111 Status = InitVideo(); 00112 if (!NT_SUCCESS(Status)) return Status; 00113 00114 // { 00115 // DrvInitConsole. 00116 // DrvChangeDisplaySettings. 00117 // Update Shared Device Caps. 00118 // Initialize User Screen. 00119 // } 00120 // Create ThreadInfo for this Thread! 00121 // { 00122 00123 GetW32ThreadInfo(); 00124 00125 // Callback to User32 Client Thread Setup 00126 00127 co_IntClientThreadSetup(); 00128 00129 // } 00130 // Set Global SERVERINFO Error flags. 00131 // Load Resources. 00132 00133 NtUserUpdatePerUserSystemParameters(0, TRUE); 00134 00135 CsrInit(); 00136 00137 if (gpsi->hbrGray == NULL) 00138 { 00139 hPattern55AABitmap = GreCreateBitmap(8, 8, 1, 1, (LPBYTE)wPattern55AA); 00140 gpsi->hbrGray = IntGdiCreatePatternBrush(hPattern55AABitmap); 00141 GreDeleteObject(hPattern55AABitmap); 00142 GreSetBrushOwner(gpsi->hbrGray, GDI_OBJ_HMGR_PUBLIC); 00143 } 00144 00145 return STATUS_SUCCESS; 00146 } 00147 00148 /* 00149 Called from win32csr. 00150 */ 00151 NTSTATUS 00152 APIENTRY 00153 NtUserInitialize( 00154 DWORD dwWinVersion, 00155 HANDLE hPowerRequestEvent, 00156 HANDLE hMediaRequestEvent) 00157 { 00158 NTSTATUS Status; 00159 00160 ERR("Enter NtUserInitialize(%lx, %p, %p)\n", 00161 dwWinVersion, hPowerRequestEvent, hMediaRequestEvent); 00162 00163 /* Check the Windows version */ 00164 if (dwWinVersion != 0) 00165 { 00166 return STATUS_UNSUCCESSFUL; 00167 } 00168 00169 /* Acquire exclusive lock */ 00170 UserEnterExclusive(); 00171 00172 /* Check if we are already initialized */ 00173 if (gbInitialized) 00174 { 00175 UserLeave(); 00176 return STATUS_UNSUCCESSFUL; 00177 } 00178 00179 // Initialize Power Request List. 00180 // Initialize Media Change. 00181 // InitializeGreCSRSS(); 00182 // { 00183 // Startup DxGraphics. 00184 // calls ** UserGetLanguageID() and sets it **. 00185 // Enables Fonts drivers, Initialize Font table & Stock Fonts. 00186 // } 00187 00188 /* Initialize USER */ 00189 Status = UserInitialize(hPowerRequestEvent, hMediaRequestEvent); 00190 00191 /* Set us as initialized */ 00192 gbInitialized = TRUE; 00193 00194 /* Return */ 00195 UserLeave(); 00196 return Status; 00197 } 00198 00199 00200 /* 00201 RETURN 00202 True if current thread owns the lock (possibly shared) 00203 */ 00204 BOOL FASTCALL UserIsEntered(VOID) 00205 { 00206 return ExIsResourceAcquiredExclusiveLite(&UserLock) 00207 || ExIsResourceAcquiredSharedLite(&UserLock); 00208 } 00209 00210 BOOL FASTCALL UserIsEnteredExclusive(VOID) 00211 { 00212 return ExIsResourceAcquiredExclusiveLite(&UserLock); 00213 } 00214 00215 VOID FASTCALL CleanupUserImpl(VOID) 00216 { 00217 ExDeleteResourceLite(&UserLock); 00218 } 00219 00220 VOID FASTCALL UserEnterShared(VOID) 00221 { 00222 KeEnterCriticalRegion(); 00223 ExAcquireResourceSharedLite(&UserLock, TRUE); 00224 } 00225 00226 VOID FASTCALL UserEnterExclusive(VOID) 00227 { 00228 ASSERT_NOGDILOCKS(); 00229 KeEnterCriticalRegion(); 00230 ExAcquireResourceExclusiveLite(&UserLock, TRUE); 00231 gptiCurrent = PsGetCurrentThreadWin32Thread(); 00232 } 00233 00234 VOID FASTCALL UserLeave(VOID) 00235 { 00236 ASSERT_NOGDILOCKS(); 00237 ExReleaseResourceLite(&UserLock); 00238 KeLeaveCriticalRegion(); 00239 } Generated on Fri May 25 2012 04:36:52 for ReactOS by
1.7.6.1
|