|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
csrss.c
Abstract:
This is the main startup module for the Server side of the Client Server Runtime Subsystem (CSRSS)
Author:
Steve Wood (stevewo) 8-Oct-1990
Environment:
User Mode Only
Revision History:
--*/
#include "csrsrv.h"
VOID DisableErrorPopups( VOID ) {
ULONG NewMode;
NewMode = 0; NtSetInformationProcess( NtCurrentProcess(), ProcessDefaultHardErrorMode, (PVOID) &NewMode, sizeof(NewMode) ); }
int _cdecl main( IN ULONG argc, IN PCH argv[], IN PCH envp[], IN ULONG DebugFlag OPTIONAL ) { NTSTATUS status; ULONG ErrorResponse; KPRIORITY SetBasePriority;
//
// Force early creation of critical section events
//
// RtlEnableEarlyCriticalSectionEventCreation (); // Looping inside resource package now
SetBasePriority = FOREGROUND_BASE_PRIORITY + 4; NtSetInformationProcess( NtCurrentProcess(), ProcessBasePriority, (PVOID) &SetBasePriority, sizeof(SetBasePriority) );
//
// Give IOPL to the server so GDI and the display drivers can access the
// video registers.
//
status = NtSetInformationProcess( NtCurrentProcess(), ProcessUserModeIOPL, NULL, 0 );
if (!NT_SUCCESS( status )) {
IF_DEBUG {
DbgPrint( "CSRSS: Unable to give IOPL to the server. status == %X\n", status); }
status = NtRaiseHardError( (NTSTATUS)STATUS_IO_PRIVILEGE_FAILED, 0, 0, NULL, OptionOk, &ErrorResponse ); }
status = CsrServerInitialization( argc, argv );
if (!NT_SUCCESS( status )) { IF_DEBUG { DbgPrint( "CSRSS: Unable to initialize server. status == %X\n", status ); }
NtTerminateProcess( NtCurrentProcess(), status ); } DisableErrorPopups();
if (NtCurrentPeb()->SessionId == 0) { //
// Make terminating the root csrss fatal
//
RtlSetProcessIsCritical(TRUE, NULL, FALSE); }
NtTerminateThread( NtCurrentThread(), status ); return( 0 ); }
|