ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ntuser.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.