mirror of
https://github.com/reactos/reactos.git
synced 2024-08-08 12:18:13 +00:00
- Fixed the initializing of the initial console control handler.
- Fixed RemoveConsoleCtrlHandler. - CreateProcess should send the console control handler to csrss. svn path=/trunk/; revision=5640
This commit is contained in:
parent
a11c2e5606
commit
74b741f04a
|
@ -27,6 +27,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
ULONG NewProcessId;
|
ULONG NewProcessId;
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
|
PCONTROLDISPATCHER CtrlDispatcher;
|
||||||
} CSRSS_CREATE_PROCESS_REQUEST, *PCSRSS_CREATE_PROCESS_REQUEST;
|
} CSRSS_CREATE_PROCESS_REQUEST, *PCSRSS_CREATE_PROCESS_REQUEST;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: console.c,v 1.67 2003/08/18 07:32:00 jimtabor Exp $
|
/* $Id: console.c,v 1.68 2003/08/18 10:47:04 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -30,10 +30,8 @@ extern BOOL WINAPI IsDebuggerPresent(VOID);
|
||||||
|
|
||||||
static BOOL IgnoreCtrlEvents = FALSE;
|
static BOOL IgnoreCtrlEvents = FALSE;
|
||||||
|
|
||||||
static PHANDLER_ROUTINE StaticCtrlHandlers[] =
|
static PHANDLER_ROUTINE* CtrlHandlers = NULL;
|
||||||
{ (PHANDLER_ROUTINE) &DefaultConsoleCtrlHandler };
|
static ULONG NrCtrlHandlers = 0;
|
||||||
static PHANDLER_ROUTINE* CtrlHandlers = StaticCtrlHandlers;
|
|
||||||
static ULONG NrCtrlHandlers = _NOACHS(StaticCtrlHandlers);
|
|
||||||
static ULONG CtrlHandlersArraySize = 0;
|
static ULONG CtrlHandlersArraySize = 0;
|
||||||
|
|
||||||
/* Default Console Control Handler *******************************************/
|
/* Default Console Control Handler *******************************************/
|
||||||
|
@ -46,10 +44,12 @@ BOOL WINAPI DefaultConsoleCtrlHandler(DWORD Event)
|
||||||
{
|
{
|
||||||
case CTRL_C_EVENT:
|
case CTRL_C_EVENT:
|
||||||
DPRINT("Ctrl-C Event\n");
|
DPRINT("Ctrl-C Event\n");
|
||||||
|
ExitProcess(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CTRL_BREAK_EVENT:
|
case CTRL_BREAK_EVENT:
|
||||||
DPRINT("Ctrl-Break Event\n");
|
DPRINT("Ctrl-Break Event\n");
|
||||||
|
ExitProcess(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CTRL_SHUTDOWN_EVENT:
|
case CTRL_SHUTDOWN_EVENT:
|
||||||
|
@ -2645,6 +2645,7 @@ AddConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine)
|
||||||
NrCtrlHandlers * sizeof(PHANDLER_ROUTINE));
|
NrCtrlHandlers * sizeof(PHANDLER_ROUTINE));
|
||||||
if (CtrlHandlers == NULL)
|
if (CtrlHandlers == NULL)
|
||||||
{
|
{
|
||||||
|
NrCtrlHandlers = 0;
|
||||||
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
@ -2670,8 +2671,9 @@ RemoveConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine)
|
||||||
{
|
{
|
||||||
if ( ((void*)(CtrlHandlers[i])) == (void*)HandlerRoutine)
|
if ( ((void*)(CtrlHandlers[i])) == (void*)HandlerRoutine)
|
||||||
{
|
{
|
||||||
CtrlHandlers[i] = CtrlHandlers[NrCtrlHandlers - 1];
|
|
||||||
NrCtrlHandlers--;
|
NrCtrlHandlers--;
|
||||||
|
memmove(CtrlHandlers + i, CtrlHandlers + i + 1,
|
||||||
|
(NrCtrlHandlers - i) * sizeof(PHANDLER_ROUTINE));
|
||||||
CtrlHandlers =
|
CtrlHandlers =
|
||||||
RtlReAllocateHeap(RtlGetProcessHeap(),
|
RtlReAllocateHeap(RtlGetProcessHeap(),
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: dllmain.c,v 1.28 2003/08/16 06:19:15 jimtabor Exp $
|
/* $Id: dllmain.c,v 1.29 2003/08/18 10:47:04 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -35,6 +35,8 @@ DllMain(HANDLE hInst,
|
||||||
CRITICAL_SECTION DllLock;
|
CRITICAL_SECTION DllLock;
|
||||||
CRITICAL_SECTION ConsoleLock;
|
CRITICAL_SECTION ConsoleLock;
|
||||||
|
|
||||||
|
extern BOOL WINAPI DefaultConsoleCtrlHandler(DWORD Event);
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
static NTSTATUS
|
static NTSTATUS
|
||||||
|
@ -129,7 +131,10 @@ DllMain(HANDLE hDll,
|
||||||
|
|
||||||
/* Initialize the DLL critical section */
|
/* Initialize the DLL critical section */
|
||||||
RtlInitializeCriticalSection(&DllLock);
|
RtlInitializeCriticalSection(&DllLock);
|
||||||
|
|
||||||
|
/* Initialize console ctrl handler */
|
||||||
RtlInitializeCriticalSection(&ConsoleLock);
|
RtlInitializeCriticalSection(&ConsoleLock);
|
||||||
|
SetConsoleCtrlHandler(DefaultConsoleCtrlHandler, TRUE);
|
||||||
|
|
||||||
/* Insert more dll attach stuff here! */
|
/* Insert more dll attach stuff here! */
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: create.c,v 1.68 2003/07/10 18:50:51 chorns Exp $
|
/* $Id: create.c,v 1.69 2003/08/18 10:47:04 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -18,6 +18,9 @@
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
|
extern __declspec(noreturn)
|
||||||
|
VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag);
|
||||||
|
|
||||||
__declspec(dllimport)
|
__declspec(dllimport)
|
||||||
PRTL_BASE_PROCESS_START_ROUTINE RtlBaseProcessStartRoutine;
|
PRTL_BASE_PROCESS_START_ROUTINE RtlBaseProcessStartRoutine;
|
||||||
|
|
||||||
|
@ -194,7 +197,7 @@ BOOL STDCALL CreateProcessA
|
||||||
ANSI_STRING strEnvVar;
|
ANSI_STRING strEnvVar;
|
||||||
|
|
||||||
/* scan the environment to calculate its Unicode size */
|
/* scan the environment to calculate its Unicode size */
|
||||||
for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.MaximumLength)
|
for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.Length + sizeof(char))
|
||||||
{
|
{
|
||||||
/* add the size of the current variable */
|
/* add the size of the current variable */
|
||||||
RtlInitAnsiString(&strEnvVar, pcScan);
|
RtlInitAnsiString(&strEnvVar, pcScan);
|
||||||
|
@ -226,7 +229,7 @@ BOOL STDCALL CreateProcessA
|
||||||
wstrEnvVar.MaximumLength = nEnvLen;
|
wstrEnvVar.MaximumLength = nEnvLen;
|
||||||
|
|
||||||
/* scan the environment to convert it */
|
/* scan the environment to convert it */
|
||||||
for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.MaximumLength)
|
for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.Length + sizeof(char))
|
||||||
{
|
{
|
||||||
/* convert the current variable */
|
/* convert the current variable */
|
||||||
RtlInitAnsiString(&strEnvVar, pcScan);
|
RtlInitAnsiString(&strEnvVar, pcScan);
|
||||||
|
@ -1041,6 +1044,7 @@ CreateProcessW
|
||||||
dwCreationFlags |= DETACHED_PROCESS;
|
dwCreationFlags |= DETACHED_PROCESS;
|
||||||
}
|
}
|
||||||
CsrRequest.Data.CreateProcessRequest.Flags = dwCreationFlags;
|
CsrRequest.Data.CreateProcessRequest.Flags = dwCreationFlags;
|
||||||
|
CsrRequest.Data.CreateProcessRequest.CtrlDispatcher = ConsoleControlDispatcher;
|
||||||
Status = CsrClientCallServer(&CsrRequest,
|
Status = CsrClientCallServer(&CsrRequest,
|
||||||
&CsrReply,
|
&CsrReply,
|
||||||
sizeof(CSRSS_API_REQUEST),
|
sizeof(CSRSS_API_REQUEST),
|
||||||
|
|
Loading…
Reference in a new issue