diff --git a/reactos/subsys/csrss/api/wapi.c b/reactos/subsys/csrss/api/wapi.c index bb37e9bc398..3d1c4e7af84 100644 --- a/reactos/subsys/csrss/api/wapi.c +++ b/reactos/subsys/csrss/api/wapi.c @@ -178,7 +178,7 @@ ServerApiPortThead(PVOID PortHandle) Status = NtAcceptConnectPort(&ServerPort, PortHandle, NULL, - 1, + TRUE, 0, &LpcRead); if (!NT_SUCCESS(Status)) diff --git a/reactos/subsys/csrss/init.c b/reactos/subsys/csrss/init.c index 146f28fb5bd..2437f769f04 100644 --- a/reactos/subsys/csrss/init.c +++ b/reactos/subsys/csrss/init.c @@ -17,11 +17,12 @@ #include #include #include +#include #include "api.h" #include "csrplugin.h" -#define NDEBUG +//#define NDEBUG #include /* GLOBALS ******************************************************************/ @@ -218,6 +219,37 @@ CSRSS_API_DEFINITION NativeDefinitions[] = { 0, 0, 0, NULL } }; +/********************************************************************** + * NAME + * CsrpRegisterSubsystem/0 + * + * DESCRIPTION + * Register CSRSS in the SM to manage IMAGE_SUBSYSTEM_WINDOWS_CUI + * processes (environment subsystem server). + * + * RETURN VALUE + * STATUS_SUCCESS on success. + */ +static NTSTATUS FASTCALL +CsrpRegisterSubsystem(PHANDLE hSmApiPort) +{ + NTSTATUS Status = STATUS_SUCCESS; + UNICODE_STRING SbApiPortName; + + RtlInitUnicodeString (& SbApiPortName, L"\\Windows\\SbApiPort"); + Status = SmConnectApiPort (& SbApiPortName, + (HANDLE)-1, //unused + IMAGE_SUBSYSTEM_WINDOWS_CUI, + hSmApiPort); + if(!NT_SUCCESS(Status)) + { + DPRINT("CSR: unable to connect to the SM (Status=0x%lx)\n", Status); + return Status; + } + DisplayString(L"CSR: registered with SM\n"); + return Status; +} + /********************************************************************** * NAME @@ -238,9 +270,20 @@ CsrServerInitialization ( ) { NTSTATUS Status; + HANDLE hSmApiPort = (HANDLE) 0; OBJECT_ATTRIBUTES ObAttributes; UNICODE_STRING PortName; HANDLE ApiPortHandle; +// HANDLE hSbApiPort = (HANDLE) 0; + +DisplayString(L"CSR: CsrServerInitialization\n"); + + Status = CsrpRegisterSubsystem(& hSmApiPort); + if (! NT_SUCCESS(Status)) + { + DPRINT1("CSR: Unable to register subsystem (Status: %x)\n", Status); + return FALSE; + } Status = CsrParseCommandLine (ArgumentCount, ArgumentArray); if (! NT_SUCCESS(Status)) @@ -269,7 +312,7 @@ CsrServerInitialization ( return Status; } - /* NEW NAMED PORT: \ApiPort */ + /* NEW NAMED PORT: \Windows\ApiPort */ RtlRosInitUnicodeStringFromLiteral(&PortName, L"\\Windows\\ApiPort"); InitializeObjectAttributes(&ObAttributes, &PortName, @@ -283,7 +326,7 @@ CsrServerInitialization ( 0); if (! NT_SUCCESS(Status)) { - DPRINT1("CSR: Unable to create \\ApiPort (Status %x)\n", Status); + DPRINT1("CSR: Unable to create \\Windows\\ApiPort (Status %x)\n", Status); return FALSE; } Status = RtlCreateUserThread(NtCurrentProcess(), @@ -302,6 +345,9 @@ CsrServerInitialization ( NtClose(ApiPortHandle); return FALSE; } + + /* TODO: create \Windows\SbApiPort */ + Status = CsrClientConnectToServer(); if (!NT_SUCCESS(Status)) { @@ -315,7 +361,15 @@ CsrServerInitialization ( return FALSE; } - return CallInitComplete(); + if (CallInitComplete()) + { +#if 0 + Status = SmCompleteSession (hSmApiPort,hSbApiPort,ApiPortHandle); +#endif + NtClose (hSmApiPort); + return TRUE; + } + return FALSE; } /* EOF */ diff --git a/reactos/subsys/csrss/lpcstub.c b/reactos/subsys/csrss/lpcstub.c deleted file mode 100644 index 1eaff74e8d9..00000000000 --- a/reactos/subsys/csrss/lpcstub.c +++ /dev/null @@ -1,42 +0,0 @@ -/* $Id$ - * - * lpcstub.c - * - * ReactOS Operating System - * - * - */ -#include -#include "api.h" - - -/* CUI & GUI Win32(tm) API port */ - -LPC_RETURN_CODE -PortDispatcher_Api( - PLPC_REQUEST_REPLY pLpcRequestReply - ) -{ - switch (pLpcRequestReply->Function) - { - case CSRSS_API_PROCESS_CREATE: - return CSRSS_CreateProcess(pLpcRequestReply); - case CSRSS_API_PROCESS_TERMINATE: - return CSRSS_TerminateProcess(pLpcRequestReply); - } - return LPC_ERROR_INVALID_FUNCTION; -} - - -/* The \SbApi dispatcher: what is this port for? */ - -LPC_RETURN_CODE -PortDispatcher_SbApi( - PLPC_REQUEST_REPLY pLpcRequestReply - ) -{ - return LPC_ERROR_INVALID_FUNCTION; -} - - -/* EOF */ diff --git a/reactos/subsys/csrss/makefile b/reactos/subsys/csrss/makefile index 225103f7a54..03040314e31 100644 --- a/reactos/subsys/csrss/makefile +++ b/reactos/subsys/csrss/makefile @@ -9,7 +9,7 @@ TARGET_APPTYPE = native TARGET_NAME = csrss -TARGET_SDKLIBS = rosrtl.a ntdll.a +TARGET_SDKLIBS = rosrtl.a ntdll.a smdll.a TARGET_INSTALLDIR = system32