mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 10:12:58 +00:00
[CONSRV]
- Further compactify console allocation / attach code by putting common code into helper functions. - Now, the default title of a console window is... "ReactOS Console" (and not command prompt since a console window isn't only reserved to command prompts). svn path=/branches/ros-csrss/; revision=58260
This commit is contained in:
parent
03d1c009f0
commit
54293ba008
25 changed files with 152 additions and 151 deletions
|
@ -121,13 +121,13 @@ ConSrvInitConsole(PCONSOLE* NewConsole, int ShowCmd, PCSR_PROCESS ConsoleLeaderP
|
||||||
Console->Title.MaximumLength = Console->Title.Length = 0;
|
Console->Title.MaximumLength = Console->Title.Length = 0;
|
||||||
Console->Title.Buffer = NULL;
|
Console->Title.Buffer = NULL;
|
||||||
|
|
||||||
if (LoadStringW(ConSrvDllInstance, IDS_COMMAND_PROMPT, Title, sizeof(Title) / sizeof(Title[0])))
|
if (LoadStringW(ConSrvDllInstance, IDS_CONSOLE_TITLE, Title, sizeof(Title) / sizeof(Title[0])))
|
||||||
{
|
{
|
||||||
RtlCreateUnicodeString(&Console->Title, Title);
|
RtlCreateUnicodeString(&Console->Title, Title);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RtlCreateUnicodeString(&Console->Title, L"Command Prompt");
|
RtlCreateUnicodeString(&Console->Title, L"ReactOS Console");
|
||||||
}
|
}
|
||||||
|
|
||||||
InitializeCriticalSection(&Console->Lock);
|
InitializeCriticalSection(&Console->Lock);
|
||||||
|
@ -364,10 +364,6 @@ CSR_API(SrvAllocConsole)
|
||||||
return STATUS_ACCESS_DENIED;
|
return STATUS_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/** This comes from ConSrvConnect!! **/
|
|
||||||
DPRINT1("SrvAllocConsole - Checkpoint 1\n");
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We are about to create a new console. However when ConSrvNewProcess
|
* We are about to create a new console. However when ConSrvNewProcess
|
||||||
* was called, we didn't know that we wanted to create a new console and
|
* was called, we didn't know that we wanted to create a new console and
|
||||||
|
@ -383,36 +379,17 @@ CSR_API(SrvAllocConsole)
|
||||||
|
|
||||||
/* Initialize a new Console owned by the Console Leader Process */
|
/* Initialize a new Console owned by the Console Leader Process */
|
||||||
Status = ConSrvAllocateConsole(ProcessData,
|
Status = ConSrvAllocateConsole(ProcessData,
|
||||||
&AllocConsoleRequest->InputHandle,
|
&AllocConsoleRequest->InputHandle,
|
||||||
&AllocConsoleRequest->OutputHandle,
|
&AllocConsoleRequest->OutputHandle,
|
||||||
&AllocConsoleRequest->ErrorHandle,
|
&AllocConsoleRequest->ErrorHandle,
|
||||||
AllocConsoleRequest->ShowCmd,
|
AllocConsoleRequest->ShowCmd,
|
||||||
ConsoleLeader);
|
ConsoleLeader);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Console allocation failed\n");
|
DPRINT1("Console allocation failed\n");
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a reference count because the process is tied to the console */
|
|
||||||
_InterlockedIncrement(&ProcessData->Console->ReferenceCount);
|
|
||||||
|
|
||||||
/* Insert the process into the processes list of the console */
|
|
||||||
InsertHeadList(&ProcessData->Console->ProcessList, &ProcessData->ConsoleLink);
|
|
||||||
|
|
||||||
/* Duplicate the Event */
|
|
||||||
Status = NtDuplicateObject(NtCurrentProcess(),
|
|
||||||
ProcessData->Console->InputBuffer.ActiveEvent,
|
|
||||||
ProcessData->Process->ProcessHandle,
|
|
||||||
&ProcessData->ConsoleEvent,
|
|
||||||
EVENT_ALL_ACCESS, 0, 0);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("NtDuplicateObject() failed: %lu\n", Status);
|
|
||||||
ConSrvRemoveConsole(ProcessData);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return it to the caller */
|
/* Return it to the caller */
|
||||||
AllocConsoleRequest->Console = ProcessData->Console;
|
AllocConsoleRequest->Console = ProcessData->Console;
|
||||||
|
|
||||||
|
@ -422,7 +399,6 @@ CSR_API(SrvAllocConsole)
|
||||||
/* Set the Ctrl Dispatcher */
|
/* Set the Ctrl Dispatcher */
|
||||||
ProcessData->CtrlDispatcher = AllocConsoleRequest->CtrlDispatcher;
|
ProcessData->CtrlDispatcher = AllocConsoleRequest->CtrlDispatcher;
|
||||||
DPRINT("CONSRV: CtrlDispatcher address: %x\n", ProcessData->CtrlDispatcher);
|
DPRINT("CONSRV: CtrlDispatcher address: %x\n", ProcessData->CtrlDispatcher);
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -446,6 +422,7 @@ CSR_API(SrvAttachConsole)
|
||||||
return STATUS_ACCESS_DENIED;
|
return STATUS_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check whether we try to attach to the parent's console */
|
||||||
if (ProcessId == ULongToHandle(ATTACH_PARENT_PROCESS))
|
if (ProcessId == ULongToHandle(ATTACH_PARENT_PROCESS))
|
||||||
{
|
{
|
||||||
PROCESS_BASIC_INFORMATION ProcessInfo;
|
PROCESS_BASIC_INFORMATION ProcessInfo;
|
||||||
|
@ -468,17 +445,20 @@ CSR_API(SrvAttachConsole)
|
||||||
DPRINT("Parent process ID = %lu\n", ProcessId);
|
DPRINT("Parent process ID = %lu\n", ProcessId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lock the target process via its PID */
|
/* Lock the source process via its PID */
|
||||||
DPRINT1("Lock process Id %lu\n", ProcessId);
|
|
||||||
Status = CsrLockProcessByClientId(ProcessId, &SourceProcess);
|
Status = CsrLockProcessByClientId(ProcessId, &SourceProcess);
|
||||||
DPRINT1("Lock process Status %lu\n", Status);
|
DPRINT1("Lock process Id %lu - Status %lu\n", ProcessId, Status);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
DPRINT1("AttachConsole OK\n");
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/** This comes from ConSrvNewProcess!! **/
|
|
||||||
SourceProcessData = ConsoleGetPerProcessData(SourceProcess);
|
SourceProcessData = ConsoleGetPerProcessData(SourceProcess);
|
||||||
|
|
||||||
|
DPRINT1("SourceProcessData->Console = 0x%p\n", SourceProcessData->Console);
|
||||||
|
if (SourceProcessData->Console == NULL)
|
||||||
|
{
|
||||||
|
Status = STATUS_INVALID_HANDLE;
|
||||||
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We are about to create a new console. However when ConSrvNewProcess
|
* We are about to create a new console. However when ConSrvNewProcess
|
||||||
* was called, we didn't know that we wanted to create a new console and
|
* was called, we didn't know that we wanted to create a new console and
|
||||||
|
@ -496,54 +476,15 @@ CSR_API(SrvAttachConsole)
|
||||||
* Inherit the console from the parent,
|
* Inherit the console from the parent,
|
||||||
* if any, otherwise return an error.
|
* if any, otherwise return an error.
|
||||||
*/
|
*/
|
||||||
DPRINT1("SourceProcessData->Console = 0x%p\n", SourceProcessData->Console);
|
Status = ConSrvInheritConsole(TargetProcessData,
|
||||||
if (SourceProcessData->Console == NULL)
|
SourceProcessData->Console,
|
||||||
{
|
TRUE,
|
||||||
Status = STATUS_INVALID_HANDLE;
|
&AttachConsoleRequest->InputHandle,
|
||||||
goto Quit;
|
&AttachConsoleRequest->OutputHandle,
|
||||||
}
|
&AttachConsoleRequest->ErrorHandle);
|
||||||
TargetProcessData->Console = SourceProcessData->Console;
|
|
||||||
|
|
||||||
/// REMARK: This code comes from ConSrvAllocateConsole.
|
|
||||||
/* Initialize the handles table */
|
|
||||||
Status = ConSrvInitHandlesTable(TargetProcessData,
|
|
||||||
&AttachConsoleRequest->InputHandle,
|
|
||||||
&AttachConsoleRequest->OutputHandle,
|
|
||||||
&AttachConsoleRequest->ErrorHandle);
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to initialize the handles table\n");
|
DPRINT1("Console inheritance failed\n");
|
||||||
|
|
||||||
// ConSrvRemoveConsole(TargetProcessData);
|
|
||||||
TargetProcessData->Console = NULL;
|
|
||||||
goto Quit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/** This comes from ConSrvConnect / SrvAllocConsole!! **/
|
|
||||||
/* Add a reference count because the process is tied to the console */
|
|
||||||
_InterlockedIncrement(&TargetProcessData->Console->ReferenceCount);
|
|
||||||
|
|
||||||
/* Insert the process into the processes list of the console */
|
|
||||||
InsertHeadList(&TargetProcessData->Console->ProcessList, &TargetProcessData->ConsoleLink);
|
|
||||||
|
|
||||||
/** Here, we inherited the console handles from the "source" process,
|
|
||||||
** so no need to reinitialize the handles table. **/
|
|
||||||
|
|
||||||
DPRINT1("SrvAttachConsole - Checkpoint\n");
|
|
||||||
|
|
||||||
/* Duplicate the Event */
|
|
||||||
Status = NtDuplicateObject(NtCurrentProcess(),
|
|
||||||
TargetProcessData->Console->InputBuffer.ActiveEvent,
|
|
||||||
TargetProcessData->Process->ProcessHandle,
|
|
||||||
&TargetProcessData->ConsoleEvent,
|
|
||||||
EVENT_ALL_ACCESS, 0, 0);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("NtDuplicateObject() failed: %lu\n", Status);
|
|
||||||
ConSrvRemoveConsole(TargetProcessData);
|
|
||||||
goto Quit;
|
goto Quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,14 +499,10 @@ CSR_API(SrvAttachConsole)
|
||||||
DPRINT("CONSRV: CtrlDispatcher address: %x\n", TargetProcessData->CtrlDispatcher);
|
DPRINT("CONSRV: CtrlDispatcher address: %x\n", TargetProcessData->CtrlDispatcher);
|
||||||
|
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
Quit:
|
Quit:
|
||||||
DPRINT1("SrvAttachConsole - exiting 1\n");
|
/* Unlock the "source" process and exit */
|
||||||
/* Unlock the "source" process */
|
|
||||||
CsrUnlockProcess(SourceProcess);
|
CsrUnlockProcess(SourceProcess);
|
||||||
DPRINT1("SrvAttachConsole - exiting 2\n");
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,6 +183,12 @@ NTSTATUS FASTCALL ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
|
||||||
PHANDLE pErrorHandle,
|
PHANDLE pErrorHandle,
|
||||||
int ShowCmd,
|
int ShowCmd,
|
||||||
PCSR_PROCESS CsrProcess);
|
PCSR_PROCESS CsrProcess);
|
||||||
|
NTSTATUS FASTCALL ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
|
||||||
|
struct _CONSOLE* Console,
|
||||||
|
BOOL CreateNewHandlesTable,
|
||||||
|
PHANDLE pInputHandle,
|
||||||
|
PHANDLE pOutputHandle,
|
||||||
|
PHANDLE pErrorHandle);
|
||||||
VOID FASTCALL ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData);
|
VOID FASTCALL ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData);
|
||||||
NTSTATUS FASTCALL ConSrvGetConsole(PCONSOLE_PROCESS_DATA ProcessData,
|
NTSTATUS FASTCALL ConSrvGetConsole(PCONSOLE_PROCESS_DATA ProcessData,
|
||||||
struct _CONSOLE** Console,
|
struct _CONSOLE** Console,
|
||||||
|
|
|
@ -420,21 +420,91 @@ ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
|
||||||
|
|
||||||
/* Initialize the handles table */
|
/* Initialize the handles table */
|
||||||
Status = ConSrvInitHandlesTable(ProcessData,
|
Status = ConSrvInitHandlesTable(ProcessData,
|
||||||
pInputHandle,
|
pInputHandle,
|
||||||
pOutputHandle,
|
pOutputHandle,
|
||||||
pErrorHandle);
|
pErrorHandle);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to initialize the handles table\n");
|
DPRINT1("Failed to initialize the handles table\n");
|
||||||
|
|
||||||
// ConSrvRemoveConsole(ProcessData);
|
|
||||||
ConSrvDeleteConsole(ProcessData->Console);
|
ConSrvDeleteConsole(ProcessData->Console);
|
||||||
ProcessData->Console = NULL;
|
ProcessData->Console = NULL;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
/* Duplicate the Input Event */
|
||||||
|
Status = NtDuplicateObject(NtCurrentProcess(),
|
||||||
|
ProcessData->Console->InputBuffer.ActiveEvent,
|
||||||
|
ProcessData->Process->ProcessHandle,
|
||||||
|
&ProcessData->ConsoleEvent,
|
||||||
|
EVENT_ALL_ACCESS, 0, 0);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("NtDuplicateObject() failed: %lu\n", Status);
|
||||||
|
ConSrvFreeHandlesTable(ProcessData);
|
||||||
|
ConSrvDeleteConsole(ProcessData->Console);
|
||||||
|
ProcessData->Console = NULL;
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Insert the process into the processes list of the console */
|
||||||
|
InsertHeadList(&ProcessData->Console->ProcessList, &ProcessData->ConsoleLink);
|
||||||
|
|
||||||
|
/* Add a reference count because the process is tied to the console */
|
||||||
|
_InterlockedIncrement(&ProcessData->Console->ReferenceCount);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
FASTCALL
|
||||||
|
ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
|
||||||
|
PCONSOLE Console,
|
||||||
|
BOOL CreateNewHandlesTable,
|
||||||
|
PHANDLE pInputHandle,
|
||||||
|
PHANDLE pOutputHandle,
|
||||||
|
PHANDLE pErrorHandle)
|
||||||
|
{
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
/* Inherit the console */
|
||||||
|
ProcessData->Console = Console;
|
||||||
|
|
||||||
|
if (CreateNewHandlesTable)
|
||||||
|
{
|
||||||
|
/* Initialize the handles table */
|
||||||
|
Status = ConSrvInitHandlesTable(ProcessData,
|
||||||
|
pInputHandle,
|
||||||
|
pOutputHandle,
|
||||||
|
pErrorHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("Failed to initialize the handles table\n");
|
||||||
|
ProcessData->Console = NULL;
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Duplicate the Input Event */
|
||||||
|
Status = NtDuplicateObject(NtCurrentProcess(),
|
||||||
|
ProcessData->Console->InputBuffer.ActiveEvent,
|
||||||
|
ProcessData->Process->ProcessHandle,
|
||||||
|
&ProcessData->ConsoleEvent,
|
||||||
|
EVENT_ALL_ACCESS, 0, 0);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("NtDuplicateObject() failed: %lu\n", Status);
|
||||||
|
ConSrvFreeHandlesTable(ProcessData); // NOTE: Always free the handles table.
|
||||||
|
ProcessData->Console = NULL;
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Insert the process into the processes list of the console */
|
||||||
|
InsertHeadList(&ProcessData->Console->ProcessList, &ProcessData->ConsoleLink);
|
||||||
|
|
||||||
|
/* Add a reference count because the process is tied to the console */
|
||||||
|
_InterlockedIncrement(&ProcessData->Console->ReferenceCount);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -521,7 +591,7 @@ ConSrvNewProcess(PCSR_PROCESS SourceProcess,
|
||||||
|
|
||||||
PCONSOLE_PROCESS_DATA SourceProcessData, TargetProcessData;
|
PCONSOLE_PROCESS_DATA SourceProcessData, TargetProcessData;
|
||||||
|
|
||||||
DPRINT1("ConSrvNewProcess inside\n");
|
DPRINT1("ConSrvNewProcess\n");
|
||||||
DPRINT1("SourceProcess = 0x%p ; TargetProcess = 0x%p\n", SourceProcess, TargetProcess);
|
DPRINT1("SourceProcess = 0x%p ; TargetProcess = 0x%p\n", SourceProcess, TargetProcess);
|
||||||
|
|
||||||
/* An empty target process is invalid */
|
/* An empty target process is invalid */
|
||||||
|
@ -565,17 +635,14 @@ ConSrvNewProcess(PCSR_PROCESS SourceProcess,
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
Status = ConSrvInheritHandlesTable(SourceProcessData, TargetProcessData);
|
Status = ConSrvInheritHandlesTable(SourceProcessData, TargetProcessData);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Temporary "inherit" the console from the parent */
|
/* Temporary save the parent's console */
|
||||||
TargetProcessData->ParentConsole = SourceProcessData->Console;
|
TargetProcessData->ParentConsole = SourceProcessData->Console;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT1("ConSrvNewProcess - We don't launch a Console process : SourceProcessData->Console = 0x%p ; TargetProcess->Flags = %lu\n", SourceProcessData->Console, TargetProcess->Flags);
|
DPRINT1("ConSrvNewProcess - We don't inherit a handle table : SourceProcessData->Console = 0x%p ; TargetProcess->Flags = %lu\n", SourceProcessData->Console, TargetProcess->Flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -632,11 +699,11 @@ ConSrvConnect(IN PCSR_PROCESS CsrProcess,
|
||||||
|
|
||||||
/* Initialize a new Console owned by the Console Leader Process */
|
/* Initialize a new Console owned by the Console Leader Process */
|
||||||
Status = ConSrvAllocateConsole(ProcessData,
|
Status = ConSrvAllocateConsole(ProcessData,
|
||||||
&ConnectInfo->InputHandle,
|
&ConnectInfo->InputHandle,
|
||||||
&ConnectInfo->OutputHandle,
|
&ConnectInfo->OutputHandle,
|
||||||
&ConnectInfo->ErrorHandle,
|
&ConnectInfo->ErrorHandle,
|
||||||
ConnectInfo->ShowCmd,
|
ConnectInfo->ShowCmd,
|
||||||
CsrProcess);
|
CsrProcess);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Console allocation failed\n");
|
DPRINT1("Console allocation failed\n");
|
||||||
|
@ -648,27 +715,17 @@ ConSrvConnect(IN PCSR_PROCESS CsrProcess,
|
||||||
DPRINT1("ConSrvConnect - Reuse current (parent's) console\n");
|
DPRINT1("ConSrvConnect - Reuse current (parent's) console\n");
|
||||||
|
|
||||||
/* Reuse our current console */
|
/* Reuse our current console */
|
||||||
ProcessData->Console = ConnectInfo->Console;
|
Status = ConSrvInheritConsole(ProcessData,
|
||||||
}
|
ConnectInfo->Console,
|
||||||
|
FALSE,
|
||||||
/* Add a reference count because the process is tied to the console */
|
NULL, // &ConnectInfo->InputHandle,
|
||||||
_InterlockedIncrement(&ProcessData->Console->ReferenceCount);
|
NULL, // &ConnectInfo->OutputHandle,
|
||||||
|
NULL); // &ConnectInfo->ErrorHandle);
|
||||||
/* Insert the process into the processes list of the console */
|
if (!NT_SUCCESS(Status))
|
||||||
InsertHeadList(&ProcessData->Console->ProcessList, &ProcessData->ConsoleLink);
|
{
|
||||||
|
DPRINT1("Console inheritance failed\n");
|
||||||
/// TODO: Move this up ?
|
return Status;
|
||||||
/* Duplicate the Event */
|
}
|
||||||
Status = NtDuplicateObject(NtCurrentProcess(),
|
|
||||||
ProcessData->Console->InputBuffer.ActiveEvent,
|
|
||||||
ProcessData->Process->ProcessHandle,
|
|
||||||
&ProcessData->ConsoleEvent,
|
|
||||||
EVENT_ALL_ACCESS, 0, 0);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("NtDuplicateObject() failed: %lu\n", Status);
|
|
||||||
ConSrvRemoveConsole(ProcessData);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return it to the caller */
|
/* Return it to the caller */
|
||||||
|
@ -694,7 +751,8 @@ ConSrvDisconnect(PCSR_PROCESS Process)
|
||||||
* This function is called whenever a new process (GUI or CUI) is destroyed.
|
* This function is called whenever a new process (GUI or CUI) is destroyed.
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
DPRINT1("ConSrvDisconnect called\n");
|
DPRINT1("ConSrvDisconnect\n");
|
||||||
|
|
||||||
if ( ProcessData->Console != NULL ||
|
if ( ProcessData->Console != NULL ||
|
||||||
ProcessData->HandleTable != NULL )
|
ProcessData->HandleTable != NULL )
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,5 +25,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Прелистване нагоре"
|
IDS_SCROLLUP "Прелистване нагоре"
|
||||||
IDS_SCROLLDOWN "Прелистване надолу"
|
IDS_SCROLLDOWN "Прелистване надолу"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -24,5 +24,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Posunout nahoru"
|
IDS_SCROLLUP "Posunout nahoru"
|
||||||
IDS_SCROLLDOWN "Posunout dolù"
|
IDS_SCROLLDOWN "Posunout dolù"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Pøíkazový øádek"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Nach oben scrollen"
|
IDS_SCROLLUP "Nach oben scrollen"
|
||||||
IDS_SCROLLDOWN "Nach unten scrollen"
|
IDS_SCROLLDOWN "Nach unten scrollen"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Eingabeaufforderung"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "数腴箸 疖睐"
|
IDS_SCROLLUP "数腴箸 疖睐"
|
||||||
IDS_SCROLLDOWN "数腴箸 贶豉"
|
IDS_SCROLLDOWN "数腴箸 贶豉"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Scroll up"
|
IDS_SCROLLUP "Scroll up"
|
||||||
IDS_SCROLLDOWN "Scroll down"
|
IDS_SCROLLDOWN "Scroll down"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -24,5 +24,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Desplazar arriba"
|
IDS_SCROLLUP "Desplazar arriba"
|
||||||
IDS_SCROLLDOWN "Desplazar abajo"
|
IDS_SCROLLDOWN "Desplazar abajo"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -21,5 +21,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Défiler en haut"
|
IDS_SCROLLUP "Défiler en haut"
|
||||||
IDS_SCROLLDOWN "Défiler en bas"
|
IDS_SCROLLDOWN "Défiler en bas"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Gulung Naik"
|
IDS_SCROLLUP "Gulung Naik"
|
||||||
IDS_SCROLLDOWN "Gulung Turun"
|
IDS_SCROLLDOWN "Gulung Turun"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -28,5 +28,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Scorri sù"
|
IDS_SCROLLUP "Scorri sù"
|
||||||
IDS_SCROLLDOWN "Scorri giù"
|
IDS_SCROLLDOWN "Scorri giù"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Prompt dei commandi"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "上にスクロール"
|
IDS_SCROLLUP "上にスクロール"
|
||||||
IDS_SCROLLDOWN "下にスクロール"
|
IDS_SCROLLDOWN "下にスクロール"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Rull opp"
|
IDS_SCROLLUP "Rull opp"
|
||||||
IDS_SCROLLDOWN "Rull ned"
|
IDS_SCROLLDOWN "Rull ned"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -27,5 +27,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Przewiń do góry"
|
IDS_SCROLLUP "Przewiń do góry"
|
||||||
IDS_SCROLLDOWN "Przewiń na dół"
|
IDS_SCROLLDOWN "Przewiń na dół"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Wiersz polecenia"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -21,5 +21,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Scroll up"
|
IDS_SCROLLUP "Scroll up"
|
||||||
IDS_SCROLLDOWN "Scroll down"
|
IDS_SCROLLDOWN "Scroll down"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Prompt de Comando"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -26,5 +26,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Derulează în sus"
|
IDS_SCROLLUP "Derulează în sus"
|
||||||
IDS_SCROLLDOWN "Derulează în jos"
|
IDS_SCROLLDOWN "Derulează în jos"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Linie de comandă"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Прокрутить вверх"
|
IDS_SCROLLUP "Прокрутить вверх"
|
||||||
IDS_SCROLLDOWN "Scroll Down"
|
IDS_SCROLLDOWN "Scroll Down"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -24,5 +24,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Rolovať nahor"
|
IDS_SCROLLUP "Rolovať nahor"
|
||||||
IDS_SCROLLDOWN "Rolovať nadol"
|
IDS_SCROLLDOWN "Rolovať nadol"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Príkazový riadok"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -26,5 +26,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Skrolla upp"
|
IDS_SCROLLUP "Skrolla upp"
|
||||||
IDS_SCROLLDOWN "Skrolla ner"
|
IDS_SCROLLDOWN "Skrolla ner"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -39,5 +39,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Yukarı yuvarla"
|
IDS_SCROLLUP "Yukarı yuvarla"
|
||||||
IDS_SCROLLDOWN "Aşağı yuvarla"
|
IDS_SCROLLDOWN "Aşağı yuvarla"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Komut İstemi"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -27,5 +27,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "Прокрутити догори"
|
IDS_SCROLLUP "Прокрутити догори"
|
||||||
IDS_SCROLLDOWN "Прокрутити донизу"
|
IDS_SCROLLDOWN "Прокрутити донизу"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Командний рядок"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "向上滚动"
|
IDS_SCROLLUP "向上滚动"
|
||||||
IDS_SCROLLDOWN "向下滚动"
|
IDS_SCROLLDOWN "向下滚动"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -19,5 +19,5 @@ BEGIN
|
||||||
IDS_SCROLLUP "向上滾動"
|
IDS_SCROLLUP "向上滾動"
|
||||||
IDS_SCROLLDOWN "向下滾動"
|
IDS_SCROLLDOWN "向下滾動"
|
||||||
|
|
||||||
IDS_COMMAND_PROMPT "Command Prompt"
|
IDS_CONSOLE_TITLE "ReactOS Console"
|
||||||
END
|
END
|
||||||
|
|
|
@ -37,6 +37,6 @@
|
||||||
#define IDS_SCROLLUP 309
|
#define IDS_SCROLLUP 309
|
||||||
#define IDS_SCROLLDOWN 310
|
#define IDS_SCROLLDOWN 310
|
||||||
|
|
||||||
#define IDS_COMMAND_PROMPT 500
|
#define IDS_CONSOLE_TITLE 500
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue