Author: hbelusca Date: Sun Feb 10 13:59:09 2013 New Revision: 58306
URL: http://svn.reactos.org/svn/reactos?rev=58306&view=rev Log: [KERNEL32] Code reorganization only : move the console-related initialization functions into a dedicated file, and create a specific header to hold console function definitions.
Added: branches/ros-csrss/dll/win32/kernel32/client/console/init.c (with props) branches/ros-csrss/dll/win32/kernel32/include/console.h (with props) Modified: branches/ros-csrss/dll/win32/kernel32/CMakeLists.txt branches/ros-csrss/dll/win32/kernel32/client/console/console.c branches/ros-csrss/dll/win32/kernel32/client/dllmain.c branches/ros-csrss/dll/win32/kernel32/include/kernel32.h branches/ros-csrss/dll/win32/kernel32/k32.h
Modified: branches/ros-csrss/dll/win32/kernel32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/CMa... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/CMakeLists.txt [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/CMakeLists.txt [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -37,6 +37,7 @@ client/console/alias.c client/console/console.c client/console/history.c + client/console/init.c client/console/readwrite.c client/console/vista.c client/file/backup.c
Modified: branches/ros-csrss/dll/win32/kernel32/client/console/console.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/console/console.c [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/client/console/console.c [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -14,11 +14,12 @@ #define NDEBUG #include <debug.h>
+ +/* GLOBALS ********************************************************************/ + extern RTL_CRITICAL_SECTION ConsoleLock; extern BOOL ConsoleInitialized; extern BOOL WINAPI IsDebuggerPresent(VOID); - -/* GLOBALS ********************************************************************/
/* Console reserved "file" names */ static LPCWSTR BaseConFileName = CONSOLE_FILE_NAME; @@ -34,6 +35,7 @@
#define INPUTEXENAME_BUFLEN 256 static WCHAR InputExeName[INPUTEXENAME_BUFLEN]; +
/* Default Console Control Handler ********************************************/
@@ -189,49 +191,6 @@
/* FUNCTIONS ******************************************************************/ - -VOID -InitConsoleProps(IN OUT PCONSOLE_PROPS ConsoleProps) -{ - STARTUPINFOW si; - - GetStartupInfoW(&si); - - ConsoleProps->dwStartupFlags = si.dwFlags; - if (si.dwFlags & STARTF_USEFILLATTRIBUTE) - { - ConsoleProps->FillAttribute = si.dwFillAttribute; - } - if (si.dwFlags & STARTF_USECOUNTCHARS) - { - ConsoleProps->ScreenBufferSize.X = (SHORT)(si.dwXCountChars); - ConsoleProps->ScreenBufferSize.Y = (SHORT)(si.dwYCountChars); - } - if (si.dwFlags & STARTF_USESHOWWINDOW) - { - ConsoleProps->ShowWindow = si.wShowWindow; - } - if (si.dwFlags & STARTF_USEPOSITION) - { - ConsoleProps->ConsoleWindowOrigin.x = (LONG)(si.dwX); - ConsoleProps->ConsoleWindowOrigin.y = (LONG)(si.dwY); - } - if (si.dwFlags & STARTF_USESIZE) - { - ConsoleProps->ConsoleWindowSize.cx = (LONG)(si.dwXSize); - ConsoleProps->ConsoleWindowSize.cy = (LONG)(si.dwYSize); - } - - if (si.lpTitle) - { - wcsncpy(ConsoleProps->ConsoleTitle, si.lpTitle, MAX_PATH + 1); - } - else - { - ConsoleProps->ConsoleTitle[0] = L'\0'; - } -} -
LPCWSTR IntCheckForConsoleFileName(IN LPCWSTR pszName,
Added: branches/ros-csrss/dll/win32/kernel32/client/console/init.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/console/init.c (added) +++ branches/ros-csrss/dll/win32/kernel32/client/console/init.c [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -1,0 +1,241 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: dll/win32/kernel32/client/console/init.c + * PURPOSE: Console API Client Initialization + * PROGRAMMERS: Hermes Belusca - Maito + */ + +/* INCLUDES *******************************************************************/ + +#include <k32.h> + +#define NDEBUG +#include <debug.h> + + +/* GLOBALS ********************************************************************/ + +RTL_CRITICAL_SECTION ConsoleLock; +BOOL ConsoleInitialized = FALSE; + +extern DWORD WINAPI ConsoleControlDispatcher(IN LPVOID lpThreadParameter); +extern HANDLE InputWaitHandle; + +#define WIN_OBJ_DIR L"\Windows" +#define SESSION_DIR L"\Sessions" + + +/* FUNCTIONS ******************************************************************/ + +VOID +InitConsoleProps(IN OUT PCONSOLE_PROPS ConsoleProps) +{ + STARTUPINFOW si; + + GetStartupInfoW(&si); + + ConsoleProps->dwStartupFlags = si.dwFlags; + if (si.dwFlags & STARTF_USEFILLATTRIBUTE) + { + ConsoleProps->FillAttribute = si.dwFillAttribute; + } + if (si.dwFlags & STARTF_USECOUNTCHARS) + { + ConsoleProps->ScreenBufferSize.X = (SHORT)(si.dwXCountChars); + ConsoleProps->ScreenBufferSize.Y = (SHORT)(si.dwYCountChars); + } + if (si.dwFlags & STARTF_USESHOWWINDOW) + { + ConsoleProps->ShowWindow = si.wShowWindow; + } + if (si.dwFlags & STARTF_USEPOSITION) + { + ConsoleProps->ConsoleWindowOrigin.x = (LONG)(si.dwX); + ConsoleProps->ConsoleWindowOrigin.y = (LONG)(si.dwY); + } + if (si.dwFlags & STARTF_USESIZE) + { + ConsoleProps->ConsoleWindowSize.cx = (LONG)(si.dwXSize); + ConsoleProps->ConsoleWindowSize.cy = (LONG)(si.dwYSize); + } + + if (si.lpTitle) + { + wcsncpy(ConsoleProps->ConsoleTitle, si.lpTitle, MAX_PATH + 1); + } + else + { + ConsoleProps->ConsoleTitle[0] = L'\0'; + } +} + + +BOOL +WINAPI +BasepInitConsole(VOID) +{ + NTSTATUS Status; + PRTL_USER_PROCESS_PARAMETERS Parameters = NtCurrentPeb()->ProcessParameters; + WCHAR SessionDir[256]; + ULONG SessionId = NtCurrentPeb()->SessionId; + BOOLEAN InServer; + + CONSOLE_CONNECTION_INFO ConnectInfo; + ULONG ConnectInfoSize = sizeof(ConnectInfo); + + DPRINT("BasepInitConsole for : %wZ\n", &Parameters->ImagePathName); + DPRINT("Our current console handles are: %lx, %lx, %lx %lx\n", + Parameters->ConsoleHandle, Parameters->StandardInput, + Parameters->StandardOutput, Parameters->StandardError); + + /* Initialize our global console DLL lock */ + Status = RtlInitializeCriticalSection(&ConsoleLock); + if (!NT_SUCCESS(Status)) return FALSE; + ConsoleInitialized = TRUE; + + /* Do nothing if this isn't a console app... */ + if (RtlImageNtHeader(GetModuleHandle(NULL))->OptionalHeader.Subsystem != + IMAGE_SUBSYSTEM_WINDOWS_CUI) + { + DPRINT("Image is not a console application\n"); + Parameters->ConsoleHandle = NULL; + ConnectInfo.ConsoleNeeded = FALSE; // ConsoleNeeded is used for knowing whether or not this is a CUI app. + + ConnectInfo.ConsoleProps.ConsoleTitle[0] = L'\0'; + ConnectInfo.AppPath[0] = L'\0'; + } + else + { + SIZE_T Length = 0; + LPCWSTR ExeName; + + InitConsoleProps(&ConnectInfo.ConsoleProps); + + Length = min(sizeof(ConnectInfo.AppPath) / sizeof(ConnectInfo.AppPath[0]), + Parameters->ImagePathName.Length / sizeof(WCHAR)); + wcsncpy(ConnectInfo.AppPath, Parameters->ImagePathName.Buffer, Length); + ConnectInfo.AppPath[Length] = L'\0'; + + /* Initialize Input EXE name */ + ExeName = wcsrchr(Parameters->ImagePathName.Buffer, L'\'); + if (ExeName) SetConsoleInputExeNameW(ExeName + 1); + + /* Assume one is needed */ + ConnectInfo.ConsoleNeeded = TRUE; + + /* Handle the special flags given to us by BasePushProcessParameters */ + if (Parameters->ConsoleHandle == HANDLE_DETACHED_PROCESS) + { + /* No console to create */ + DPRINT("No console to create\n"); + Parameters->ConsoleHandle = NULL; + ConnectInfo.ConsoleNeeded = FALSE; + } + else if (Parameters->ConsoleHandle == HANDLE_CREATE_NEW_CONSOLE) + { + /* We'll get the real one soon */ + DPRINT("Creating new console\n"); + Parameters->ConsoleHandle = NULL; + } + else if (Parameters->ConsoleHandle == HANDLE_CREATE_NO_WINDOW) + { + /* We'll get the real one soon */ + DPRINT("Creating new invisible console\n"); + Parameters->ConsoleHandle = NULL; + ConnectInfo.ConsoleProps.ShowWindow = SW_HIDE; + } + else + { + if (Parameters->ConsoleHandle == INVALID_HANDLE_VALUE) + { + Parameters->ConsoleHandle = NULL; + } + DPRINT("Using existing console: %x\n", Parameters->ConsoleHandle); + } + } + + /* Now use the proper console handle */ + ConnectInfo.Console = Parameters->ConsoleHandle; + + /* Initialize Console Ctrl Handler */ + InitConsoleCtrlHandling(); + ConnectInfo.CtrlDispatcher = ConsoleControlDispatcher; + + /* Setup the right Object Directory path */ + if (!SessionId) + { + /* Use the raw path */ + wcscpy(SessionDir, WIN_OBJ_DIR); + } + else + { + /* Use the session path */ + swprintf(SessionDir, + L"%ws\%ld%ws", + SESSION_DIR, + SessionId, + WIN_OBJ_DIR); + } + + /* Connect to the Console Server */ + DPRINT("Connecting to the Console Server in BasepInitConsole...\n"); + Status = CsrClientConnectToServer(SessionDir, + CONSRV_SERVERDLL_INDEX, + &ConnectInfo, + &ConnectInfoSize, + &InServer); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to connect to the Console Server (Status %lx)\n", Status); + return FALSE; + } + + /* Nothing to do for server-to-server */ + if (InServer) return TRUE; + + /* Nothing to do if not a console app */ + if (!ConnectInfo.ConsoleNeeded) return TRUE; + + /* We got the handles, let's set them */ + if ((Parameters->ConsoleHandle = ConnectInfo.Console)) + { + /* If we already had some, don't use the new ones */ + if (!Parameters->StandardInput) + { + Parameters->StandardInput = ConnectInfo.InputHandle; + } + if (!Parameters->StandardOutput) + { + Parameters->StandardOutput = ConnectInfo.OutputHandle; + } + if (!Parameters->StandardError) + { + Parameters->StandardError = ConnectInfo.ErrorHandle; + } + } + + InputWaitHandle = ConnectInfo.InputWaitHandle; + + DPRINT("Console setup: %lx, %lx, %lx, %lx\n", + Parameters->ConsoleHandle, + Parameters->StandardInput, + Parameters->StandardOutput, + Parameters->StandardError); + return TRUE; +} + + +VOID +WINAPI +BasepUninitConsole(VOID) +{ + /* Delete our critical section if we were initialized */ + if (ConsoleInitialized == TRUE) + { + ConsoleInitialized = FALSE; + RtlDeleteCriticalSection(&ConsoleLock); + } +} + +/* EOF */
Propchange: branches/ros-csrss/dll/win32/kernel32/client/console/init.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-csrss/dll/win32/kernel32/client/dllmain.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/dllmain.c [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/client/dllmain.c [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -27,15 +27,10 @@ HMODULE kernel32_handle = NULL; PPEB Peb; ULONG SessionId; -BOOL ConsoleInitialized = FALSE; static BOOL DllInitialized = FALSE;
/* Critical section for various kernel32 data structures */ RTL_CRITICAL_SECTION BaseDllDirectoryLock; -RTL_CRITICAL_SECTION ConsoleLock; - -extern DWORD WINAPI ConsoleControlDispatcher(IN LPVOID lpThreadParameter); -extern HANDLE InputWaitHandle;
extern BOOL FASTCALL NlsInit(VOID); extern VOID FASTCALL NlsUninit(VOID); @@ -44,160 +39,6 @@ #define SESSION_DIR L"\Sessions"
/* FUNCTIONS *****************************************************************/ - -BOOL -WINAPI -BasepInitConsole(VOID) -{ - NTSTATUS Status; - PRTL_USER_PROCESS_PARAMETERS Parameters = NtCurrentPeb()->ProcessParameters; - WCHAR SessionDir[256]; - ULONG SessionId = NtCurrentPeb()->SessionId; - BOOLEAN InServer; - - CONSOLE_CONNECTION_INFO ConnectInfo; - ULONG ConnectInfoSize = sizeof(ConnectInfo); - - DPRINT("BasepInitConsole for : %wZ\n", &Parameters->ImagePathName); - DPRINT("Our current console handles are: %lx, %lx, %lx %lx\n", - Parameters->ConsoleHandle, Parameters->StandardInput, - Parameters->StandardOutput, Parameters->StandardError); - - /* Initialize our global console DLL lock */ - Status = RtlInitializeCriticalSection(&ConsoleLock); - if (!NT_SUCCESS(Status)) return FALSE; - ConsoleInitialized = TRUE; - - /* Do nothing if this isn't a console app... */ - if (RtlImageNtHeader(GetModuleHandle(NULL))->OptionalHeader.Subsystem != - IMAGE_SUBSYSTEM_WINDOWS_CUI) - { - DPRINT("Image is not a console application\n"); - Parameters->ConsoleHandle = NULL; - ConnectInfo.ConsoleNeeded = FALSE; // ConsoleNeeded is used for knowing whether or not this is a CUI app. - - ConnectInfo.ConsoleProps.ConsoleTitle[0] = L'\0'; - ConnectInfo.AppPath[0] = L'\0'; - } - else - { - SIZE_T Length = 0; - LPCWSTR ExeName; - - InitConsoleProps(&ConnectInfo.ConsoleProps); - - Length = min(sizeof(ConnectInfo.AppPath) / sizeof(ConnectInfo.AppPath[0]), - Parameters->ImagePathName.Length / sizeof(WCHAR)); - wcsncpy(ConnectInfo.AppPath, Parameters->ImagePathName.Buffer, Length); - ConnectInfo.AppPath[Length] = L'\0'; - - /* Initialize Input EXE name */ - ExeName = wcsrchr(Parameters->ImagePathName.Buffer, L'\'); - if (ExeName) SetConsoleInputExeNameW(ExeName + 1); - - /* Assume one is needed */ - ConnectInfo.ConsoleNeeded = TRUE; - - /* Handle the special flags given to us by BasePushProcessParameters */ - if (Parameters->ConsoleHandle == HANDLE_DETACHED_PROCESS) - { - /* No console to create */ - DPRINT("No console to create\n"); - Parameters->ConsoleHandle = NULL; - ConnectInfo.ConsoleNeeded = FALSE; - } - else if (Parameters->ConsoleHandle == HANDLE_CREATE_NEW_CONSOLE) - { - /* We'll get the real one soon */ - DPRINT("Creating new console\n"); - Parameters->ConsoleHandle = NULL; - } - else if (Parameters->ConsoleHandle == HANDLE_CREATE_NO_WINDOW) - { - /* We'll get the real one soon */ - DPRINT("Creating new invisible console\n"); - Parameters->ConsoleHandle = NULL; - ConnectInfo.ConsoleProps.ShowWindow = SW_HIDE; - } - else - { - if (Parameters->ConsoleHandle == INVALID_HANDLE_VALUE) - { - Parameters->ConsoleHandle = NULL; - } - DPRINT("Using existing console: %x\n", Parameters->ConsoleHandle); - } - } - - /* Now use the proper console handle */ - ConnectInfo.Console = Parameters->ConsoleHandle; - - /* Initialize Console Ctrl Handler */ - InitConsoleCtrlHandling(); - ConnectInfo.CtrlDispatcher = ConsoleControlDispatcher; - - /* Setup the right Object Directory path */ - if (!SessionId) - { - /* Use the raw path */ - wcscpy(SessionDir, WIN_OBJ_DIR); - } - else - { - /* Use the session path */ - swprintf(SessionDir, - L"%ws\%ld%ws", - SESSION_DIR, - SessionId, - WIN_OBJ_DIR); - } - - /* Connect to the Console Server */ - DPRINT("Connecting to the Console Server in BasepInitConsole...\n"); - Status = CsrClientConnectToServer(SessionDir, - CONSRV_SERVERDLL_INDEX, - &ConnectInfo, - &ConnectInfoSize, - &InServer); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to connect to the Console Server (Status %lx)\n", Status); - return FALSE; - } - - /* Nothing to do for server-to-server */ - if (InServer) return TRUE; - - /* Nothing to do if not a console app */ - if (!ConnectInfo.ConsoleNeeded) return TRUE; - - /* We got the handles, let's set them */ - if ((Parameters->ConsoleHandle = ConnectInfo.Console)) - { - /* If we already had some, don't use the new ones */ - if (!Parameters->StandardInput) - { - Parameters->StandardInput = ConnectInfo.InputHandle; - } - if (!Parameters->StandardOutput) - { - Parameters->StandardOutput = ConnectInfo.OutputHandle; - } - if (!Parameters->StandardError) - { - Parameters->StandardError = ConnectInfo.ErrorHandle; - } - } - - InputWaitHandle = ConnectInfo.InputWaitHandle; - - DPRINT("Console setup: %lx, %lx, %lx, %lx\n", - Parameters->ConsoleHandle, - Parameters->StandardInput, - Parameters->StandardOutput, - Parameters->StandardError); - return TRUE; -}
NTSTATUS NTAPI @@ -262,132 +103,136 @@ switch (dwReason) { case DLL_PROCESS_ATTACH: - - /* Set no filter intially */ - GlobalTopLevelExceptionFilter = RtlEncodePointer(NULL); - - /* Enable the Rtl thread pool and timer queue to use proper Win32 thread */ - RtlSetThreadPoolStartFunc(BaseCreateThreadPoolThread, BaseExitThreadPoolThread); - - /* Don't bother us for each thread */ - LdrDisableThreadCalloutsForDll((PVOID)hDll); - - /* Initialize default path to NULL */ - RtlInitUnicodeString(&BaseDefaultPath, NULL); - - /* Setup the right Object Directory path */ - if (!SessionId) { - /* Use the raw path */ - wcscpy(SessionDir, WIN_OBJ_DIR); + /* Set no filter intially */ + GlobalTopLevelExceptionFilter = RtlEncodePointer(NULL); + + /* Enable the Rtl thread pool and timer queue to use proper Win32 thread */ + RtlSetThreadPoolStartFunc(BaseCreateThreadPoolThread, BaseExitThreadPoolThread); + + /* Don't bother us for each thread */ + LdrDisableThreadCalloutsForDll((PVOID)hDll); + + /* Initialize default path to NULL */ + RtlInitUnicodeString(&BaseDefaultPath, NULL); + + /* Setup the right Object Directory path */ + if (!SessionId) + { + /* Use the raw path */ + wcscpy(SessionDir, WIN_OBJ_DIR); + } + else + { + /* Use the session path */ + swprintf(SessionDir, + L"%ws\%ld%ws", + SESSION_DIR, + SessionId, + WIN_OBJ_DIR); + } + + /* Connect to the base server */ + DPRINT("Connecting to CSR in DllMain...\n"); + Status = CsrClientConnectToServer(SessionDir, + BASESRV_SERVERDLL_INDEX, + &Dummy, + &DummySize, + &BaseRunningInServerProcess); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to connect to CSR (Status %lx)\n", Status); + NtTerminateProcess(NtCurrentProcess(), Status); + return FALSE; + } + DPRINT("kernel32 DllMain - OK, connection succeeded\n"); + + /* Get the server data */ + ASSERT(Peb->ReadOnlyStaticServerData); + BaseStaticServerData = Peb->ReadOnlyStaticServerData[BASESRV_SERVERDLL_INDEX]; + ASSERT(BaseStaticServerData); + + /* Check if we are running a CSR Server */ + if (!BaseRunningInServerProcess) + { + /* Set the termination port for the thread */ + DPRINT("Creating new thread for CSR\n"); + CsrNewThread(); + } + + /* Initialize heap handle table */ + BaseDllInitializeMemoryManager(); + + /* Set HMODULE for our DLL */ + kernel32_handle = hCurrentModule = hDll; + + /* Set the directories */ + BaseWindowsDirectory = BaseStaticServerData->WindowsDirectory; + BaseWindowsSystemDirectory = BaseStaticServerData->WindowsSystemDirectory; + + /* Construct the default path (using the static buffer) */ + _snwprintf(BaseDefaultPathBuffer, + sizeof(BaseDefaultPathBuffer) / sizeof(WCHAR), + L".;%wZ;%wZ\system;%wZ;", + &BaseWindowsSystemDirectory, + &BaseWindowsDirectory, + &BaseWindowsDirectory); + + BaseDefaultPath.Buffer = BaseDefaultPathBuffer; + BaseDefaultPath.Length = wcslen(BaseDefaultPathBuffer) * sizeof(WCHAR); + BaseDefaultPath.MaximumLength = sizeof(BaseDefaultPathBuffer); + + /* Use remaining part of the default path buffer for the append path */ + BaseDefaultPathAppend.Buffer = (PWSTR)((ULONG_PTR)BaseDefaultPathBuffer + BaseDefaultPath.Length); + BaseDefaultPathAppend.Length = 0; + BaseDefaultPathAppend.MaximumLength = BaseDefaultPath.MaximumLength - BaseDefaultPath.Length; + + /* Initialize command line */ + InitCommandLines(); + + /* Initialize the DLL critical section */ + RtlInitializeCriticalSection(&BaseDllDirectoryLock); + + /* Initialize the National Language Support routines */ + if (!NlsInit()) + { + DPRINT1("NLS Init failed\n"); + return FALSE; + } + + /* Initialize Console Support */ + if (!BasepInitConsole()) + { + DPRINT1("Failed to set up console\n"); + return FALSE; + } + + /* Initialize application certification globals */ + InitializeListHead(&BasepAppCertDllsList); + RtlInitializeCriticalSection(&gcsAppCert); + + /* Insert more dll attach stuff here! */ + DllInitialized = TRUE; + DPRINT("Initialization complete\n"); + break; } - else + + case DLL_PROCESS_DETACH: { - /* Use the session path */ - swprintf(SessionDir, - L"%ws\%ld%ws", - SESSION_DIR, - SessionId, - WIN_OBJ_DIR); - } - - /* Connect to the base server */ - DPRINT("Connecting to CSR in DllMain...\n"); - Status = CsrClientConnectToServer(SessionDir, - BASESRV_SERVERDLL_INDEX, - &Dummy, - &DummySize, - &BaseRunningInServerProcess); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to connect to CSR (Status %lx)\n", Status); - NtTerminateProcess(NtCurrentProcess(), Status); - return FALSE; - } - DPRINT("kernel32 DllMain - OK, connection succeeded\n"); - - /* Get the server data */ - ASSERT(Peb->ReadOnlyStaticServerData); - BaseStaticServerData = Peb->ReadOnlyStaticServerData[BASESRV_SERVERDLL_INDEX]; - ASSERT(BaseStaticServerData); - - /* Check if we are running a CSR Server */ - if (!BaseRunningInServerProcess) - { - /* Set the termination port for the thread */ - DPRINT("Creating new thread for CSR\n"); - CsrNewThread(); - } - - /* Initialize heap handle table */ - BaseDllInitializeMemoryManager(); - - /* Set HMODULE for our DLL */ - kernel32_handle = hCurrentModule = hDll; - - /* Set the directories */ - BaseWindowsDirectory = BaseStaticServerData->WindowsDirectory; - BaseWindowsSystemDirectory = BaseStaticServerData->WindowsSystemDirectory; - - /* Construct the default path (using the static buffer) */ - _snwprintf(BaseDefaultPathBuffer, sizeof(BaseDefaultPathBuffer) / sizeof(WCHAR), - L".;%wZ;%wZ\system;%wZ;", &BaseWindowsSystemDirectory, &BaseWindowsDirectory, &BaseWindowsDirectory); - - BaseDefaultPath.Buffer = BaseDefaultPathBuffer; - BaseDefaultPath.Length = wcslen(BaseDefaultPathBuffer) * sizeof(WCHAR); - BaseDefaultPath.MaximumLength = sizeof(BaseDefaultPathBuffer); - - /* Use remaining part of the default path buffer for the append path */ - BaseDefaultPathAppend.Buffer = (PWSTR)((ULONG_PTR)BaseDefaultPathBuffer + BaseDefaultPath.Length); - BaseDefaultPathAppend.Length = 0; - BaseDefaultPathAppend.MaximumLength = BaseDefaultPath.MaximumLength - BaseDefaultPath.Length; - - /* Initialize command line */ - InitCommandLines(); - - /* Initialize the DLL critical section */ - RtlInitializeCriticalSection(&BaseDllDirectoryLock); - - /* Initialize the National Language Support routines */ - if (!NlsInit()) - { - DPRINT1("NLS Init failed\n"); - return FALSE; - } - - /* Initialize Console Support */ - if (!BasepInitConsole()) - { - DPRINT1("Failed to set up console\n"); - return FALSE; - } - - /* Initialize application certification globals */ - InitializeListHead(&BasepAppCertDllsList); - RtlInitializeCriticalSection(&gcsAppCert); - - /* Insert more dll attach stuff here! */ - DllInitialized = TRUE; - DPRINT("Initialization complete\n"); - break; - - case DLL_PROCESS_DETACH: - DPRINT("DLL_PROCESS_DETACH\n"); if (DllInitialized == TRUE) { /* Insert more dll detach stuff here! */ NlsUninit();
+ /* Uninitialize console support */ + BasepUninitConsole(); + /* Delete DLL critical section */ - if (ConsoleInitialized == TRUE) - { - ConsoleInitialized = FALSE; - RtlDeleteCriticalSection(&ConsoleLock); - } RtlDeleteCriticalSection(&BaseDllDirectoryLock); } break; + }
default: break;
Added: branches/ros-csrss/dll/win32/kernel32/include/console.h URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/inc... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/include/console.h (added) +++ branches/ros-csrss/dll/win32/kernel32/include/console.h [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -1,0 +1,63 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS System Libraries + * FILE: dll/win32/kernel32/include/console.h + * PURPOSE: Console API Client Definitions + * PROGRAMMER: Hermes Belusca - Maito + */ + +#pragma once + +/* CONSTANTS ******************************************************************/ + +#define HANDLE_DETACHED_PROCESS (HANDLE)-2 +#define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3 +#define HANDLE_CREATE_NO_WINDOW (HANDLE)-4 + + +/* FUNCTION PROTOTYPES ********************************************************/ + +BOOL WINAPI +BasepInitConsole(VOID); + +VOID WINAPI +BasepUninitConsole(VOID); + +VOID WINAPI +InitConsoleCtrlHandling(VOID); + +HANDLE WINAPI +DuplicateConsoleHandle(HANDLE hConsole, + DWORD dwDesiredAccess, + BOOL bInheritHandle, + DWORD dwOptions); + +BOOL WINAPI +VerifyConsoleIoHandle(HANDLE Handle); + +BOOL WINAPI +CloseConsoleHandle(HANDLE Handle); + +HANDLE WINAPI +GetConsoleInputWaitHandle(VOID); + +HANDLE FASTCALL +TranslateStdHandle(HANDLE hHandle); + +VOID +InitConsoleProps(IN OUT PCONSOLE_PROPS ConsoleProps); + +LPCWSTR +IntCheckForConsoleFileName(IN LPCWSTR pszName, + IN DWORD dwDesiredAccess); + +HANDLE WINAPI +OpenConsoleW(LPCWSTR wsName, + DWORD dwDesiredAccess, + BOOL bInheritHandle, + DWORD dwShareMode); + +BOOL WINAPI +SetConsoleInputExeNameW(LPCWSTR lpInputExeName); + +/* EOF */
Propchange: branches/ros-csrss/dll/win32/kernel32/include/console.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/ros-csrss/dll/win32/kernel32/include/kernel32.h URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/inc... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/include/kernel32.h [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/include/kernel32.h [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -61,10 +61,6 @@ #define FIELD_OFFSET(type,fld) ((LONG)&(((type *)0)->fld)) #endif
-#define HANDLE_DETACHED_PROCESS (HANDLE)-2 -#define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3 -#define HANDLE_CREATE_NO_WINDOW (HANDLE)-4 - // // This stuff maybe should go in a vdm.h? // @@ -187,32 +183,7 @@ NTAPI BaseDllInitializeMemoryManager(VOID);
-VOID WINAPI InitConsoleCtrlHandling(VOID); - -BOOL WINAPI VerifyConsoleIoHandle(HANDLE Handle); - -BOOL WINAPI CloseConsoleHandle(HANDLE Handle); - -HANDLE WINAPI -GetConsoleInputWaitHandle(VOID); - -VOID -InitConsoleProps(IN OUT PCONSOLE_PROPS ConsoleProps); - -LPCWSTR -IntCheckForConsoleFileName(IN LPCWSTR pszName, - IN DWORD dwDesiredAccess); - -HANDLE WINAPI OpenConsoleW(LPCWSTR wsName, - DWORD dwDesiredAccess, - BOOL bInheritHandle, - DWORD dwShareMode); - -BOOL WINAPI SetConsoleInputExeNameW(LPCWSTR lpInputExeName); - PTEB GetTeb(VOID); - -HANDLE FASTCALL TranslateStdHandle(HANDLE hHandle);
PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc); DWORD FilenameW2A_N(LPSTR dest, INT destlen, LPCWSTR src, INT srclen); @@ -431,13 +402,6 @@ /* FIXME */ WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
-HANDLE -WINAPI -DuplicateConsoleHandle(HANDLE hConsole, - DWORD dwDesiredAccess, - BOOL bInheritHandle, - DWORD dwOptions); - VOID NTAPI BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry,
Modified: branches/ros-csrss/dll/win32/kernel32/k32.h URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/k32... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/k32.h [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/k32.h [iso-8859-1] Sun Feb 10 13:59:09 2013 @@ -70,4 +70,7 @@ /* Base Macros */ #include "include/base_x.h"
+/* Console API Client Definitions */ +#include "include/console.h" + #endif