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>
23 /* GLOBALS ******************************************************************/
26 * Server's named ports.
28 static HANDLE ApiPortHandle;
31 HANDLE CsrInitEvent = INVALID_HANDLE_VALUE;
32 HANDLE CsrHeap = INVALID_HANDLE_VALUE;
34 HANDLE CsrObjectDirectory = INVALID_HANDLE_VALUE;
35 HANDLE CsrApiPort = INVALID_HANDLE_VALUE;
36 HANDLE CsrSbApiPort = INVALID_HANDLE_VALUE;
38 UNICODE_STRING CsrDirectoryName;
40 extern HANDLE CsrssApiHeap;
43 InitializeVideoAddressSpace(VOID);
52 OBJECT_ATTRIBUTES Attributes;
53 ANSI_STRING AnsiString;
57 /* DbgPrint ("Arguments: %ld\n", ArgumentCount);
58 for (i = 0; i < ArgumentCount; i++)
60 DbgPrint ("Argument %ld: %S\n", i, ArgumentArray[i]);
64 /* create object directory ('\Windows') */
65 RtlCreateUnicodeString (&CsrDirectoryName,
68 InitializeObjectAttributes (&Attributes,
74 Status = NtCreateDirectoryObject(&CsrObjectDirectory,
85 OBJECT_ATTRIBUTES ObjectAttributes;
86 UNICODE_STRING DeviceName;
91 InitializeVideoAddressSpace();
93 RtlInitUnicodeStringFromLiteral(&DeviceName, L"\\??\\DISPLAY1");
94 InitializeObjectAttributes(&ObjectAttributes,
99 Status = NtOpenFile(&VideoHandle,
105 if (NT_SUCCESS(Status))
107 NtClose(VideoHandle);
112 /**********************************************************************
114 * CsrServerInitialization
117 * Create a directory object (\windows) and two named LPC ports:
119 * 1. \windows\ApiPort
120 * 2. \windows\SbApiPort
123 * TRUE: Initialization OK; otherwise FALSE.
127 CsrServerInitialization (
133 OBJECT_ATTRIBUTES ObAttributes;
134 UNICODE_STRING PortName;
135 OBJECT_ATTRIBUTES RefreshEventAttr;
136 UNICODE_STRING RefreshEventName;
137 HANDLE RefreshEventHandle;
139 Status = CsrParseCommandLine (ArgumentCount, ArgumentArray);
140 if (!NT_SUCCESS(Status))
142 DPRINT1("CSR: Unable to parse the command line (Status: %x)\n", Status);
148 /* NEW NAMED PORT: \ApiPort */
149 RtlInitUnicodeStringFromLiteral(&PortName, L"\\Windows\\ApiPort");
150 InitializeObjectAttributes(&ObAttributes,
156 Status = NtCreatePort(&ApiPortHandle,
161 if (!NT_SUCCESS(Status))
163 DPRINT1("CSR: Unable to create \\ApiPort (Status %x)\n", Status);
166 CsrssApiHeap = RtlCreateHeap(HEAP_GROWABLE,
172 if (CsrssApiHeap == NULL)
174 DPRINT1("CSR: Failed to create private heap, aborting\n");
178 CsrInitConsoleSupport();
179 Status = RtlCreateUserThread(NtCurrentProcess(),
185 (PTHREAD_START_ROUTINE)Thread_Api,
189 if (!NT_SUCCESS(Status))
191 DPRINT1("CSR: Unable to create server thread\n");
192 NtClose(ApiPortHandle);
195 RtlInitUnicodeStringFromLiteral( &RefreshEventName, L"\\TextConsoleRefreshEvent" );
196 InitializeObjectAttributes( &RefreshEventAttr, &RefreshEventName, 0, NULL, NULL );
197 Status = NtCreateEvent( &RefreshEventHandle, STANDARD_RIGHTS_ALL, &RefreshEventAttr, FALSE, FALSE );
198 if( !NT_SUCCESS( Status ) )
200 DPRINT1( "CSR: Unable to create refresh event!\n" );
203 Status = RtlCreateUserThread( NtCurrentProcess(), NULL, FALSE, 0, NULL, NULL, (PTHREAD_START_ROUTINE)Console_Api, (PVOID) RefreshEventHandle, NULL, NULL );
204 if( !NT_SUCCESS( Status ) )
206 DPRINT1( "CSR: Unable to create console thread\n" );