From 1f05ce5f283f48bfa9402351ac74b2a8649bb297 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 2 Nov 2012 18:28:42 +0000 Subject: [PATCH] [KERNEL32] - Use new messaging structures, defined-names instead of hardcoded values. - Enable temporary debugging tracing and add some DPRINTs. - Delete an unused variable. svn path=/branches/ros-csrss/; revision=57667 --- dll/win32/kernel32/client/dllmain.c | 72 +++++++++++++++-------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/dll/win32/kernel32/client/dllmain.c b/dll/win32/kernel32/client/dllmain.c index 0ad734dc4af..07f23a32b30 100644 --- a/dll/win32/kernel32/client/dllmain.c +++ b/dll/win32/kernel32/client/dllmain.c @@ -1,10 +1,9 @@ -/* $Id: dllmain.c 56414 2012-04-25 10:17:29Z tfaber $ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries * FILE: lib/kernel32/misc/dllmain.c * PURPOSE: Initialization - * PROGRAMMER: Ariadne ( ariadne@xs4all.nl) + * PROGRAMMERS: Ariadne (ariadne@xs4all.nl) * Aleksey Bragin (aleksey@reactos.org) * UPDATE HISTORY: * Created 01/11/98 @@ -14,7 +13,7 @@ #include -#define NDEBUG +// #define NDEBUG #include /* GLOBALS *******************************************************************/ @@ -33,24 +32,18 @@ ULONG SessionId; BOOL ConsoleInitialized = FALSE; static BOOL DllInitialized = FALSE; -BOOL WINAPI -DllMain(HANDLE hInst, - DWORD dwReason, - LPVOID lpReserved); - /* Critical section for various kernel32 data structures */ RTL_CRITICAL_SECTION BaseDllDirectoryLock; RTL_CRITICAL_SECTION ConsoleLock; extern BOOL WINAPI DefaultConsoleCtrlHandler(DWORD Event); -extern __declspec(noreturn) VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag); +extern DWORD WINAPI ConsoleControlDispatcher(IN LPVOID lpThreadParameter); extern PHANDLER_ROUTINE InitialHandler[1]; extern PHANDLER_ROUTINE* CtrlHandlers; extern ULONG NrCtrlHandlers; extern ULONG NrAllocatedHandlers; extern BOOL FASTCALL NlsInit(VOID); extern VOID FASTCALL NlsUninit(VOID); -BOOLEAN InWindows = FALSE; #define WIN_OBJ_DIR L"\\Windows" #define SESSION_DIR L"\\Sessions" @@ -61,8 +54,9 @@ BOOL WINAPI BasepInitConsole(VOID) { - CSR_API_MESSAGE Request; NTSTATUS Status; + CONSOLE_API_MESSAGE ApiMessage; + PCSRSS_ALLOC_CONSOLE AllocConsoleRequest = &ApiMessage.Data.AllocConsoleRequest; BOOLEAN NotConsole = FALSE; PRTL_USER_PROCESS_PARAMETERS Parameters = NtCurrentPeb()->ProcessParameters; LPCWSTR ExeName; @@ -70,7 +64,14 @@ BasepInitConsole(VOID) WCHAR SessionDir[256]; ULONG SessionId = NtCurrentPeb()->SessionId; BOOLEAN InServer; - + + // HACK + /* + CSR_CONNECTION_INFO CsrConnectionInfo; + ULONG ConnectionSize = sizeof(CsrConnectionInfo); + */ + // END HACK + WCHAR lpTest[MAX_PATH]; GetModuleFileNameW(NULL, lpTest, MAX_PATH); DPRINT("BasepInitConsole for : %S\n", lpTest); @@ -84,14 +85,14 @@ BasepInitConsole(VOID) { DPRINT("Image is not a console application\n"); Parameters->ConsoleHandle = NULL; - Request.Data.AllocConsoleRequest.ConsoleNeeded = FALSE; + AllocConsoleRequest->ConsoleNeeded = FALSE; } else { /* Assume one is needed */ GetStartupInfo(&si); - Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE; - Request.Data.AllocConsoleRequest.ShowCmd = si.wShowWindow; + AllocConsoleRequest->ConsoleNeeded = TRUE; + AllocConsoleRequest->ShowCmd = si.wShowWindow; /* Handle the special flags given to us by BasepInitializeEnvironment */ if (Parameters->ConsoleHandle == HANDLE_DETACHED_PROCESS) @@ -99,7 +100,7 @@ BasepInitConsole(VOID) /* No console to create */ DPRINT("No console to create\n"); Parameters->ConsoleHandle = NULL; - Request.Data.AllocConsoleRequest.ConsoleNeeded = FALSE; + AllocConsoleRequest->ConsoleNeeded = FALSE; } else if (Parameters->ConsoleHandle == HANDLE_CREATE_NEW_CONSOLE) { @@ -112,7 +113,7 @@ BasepInitConsole(VOID) /* We'll get the real one soon */ DPRINT("Creating new invisible console\n"); Parameters->ConsoleHandle = NULL; - Request.Data.AllocConsoleRequest.ShowCmd = SW_HIDE; + AllocConsoleRequest->ShowCmd = SW_HIDE; } else { @@ -137,7 +138,7 @@ BasepInitConsole(VOID) SetConsoleInputExeNameW(ExeName + 1); /* Now use the proper console handle */ - Request.Data.AllocConsoleRequest.Console = Parameters->ConsoleHandle; + AllocConsoleRequest->Console = Parameters->ConsoleHandle; /* Setup the right Object Directory path */ if (!SessionId) @@ -156,11 +157,11 @@ BasepInitConsole(VOID) } /* Connect to the base server */ - DPRINT("Connecting to CSR...\n"); + DPRINT("Connecting to CSR in BasepInitConsole...\n"); Status = CsrClientConnectToServer(SessionDir, - 2, - NULL, - NULL, + CONSRV_SERVERDLL_INDEX, + /* &CsrConnectionInfo, */ NULL, // TODO: Give it a console connection info + /* &ConnectionSize, */ NULL, // TODO: Give it a console connection info &InServer); if (!NT_SUCCESS(Status)) { @@ -177,12 +178,12 @@ BasepInitConsole(VOID) * console message to the Base Server. When we finally have a Console * Server, this code should be changed to send connection data instead. */ - Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher; - Status = CsrClientCallServer(&Request, + AllocConsoleRequest->CtrlDispatcher = ConsoleControlDispatcher; + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, - CSR_CREATE_API_NUMBER(CSR_CONSOLE, ALLOC_CONSOLE), - sizeof(CSR_API_MESSAGE)); - if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) + CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepAlloc), + sizeof(CSRSS_ALLOC_CONSOLE)); + if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status)) { DPRINT1("CSR Failed to give us a console\n"); /* We're lying here, so at least the process can load... */ @@ -193,20 +194,20 @@ BasepInitConsole(VOID) if (NotConsole) return TRUE; /* We got the handles, let's set them */ - if ((Parameters->ConsoleHandle = Request.Data.AllocConsoleRequest.Console)) + if ((Parameters->ConsoleHandle = AllocConsoleRequest->Console)) { /* If we already had some, don't use the new ones */ if (!Parameters->StandardInput) { - Parameters->StandardInput = Request.Data.AllocConsoleRequest.InputHandle; + Parameters->StandardInput = AllocConsoleRequest->InputHandle; } if (!Parameters->StandardOutput) { - Parameters->StandardOutput = Request.Data.AllocConsoleRequest.OutputHandle; + Parameters->StandardOutput = AllocConsoleRequest->OutputHandle; } if (!Parameters->StandardError) { - Parameters->StandardError = Request.Data.AllocConsoleRequest.OutputHandle; + Parameters->StandardError = AllocConsoleRequest->OutputHandle; } } @@ -311,9 +312,9 @@ DllMain(HANDLE hDll, } /* Connect to the base server */ - DPRINT("Connecting to CSR...\n"); + DPRINT("Connecting to CSR in DllMain...\n"); Status = CsrClientConnectToServer(SessionDir, - InWindows ? 1 : 0, + BASESRV_SERVERDLL_INDEX, &Dummy, &DummySize, &BaseRunningInServerProcess); @@ -323,10 +324,11 @@ DllMain(HANDLE hDll, NtTerminateProcess(NtCurrentProcess(), Status); return FALSE; } + DPRINT("kernel32 DllMain - OK, connection succeeded\n"); /* Get the server data */ ASSERT(Peb->ReadOnlyStaticServerData); - BaseStaticServerData = Peb->ReadOnlyStaticServerData[CSR_CONSOLE]; + BaseStaticServerData = Peb->ReadOnlyStaticServerData[BASESRV_SERVERDLL_INDEX]; ASSERT(BaseStaticServerData); /* Check if we are running a CSR Server */ -- 2.17.1