3 * reactos/subsys/csrss/init.c
5 * Initialize the CSRSS subsystem server process.
7 * ReactOS Operating System
11 /* INCLUDES ******************************************************************/
13 #include <ddk/ntddk.h>
14 #include <ntdll/rtl.h>
15 #include <csrss/csrss.h>
16 #include <win32k/win32k.h>
20 /* GLOBALS ******************************************************************/
23 * Server's named ports.
25 static HANDLE ApiPortHandle;
28 HANDLE CsrInitEvent = INVALID_HANDLE_VALUE;
29 HANDLE CsrHeap = INVALID_HANDLE_VALUE;
31 HANDLE CsrObjectDirectory = INVALID_HANDLE_VALUE;
32 HANDLE CsrApiPort = INVALID_HANDLE_VALUE;
33 HANDLE CsrSbApiPort = INVALID_HANDLE_VALUE;
35 UNICODE_STRING CsrDirectoryName;
37 extern HANDLE CsrssApiHeap;
40 InitializeVideoAddressSpace(VOID);
49 OBJECT_ATTRIBUTES Attributes;
50 ANSI_STRING AnsiString;
54 /* DbgPrint ("Arguments: %ld\n", ArgumentCount);
55 for (i = 0; i < ArgumentCount; i++)
57 DbgPrint ("Argument %ld: %S\n", i, ArgumentArray[i]);
61 /* create object directory ('\Windows') */
62 RtlCreateUnicodeString (&CsrDirectoryName,
65 InitializeObjectAttributes (&Attributes,
71 Status = NtCreateDirectoryObject(&CsrObjectDirectory,
82 OBJECT_ATTRIBUTES ObjectAttributes;
83 UNICODE_STRING DeviceName;
88 RtlInitUnicodeStringFromLiteral(&DeviceName, L"\\??\\DISPLAY1");
89 InitializeObjectAttributes(&ObjectAttributes,
94 Status = NtOpenFile(&VideoHandle,
100 if (NT_SUCCESS(Status))
102 NtClose(VideoHandle);
107 /**********************************************************************
109 * CsrServerInitialization
112 * Create a directory object (\windows) and two named LPC ports:
114 * 1. \windows\ApiPort
115 * 2. \windows\SbApiPort
118 * TRUE: Initialization OK; otherwise FALSE.
122 CsrServerInitialization (
128 OBJECT_ATTRIBUTES ObAttributes;
129 UNICODE_STRING PortName;
130 OBJECT_ATTRIBUTES RefreshEventAttr;
131 UNICODE_STRING RefreshEventName;
132 HANDLE RefreshEventHandle;
134 Status = CsrParseCommandLine (ArgumentCount, ArgumentArray);
135 if (!NT_SUCCESS(Status))
137 PrintString("CSR: Unable to parse the command line (Status: %x)\n", Status);
143 /* NEW NAMED PORT: \ApiPort */
144 RtlInitUnicodeStringFromLiteral(&PortName, L"\\Windows\\ApiPort");
145 InitializeObjectAttributes(&ObAttributes,
151 Status = NtCreatePort(&ApiPortHandle,
156 if (!NT_SUCCESS(Status))
158 PrintString("CSR: Unable to create \\ApiPort (Status %x)\n", Status);
161 CsrssApiHeap = RtlCreateHeap(HEAP_GROWABLE,
167 if (CsrssApiHeap == NULL)
169 PrintString("CSR: Failed to create private heap, aborting\n");
173 CsrInitConsoleSupport();
174 Status = RtlCreateUserThread(NtCurrentProcess(),
180 (PTHREAD_START_ROUTINE)Thread_Api,
184 if (!NT_SUCCESS(Status))
186 PrintString("CSR: Unable to create server thread\n");
187 NtClose(ApiPortHandle);
190 RtlInitUnicodeStringFromLiteral( &RefreshEventName, L"\\TextConsoleRefreshEvent" );
191 InitializeObjectAttributes( &RefreshEventAttr, &RefreshEventName, 0, NULL, NULL );
192 Status = NtCreateEvent( &RefreshEventHandle, STANDARD_RIGHTS_ALL, &RefreshEventAttr, FALSE, FALSE );
193 if( !NT_SUCCESS( Status ) )
195 PrintString( "CSR: Unable to create refresh event!\n" );
198 Status = RtlCreateUserThread( NtCurrentProcess(), NULL, FALSE, 0, NULL, NULL, (PTHREAD_START_ROUTINE)Console_Api, (PVOID) RefreshEventHandle, NULL, NULL );
199 if( !NT_SUCCESS( Status ) )
201 PrintString( "CSR: Unable to create console thread\n" );
205 InitializeVideoAddressSpace();