mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[KERNEL32/CONSRV]
- Use new structures and api indices namings (as usual). [CONSRV] - Merge CSRSS_SET_TITLE and CSRSS_GET_TITLE into CSRSS_CONSOLE_TITLE. - Merge CSRSS_GET_CONSOLE_(OUTPUT_)CP and CSRSS_SET_CONSOLE_(OUTPUT_)CP into CSRSS_CONSOLE_CP. - NtDuplicateObject(GetCurrentProcess(), ... ---> NtDuplicateObject(NtCurrentProcess(), ... - Use CsrValidateMessageBuffer instead of Win32CsrValidateBuffer. - Use CONSOLE_PROCESS_DATA structure. TODO: Remove a DPRINT1 checkpoint in SrvAllocConsole after future tests are OK. svn path=/branches/ros-csrss/; revision=57727
This commit is contained in:
parent
3a0d4c3269
commit
de31fffea8
4 changed files with 229 additions and 253 deletions
|
@ -1448,8 +1448,8 @@ WINAPI
|
||||||
GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
|
GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
|
||||||
DWORD dwProcessGroupId)
|
DWORD dwProcessGroupId)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
|
||||||
if (dwCtrlEvent != CTRL_C_EVENT && dwCtrlEvent != CTRL_BREAK_EVENT)
|
if (dwCtrlEvent != CTRL_C_EVENT && dwCtrlEvent != CTRL_BREAK_EVENT)
|
||||||
{
|
{
|
||||||
|
@ -1457,14 +1457,14 @@ GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request.Data.GenerateCtrlEvent.Event = dwCtrlEvent;
|
ApiMessage.Data.GenerateCtrlEvent.Event = dwCtrlEvent;
|
||||||
Request.Data.GenerateCtrlEvent.ProcessGroup = dwProcessGroupId;
|
ApiMessage.Data.GenerateCtrlEvent.ProcessGroup = dwProcessGroupId;
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GENERATE_CTRL_EVENT),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGenerateCtrlEvent),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_GENERATE_CTRL_EVENT));
|
||||||
if(!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = Request.Status)))
|
if(!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = ApiMessage.Status)))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1477,15 +1477,16 @@ GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
|
||||||
static DWORD
|
static DWORD
|
||||||
IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode)
|
IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCSRSS_CONSOLE_TITLE TitleRequest = &ApiMessage.Data.TitleRequest;
|
||||||
|
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
||||||
|
|
||||||
if (nSize == 0)
|
if (nSize == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Request.Data.GetTitleRequest.Length = nSize * (bUnicode ? 1 : sizeof(WCHAR));
|
TitleRequest->Length = nSize * (bUnicode ? 1 : sizeof(WCHAR));
|
||||||
CaptureBuffer = CsrAllocateCaptureBuffer(1, Request.Data.GetTitleRequest.Length);
|
CaptureBuffer = CsrAllocateCaptureBuffer(1, TitleRequest->Length);
|
||||||
if (CaptureBuffer == NULL)
|
if (CaptureBuffer == NULL)
|
||||||
{
|
{
|
||||||
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
|
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
|
||||||
|
@ -1494,14 +1495,14 @@ IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode)
|
||||||
}
|
}
|
||||||
|
|
||||||
CsrAllocateMessagePointer(CaptureBuffer,
|
CsrAllocateMessagePointer(CaptureBuffer,
|
||||||
Request.Data.GetTitleRequest.Length,
|
TitleRequest->Length,
|
||||||
(PVOID*)&Request.Data.GetTitleRequest.Title);
|
(PVOID*)&TitleRequest->Title);
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
CaptureBuffer,
|
CaptureBuffer,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_TITLE),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetTitle),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_CONSOLE_TITLE));
|
||||||
if (!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = Request.Status)))
|
if (!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = ApiMessage.Status)))
|
||||||
{
|
{
|
||||||
CsrFreeCaptureBuffer(CaptureBuffer);
|
CsrFreeCaptureBuffer(CaptureBuffer);
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
|
@ -1511,14 +1512,14 @@ IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode)
|
||||||
if (bUnicode)
|
if (bUnicode)
|
||||||
{
|
{
|
||||||
if (nSize >= sizeof(WCHAR))
|
if (nSize >= sizeof(WCHAR))
|
||||||
wcscpy((LPWSTR)lpConsoleTitle, Request.Data.GetTitleRequest.Title);
|
wcscpy((LPWSTR)lpConsoleTitle, TitleRequest->Title);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (nSize < Request.Data.GetTitleRequest.Length / sizeof(WCHAR) ||
|
if (nSize < TitleRequest->Length / sizeof(WCHAR) ||
|
||||||
!WideCharToMultiByte(CP_ACP, // ANSI code page
|
!WideCharToMultiByte(CP_ACP, // ANSI code page
|
||||||
0, // performance and mapping flags
|
0, // performance and mapping flags
|
||||||
Request.Data.GetTitleRequest.Title, // address of wide-character string
|
TitleRequest->Title, // address of wide-character string
|
||||||
-1, // number of characters in string
|
-1, // number of characters in string
|
||||||
(LPSTR)lpConsoleTitle, // address of buffer for new string
|
(LPSTR)lpConsoleTitle, // address of buffer for new string
|
||||||
nSize, // size of buffer
|
nSize, // size of buffer
|
||||||
|
@ -1527,14 +1528,15 @@ IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode)
|
||||||
{
|
{
|
||||||
/* Yes, if the buffer isn't big enough, it returns 0... Bad API */
|
/* Yes, if the buffer isn't big enough, it returns 0... Bad API */
|
||||||
*(LPSTR)lpConsoleTitle = '\0';
|
*(LPSTR)lpConsoleTitle = '\0';
|
||||||
Request.Data.GetTitleRequest.Length = 0;
|
TitleRequest->Length = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CsrFreeCaptureBuffer(CaptureBuffer);
|
CsrFreeCaptureBuffer(CaptureBuffer);
|
||||||
|
|
||||||
return Request.Data.GetTitleRequest.Length / sizeof(WCHAR);
|
return TitleRequest->Length / sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------
|
/*--------------------------------------------------------------
|
||||||
* GetConsoleTitleW
|
* GetConsoleTitleW
|
||||||
*
|
*
|
||||||
|
@ -1548,6 +1550,7 @@ GetConsoleTitleW(LPWSTR lpConsoleTitle,
|
||||||
return IntGetConsoleTitle(lpConsoleTitle, nSize, TRUE);
|
return IntGetConsoleTitle(lpConsoleTitle, nSize, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------
|
/*--------------------------------------------------------------
|
||||||
* GetConsoleTitleA
|
* GetConsoleTitleA
|
||||||
*
|
*
|
||||||
|
@ -1571,13 +1574,14 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleTitleW(LPCWSTR lpConsoleTitle)
|
SetConsoleTitleW(LPCWSTR lpConsoleTitle)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCSRSS_CONSOLE_TITLE TitleRequest = &ApiMessage.Data.TitleRequest;
|
||||||
|
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
||||||
|
|
||||||
Request.Data.SetTitleRequest.Length = wcslen(lpConsoleTitle) * sizeof(WCHAR);
|
TitleRequest->Length = wcslen(lpConsoleTitle) * sizeof(WCHAR);
|
||||||
|
|
||||||
CaptureBuffer = CsrAllocateCaptureBuffer(1, Request.Data.SetTitleRequest.Length);
|
CaptureBuffer = CsrAllocateCaptureBuffer(1, TitleRequest->Length);
|
||||||
if (CaptureBuffer == NULL)
|
if (CaptureBuffer == NULL)
|
||||||
{
|
{
|
||||||
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
|
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
|
||||||
|
@ -1587,17 +1591,17 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle)
|
||||||
|
|
||||||
CsrCaptureMessageBuffer(CaptureBuffer,
|
CsrCaptureMessageBuffer(CaptureBuffer,
|
||||||
(PVOID)lpConsoleTitle,
|
(PVOID)lpConsoleTitle,
|
||||||
Request.Data.SetTitleRequest.Length,
|
TitleRequest->Length,
|
||||||
(PVOID*)&Request.Data.SetTitleRequest.Title);
|
(PVOID*)&TitleRequest->Title);
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
CaptureBuffer,
|
CaptureBuffer,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_TITLE),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetTitle),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_CONSOLE_TITLE));
|
||||||
|
|
||||||
CsrFreeCaptureBuffer(CaptureBuffer);
|
CsrFreeCaptureBuffer(CaptureBuffer);
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1683,20 +1687,23 @@ UINT
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleCP(VOID)
|
GetConsoleCP(VOID)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
/* Get the Input Code Page */
|
||||||
|
ApiMessage.Data.ConsoleCPRequest.InputCP = TRUE;
|
||||||
|
|
||||||
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_CP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCP),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_CONSOLE_CP));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError (Status);
|
BaseSetLastNTError(Status);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Request.Data.GetConsoleCodePage.CodePage;
|
return ApiMessage.Data.ConsoleCPRequest.CodePage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1709,16 +1716,18 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleCP(UINT wCodePageID)
|
SetConsoleCP(UINT wCodePageID)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
|
||||||
Request.Data.SetConsoleCodePage.CodePage = wCodePageID;
|
/* Set the Input Code Page */
|
||||||
|
ApiMessage.Data.ConsoleCPRequest.InputCP = TRUE;
|
||||||
|
ApiMessage.Data.ConsoleCPRequest.CodePage = wCodePageID;
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_CP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCP),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_CONSOLE_CP));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
}
|
}
|
||||||
|
@ -1736,20 +1745,23 @@ UINT
|
||||||
WINAPI
|
WINAPI
|
||||||
GetConsoleOutputCP(VOID)
|
GetConsoleOutputCP(VOID)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
/* Get the Output Code Page */
|
||||||
|
ApiMessage.Data.ConsoleCPRequest.InputCP = FALSE;
|
||||||
|
|
||||||
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_OUTPUT_CP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCP),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_CONSOLE_CP));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError (Status);
|
BaseSetLastNTError (Status);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Request.Data.GetConsoleOutputCodePage.CodePage;
|
return ApiMessage.Data.ConsoleCPRequest.CodePage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1762,16 +1774,18 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleOutputCP(UINT wCodePageID)
|
SetConsoleOutputCP(UINT wCodePageID)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
|
||||||
Request.Data.SetConsoleOutputCodePage.CodePage = wCodePageID;
|
/* Set the Output Code Page */
|
||||||
|
ApiMessage.Data.ConsoleCPRequest.InputCP = FALSE;
|
||||||
|
ApiMessage.Data.ConsoleCPRequest.CodePage = wCodePageID;
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_OUTPUT_CP),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCP),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_CONSOLE_CP));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
}
|
}
|
||||||
|
@ -1790,10 +1804,11 @@ WINAPI
|
||||||
GetConsoleProcessList(LPDWORD lpdwProcessList,
|
GetConsoleProcessList(LPDWORD lpdwProcessList,
|
||||||
DWORD dwProcessCount)
|
DWORD dwProcessCount)
|
||||||
{
|
{
|
||||||
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
|
||||||
CSR_API_MESSAGE Request;
|
|
||||||
ULONG nProcesses;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
CONSOLE_API_MESSAGE ApiMessage;
|
||||||
|
PCSRSS_GET_PROCESS_LIST GetProcessListRequest = &ApiMessage.Data.GetProcessListRequest;
|
||||||
|
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
||||||
|
ULONG nProcesses;
|
||||||
|
|
||||||
if (lpdwProcessList == NULL || dwProcessCount == 0)
|
if (lpdwProcessList == NULL || dwProcessCount == 0)
|
||||||
{
|
{
|
||||||
|
@ -1809,26 +1824,27 @@ GetConsoleProcessList(LPDWORD lpdwProcessList,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request.Data.GetProcessListRequest.nMaxIds = dwProcessCount;
|
GetProcessListRequest->nMaxIds = dwProcessCount;
|
||||||
|
|
||||||
CsrAllocateMessagePointer(CaptureBuffer,
|
CsrAllocateMessagePointer(CaptureBuffer,
|
||||||
dwProcessCount * sizeof(DWORD),
|
dwProcessCount * sizeof(DWORD),
|
||||||
(PVOID*)&Request.Data.GetProcessListRequest.ProcessId);
|
(PVOID*)&GetProcessListRequest->pProcessIds);
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||||
CaptureBuffer,
|
CaptureBuffer,
|
||||||
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_PROCESS_LIST),
|
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetProcessList),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSRSS_GET_PROCESS_LIST));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError (Status);
|
BaseSetLastNTError (Status);
|
||||||
nProcesses = 0;
|
nProcesses = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nProcesses = Request.Data.GetProcessListRequest.nProcessIdsTotal;
|
nProcesses = GetProcessListRequest->nProcessIdsTotal;
|
||||||
if (dwProcessCount >= nProcesses)
|
if (dwProcessCount >= nProcesses)
|
||||||
{
|
{
|
||||||
memcpy(lpdwProcessList, Request.Data.GetProcessListRequest.ProcessId, nProcesses * sizeof(DWORD));
|
memcpy(lpdwProcessList, GetProcessListRequest->pProcessIds, nProcesses * sizeof(DWORD));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2134,22 +2150,6 @@ GetConsoleNlsMode(HANDLE hConsole, LPDWORD lpMode)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL
|
|
||||||
WINAPI
|
|
||||||
RegisterConsoleIME(HWND hWnd, LPDWORD ThreadId)
|
|
||||||
{
|
|
||||||
STUB;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
WINAPI
|
|
||||||
RegisterConsoleOS2(BOOL bUnknown)
|
|
||||||
{
|
|
||||||
STUB;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleCursorMode(HANDLE hConsole, BOOL Unknown1, BOOL Unknown2)
|
SetConsoleCursorMode(HANDLE hConsole, BOOL Unknown1, BOOL Unknown2)
|
||||||
|
@ -2174,6 +2174,22 @@ SetConsoleNlsMode(HANDLE hConsole, DWORD dwMode)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
RegisterConsoleIME(HWND hWnd, LPDWORD ThreadId)
|
||||||
|
{
|
||||||
|
STUB;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
RegisterConsoleOS2(BOOL bUnknown)
|
||||||
|
{
|
||||||
|
STUB;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetConsoleOS2OemFormat(BOOL bUnknown)
|
SetConsoleOS2OemFormat(BOOL bUnknown)
|
||||||
|
|
|
@ -126,7 +126,7 @@ typedef enum _CONSRV_API_NUMBER
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
USHORT nMaxIds;
|
USHORT nMaxIds;
|
||||||
PDWORD ProcessId;
|
PDWORD pProcessIds;
|
||||||
ULONG nProcessIdsTotal;
|
ULONG nProcessIdsTotal;
|
||||||
} CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST;
|
} CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST;
|
||||||
|
|
||||||
|
@ -260,13 +260,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
DWORD Length;
|
DWORD Length;
|
||||||
PWCHAR Title;
|
PWCHAR Title;
|
||||||
} CSRSS_SET_TITLE, *PCSRSS_SET_TITLE;
|
} CSRSS_CONSOLE_TITLE, *PCSRSS_CONSOLE_TITLE;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
DWORD Length;
|
|
||||||
PWCHAR Title;
|
|
||||||
} CSRSS_GET_TITLE, *PCSRSS_GET_TITLE;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -540,23 +534,9 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
BOOL InputCP; // TRUE : Input Code Page ; FALSE : Output Code Page
|
||||||
UINT CodePage;
|
UINT CodePage;
|
||||||
} CSRSS_GET_CONSOLE_CP, *PCSRSS_GET_CONSOLE_CP;
|
} CSRSS_CONSOLE_CP, *PCSRSS_CONSOLE_CP;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
UINT CodePage;
|
|
||||||
} CSRSS_SET_CONSOLE_CP, *PCSRSS_SET_CONSOLE_CP;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
UINT CodePage;
|
|
||||||
} CSRSS_GET_CONSOLE_OUTPUT_CP, *PCSRSS_GET_CONSOLE_OUTPUT_CP;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
UINT CodePage;
|
|
||||||
} CSRSS_SET_CONSOLE_OUTPUT_CP, *PCSRSS_SET_CONSOLE_OUTPUT_CP;
|
|
||||||
|
|
||||||
typedef struct _CONSOLE_API_MESSAGE
|
typedef struct _CONSOLE_API_MESSAGE
|
||||||
{
|
{
|
||||||
|
@ -597,8 +577,7 @@ typedef struct _CONSOLE_API_MESSAGE
|
||||||
CSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
|
CSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
|
||||||
|
|
||||||
/* Console window */
|
/* Console window */
|
||||||
CSRSS_SET_TITLE SetTitleRequest;
|
CSRSS_CONSOLE_TITLE TitleRequest;
|
||||||
CSRSS_GET_TITLE GetTitleRequest;
|
|
||||||
CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest;
|
CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest;
|
||||||
CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest;
|
CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest;
|
||||||
|
|
||||||
|
@ -636,11 +615,8 @@ typedef struct _CONSOLE_API_MESSAGE
|
||||||
CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent;
|
CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent;
|
||||||
CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest;
|
CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest;
|
||||||
|
|
||||||
/* CodePage */
|
/* Input and Output Code Pages */
|
||||||
CSRSS_GET_CONSOLE_CP GetConsoleCodePage;
|
CSRSS_CONSOLE_CP ConsoleCPRequest;
|
||||||
CSRSS_SET_CONSOLE_CP SetConsoleCodePage;
|
|
||||||
CSRSS_GET_CONSOLE_OUTPUT_CP GetConsoleOutputCodePage;
|
|
||||||
CSRSS_SET_CONSOLE_OUTPUT_CP SetConsoleOutputCodePage;
|
|
||||||
|
|
||||||
CSRSS_GET_PROCESS_LIST GetProcessListRequest;
|
CSRSS_GET_PROCESS_LIST GetProcessListRequest;
|
||||||
} Data;
|
} Data;
|
||||||
|
|
|
@ -556,7 +556,7 @@ CSR_API(SrvWriteConsole)
|
||||||
|
|
||||||
if (Console->UnpauseEvent)
|
if (Console->UnpauseEvent)
|
||||||
{
|
{
|
||||||
Status = NtDuplicateObject(GetCurrentProcess(), Console->UnpauseEvent,
|
Status = NtDuplicateObject(NtCurrentProcess(), Console->UnpauseEvent,
|
||||||
ProcessData->ProcessHandle, &WriteConsoleRequest->UnpauseEvent,
|
ProcessData->ProcessHandle, &WriteConsoleRequest->UnpauseEvent,
|
||||||
SYNCHRONIZE, 0, 0);
|
SYNCHRONIZE, 0, 0);
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
|
@ -62,7 +62,7 @@ ConioConsoleCtrlEventTimeout(DWORD Event,
|
||||||
{
|
{
|
||||||
HANDLE Thread;
|
HANDLE Thread;
|
||||||
|
|
||||||
DPRINT("ConioConsoleCtrlEvent Parent ProcessId = %x\n", ProcessData->Process->ClientId.UniqueProcess);
|
DPRINT("ConioConsoleCtrlEvent Parent pProcessIds = %x\n", ProcessData->Process->ClientId.UniqueProcess);
|
||||||
|
|
||||||
if (ProcessData->CtrlDispatcher)
|
if (ProcessData->CtrlDispatcher)
|
||||||
{
|
{
|
||||||
|
@ -250,15 +250,16 @@ CSR_API(SrvOpenConsole)
|
||||||
|
|
||||||
CSR_API(SrvAllocConsole)
|
CSR_API(SrvAllocConsole)
|
||||||
{
|
{
|
||||||
PCSRSS_ALLOC_CONSOLE AllocConsoleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.AllocConsoleRequest;
|
|
||||||
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
|
||||||
PCSRSS_CONSOLE Console;
|
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
PCSRSS_ALLOC_CONSOLE AllocConsoleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.AllocConsoleRequest;
|
||||||
|
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
|
||||||
|
PCSRSS_CONSOLE Console;
|
||||||
BOOLEAN NewConsole = FALSE;
|
BOOLEAN NewConsole = FALSE;
|
||||||
|
|
||||||
DPRINT("SrvAllocConsole\n");
|
DPRINT("SrvAllocConsole\n");
|
||||||
|
|
||||||
RtlEnterCriticalSection(&ProcessData->HandleTableLock);
|
RtlEnterCriticalSection(&ProcessData->HandleTableLock);
|
||||||
|
|
||||||
if (ProcessData->Console)
|
if (ProcessData->Console)
|
||||||
{
|
{
|
||||||
DPRINT1("Process already has a console\n");
|
DPRINT1("Process already has a console\n");
|
||||||
|
@ -266,6 +267,8 @@ CSR_API(SrvAllocConsole)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DPRINT1("SrvAllocConsole - Checkpoint 1\n");
|
||||||
|
|
||||||
/* If we don't need a console, then get out of here */
|
/* If we don't need a console, then get out of here */
|
||||||
if (!AllocConsoleRequest->ConsoleNeeded)
|
if (!AllocConsoleRequest->ConsoleNeeded)
|
||||||
{
|
{
|
||||||
|
@ -276,7 +279,7 @@ CSR_API(SrvAllocConsole)
|
||||||
|
|
||||||
/* If we already have one, then don't create a new one... */
|
/* If we already have one, then don't create a new one... */
|
||||||
if (!AllocConsoleRequest->Console ||
|
if (!AllocConsoleRequest->Console ||
|
||||||
AllocConsoleRequest->Console != ProcessData->ParentConsole)
|
AllocConsoleRequest->Console != ProcessData->ParentConsole)
|
||||||
{
|
{
|
||||||
/* Allocate a console structure */
|
/* Allocate a console structure */
|
||||||
NewConsole = TRUE;
|
NewConsole = TRUE;
|
||||||
|
@ -287,10 +290,13 @@ CSR_API(SrvAllocConsole)
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
/* initialize list head */
|
|
||||||
|
/* Initialize list head */
|
||||||
InitializeListHead(&Console->ProcessList);
|
InitializeListHead(&Console->ProcessList);
|
||||||
/* insert process data required for GUI initialization */
|
|
||||||
|
/* Insert process data required for GUI initialization */
|
||||||
InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink);
|
InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink);
|
||||||
|
|
||||||
/* Initialize the Console */
|
/* Initialize the Console */
|
||||||
Status = CsrInitConsole(Console, AllocConsoleRequest->ShowCmd);
|
Status = CsrInitConsole(Console, AllocConsoleRequest->ShowCmd);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -329,7 +335,7 @@ CSR_API(SrvAllocConsole)
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to insert object\n");
|
DPRINT1("Failed to insert object\n");
|
||||||
ConioDeleteConsole((Object_t *) Console);
|
ConioDeleteConsole((Object_t *) Console);
|
||||||
ProcessData->Console = 0;
|
ProcessData->Console = NULL;
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -346,22 +352,21 @@ CSR_API(SrvAllocConsole)
|
||||||
ConioDeleteConsole((Object_t *) Console);
|
ConioDeleteConsole((Object_t *) Console);
|
||||||
Win32CsrReleaseObject(ProcessData,
|
Win32CsrReleaseObject(ProcessData,
|
||||||
AllocConsoleRequest->InputHandle);
|
AllocConsoleRequest->InputHandle);
|
||||||
ProcessData->Console = 0;
|
ProcessData->Console = NULL;
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Duplicate the Event */
|
/* Duplicate the Event */
|
||||||
if (!DuplicateHandle(GetCurrentProcess(),
|
Status = NtDuplicateObject(NtCurrentProcess(),
|
||||||
ProcessData->Console->ActiveEvent,
|
ProcessData->Console->ActiveEvent,
|
||||||
ProcessData->ProcessHandle,
|
ProcessData->Process->ProcessHandle,
|
||||||
&ProcessData->ConsoleEvent,
|
&ProcessData->ConsoleEvent,
|
||||||
EVENT_ALL_ACCESS,
|
EVENT_ALL_ACCESS, 0, 0);
|
||||||
FALSE,
|
if (!NT_SUCCESS(Status))
|
||||||
0))
|
|
||||||
{
|
{
|
||||||
DPRINT1("DuplicateHandle() failed: %lu\n", GetLastError());
|
DPRINT1("NtDuplicateObject() failed: %lu\n", Status);
|
||||||
ConioDeleteConsole((Object_t *) Console);
|
ConioDeleteConsole((Object_t *) Console);
|
||||||
if (NewConsole || !ProcessData->bInheritHandles)
|
if (NewConsole || !ProcessData->bInheritHandles)
|
||||||
{
|
{
|
||||||
|
@ -370,7 +375,7 @@ CSR_API(SrvAllocConsole)
|
||||||
Win32CsrReleaseObject(ProcessData,
|
Win32CsrReleaseObject(ProcessData,
|
||||||
AllocConsoleRequest->InputHandle);
|
AllocConsoleRequest->InputHandle);
|
||||||
}
|
}
|
||||||
ProcessData->Console = 0;
|
ProcessData->Console = NULL;
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -531,31 +536,41 @@ CSR_API(SrvGetConsoleMode)
|
||||||
CSR_API(SrvSetConsoleTitle)
|
CSR_API(SrvSetConsoleTitle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCSRSS_SET_TITLE SetTitleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetTitleRequest;
|
PCSRSS_CONSOLE_TITLE TitleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.TitleRequest;
|
||||||
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
// PCSR_PROCESS Process = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PWCHAR Buffer;
|
PWCHAR Buffer;
|
||||||
|
|
||||||
DPRINT("SrvSetConsoleTitle\n");
|
DPRINT("SrvSetConsoleTitle\n");
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, SetTitleRequest->Title,
|
if (!CsrValidateMessageBuffer(ApiMessage,
|
||||||
SetTitleRequest->Length, 1))
|
(PVOID)&TitleRequest->Title,
|
||||||
|
TitleRequest->Length,
|
||||||
|
sizeof(BYTE)))
|
||||||
|
{
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if (!Win32CsrValidateBuffer(Process, TitleRequest->Title,
|
||||||
|
TitleRequest->Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if(NT_SUCCESS(Status))
|
if(NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, SetTitleRequest->Length);
|
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, TitleRequest->Length);
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
/* copy title to console */
|
/* Copy title to console */
|
||||||
RtlFreeUnicodeString(&Console->Title);
|
RtlFreeUnicodeString(&Console->Title);
|
||||||
Console->Title.Buffer = Buffer;
|
Console->Title.Buffer = Buffer;
|
||||||
Console->Title.Length = Console->Title.MaximumLength = SetTitleRequest->Length;
|
Console->Title.Length = Console->Title.MaximumLength = TitleRequest->Length;
|
||||||
memcpy(Console->Title.Buffer, SetTitleRequest->Title, Console->Title.Length);
|
memcpy(Console->Title.Buffer, TitleRequest->Title, Console->Title.Length);
|
||||||
if (! ConioChangeTitle(Console))
|
|
||||||
|
if (!ConioChangeTitle(Console))
|
||||||
{
|
{
|
||||||
Status = STATUS_UNSUCCESSFUL;
|
Status = STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
@ -568,6 +583,7 @@ CSR_API(SrvSetConsoleTitle)
|
||||||
{
|
{
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,35 +593,44 @@ CSR_API(SrvSetConsoleTitle)
|
||||||
CSR_API(SrvGetConsoleTitle)
|
CSR_API(SrvGetConsoleTitle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCSRSS_GET_TITLE GetTitleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetTitleRequest;
|
PCSRSS_CONSOLE_TITLE TitleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.TitleRequest;
|
||||||
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
// PCSR_PROCESS Process = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
DWORD Length;
|
DWORD Length;
|
||||||
|
|
||||||
DPRINT("SrvGetConsoleTitle\n");
|
DPRINT("SrvGetConsoleTitle\n");
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, GetTitleRequest->Title,
|
if (!CsrValidateMessageBuffer(ApiMessage,
|
||||||
GetTitleRequest->Length, 1))
|
(PVOID)&TitleRequest->Title,
|
||||||
|
TitleRequest->Length,
|
||||||
|
sizeof(BYTE)))
|
||||||
|
{
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if (!Win32CsrValidateBuffer(Process, TitleRequest->Title,
|
||||||
|
TitleRequest->Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Can't get console\n");
|
DPRINT1("Can't get console\n");
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy title of the console to the user title buffer */
|
/* Copy title of the console to the user title buffer */
|
||||||
if (GetTitleRequest->Length >= sizeof(WCHAR))
|
if (TitleRequest->Length >= sizeof(WCHAR))
|
||||||
{
|
{
|
||||||
Length = min(GetTitleRequest->Length - sizeof(WCHAR), Console->Title.Length);
|
Length = min(TitleRequest->Length - sizeof(WCHAR), Console->Title.Length);
|
||||||
memcpy(GetTitleRequest->Title, Console->Title.Buffer, Length);
|
memcpy(TitleRequest->Title, Console->Title.Buffer, Length);
|
||||||
GetTitleRequest->Title[Length / sizeof(WCHAR)] = L'\0';
|
TitleRequest->Title[Length / sizeof(WCHAR)] = L'\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
GetTitleRequest->Length = Console->Title.Length;
|
TitleRequest->Length = Console->Title.Length;
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -699,17 +724,14 @@ CSR_API(SrvSetConsoleHardwareState)
|
||||||
|
|
||||||
CSR_API(SrvGetConsoleWindow)
|
CSR_API(SrvGetConsoleWindow)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
PCSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleWindowRequest;
|
PCSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleWindowRequest;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
DPRINT("SrvGetConsoleWindow\n");
|
DPRINT("SrvGetConsoleWindow\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetConsoleWindowRequest->WindowHandle = Console->hWindow;
|
GetConsoleWindowRequest->WindowHandle = Console->hWindow;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
@ -719,20 +741,19 @@ CSR_API(SrvGetConsoleWindow)
|
||||||
|
|
||||||
CSR_API(SrvSetConsoleIcon)
|
CSR_API(SrvSetConsoleIcon)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
PCSRSS_SET_CONSOLE_ICON SetConsoleIconRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleIconRequest;
|
PCSRSS_SET_CONSOLE_ICON SetConsoleIconRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleIconRequest;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
DPRINT("SrvSetConsoleIcon\n");
|
DPRINT("SrvSetConsoleIcon\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = (ConioChangeIcon(Console, SetConsoleIconRequest->WindowIcon)
|
Status = (ConioChangeIcon(Console, SetConsoleIconRequest->WindowIcon)
|
||||||
? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
? STATUS_SUCCESS
|
||||||
|
: STATUS_UNSUCCESSFUL);
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -740,84 +761,41 @@ CSR_API(SrvSetConsoleIcon)
|
||||||
|
|
||||||
CSR_API(SrvGetConsoleCP)
|
CSR_API(SrvGetConsoleCP)
|
||||||
{
|
{
|
||||||
PCSRSS_GET_CONSOLE_CP GetConsoleCodePage = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleCodePage;
|
|
||||||
PCSRSS_CONSOLE Console;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
PCSRSS_CONSOLE_CP ConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleCPRequest;
|
||||||
DPRINT("SrvGetConsoleCP\n");
|
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
|
||||||
if (! NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetConsoleCodePage->CodePage = Console->CodePage;
|
|
||||||
ConioUnlockConsole(Console);
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSR_API(CsrGetConsoleOutputCodePage) // TODO: Merge this function with the other one.
|
|
||||||
{
|
|
||||||
PCSRSS_GET_CONSOLE_OUTPUT_CP GetConsoleOutputCodePage = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleOutputCodePage;
|
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleOutputCodePage\n");
|
DPRINT("SrvGetConsoleCP, getting %s Code Page\n",
|
||||||
|
ConsoleCPRequest->InputCP ? "Input" : "Output");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetConsoleOutputCodePage->CodePage = Console->OutputCodePage;
|
ConsoleCPRequest->CodePage = (ConsoleCPRequest->InputCP ? Console->CodePage
|
||||||
|
: Console->OutputCodePage);
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(SrvSetConsoleCP)
|
CSR_API(SrvSetConsoleCP)
|
||||||
{
|
{
|
||||||
PCSRSS_SET_CONSOLE_CP SetConsoleCodePage = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleCodePage;
|
|
||||||
PCSRSS_CONSOLE Console;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
PCSRSS_CONSOLE_CP ConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleCPRequest;
|
||||||
DPRINT("SrvSetConsoleCP\n");
|
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
|
||||||
if (! NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsValidCodePage(SetConsoleCodePage->CodePage))
|
|
||||||
{
|
|
||||||
Console->CodePage = SetConsoleCodePage->CodePage;
|
|
||||||
ConioUnlockConsole(Console);
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
|
||||||
return STATUS_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSR_API(CsrSetConsoleOutputCodePage) // TODO: Merge this function with the other one.
|
|
||||||
{
|
|
||||||
PCSRSS_SET_CONSOLE_OUTPUT_CP SetConsoleOutputCodePage = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleOutputCodePage;
|
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
DPRINT("CsrSetConsoleOutputCodePage\n");
|
DPRINT("SrvSetConsoleCP, setting %s Code Page\n",
|
||||||
|
ConsoleCPRequest->InputCP ? "Input" : "Output");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
|
if (IsValidCodePage(ConsoleCPRequest->CodePage))
|
||||||
{
|
{
|
||||||
return Status;
|
if (ConsoleCPRequest->InputCP)
|
||||||
}
|
Console->CodePage = ConsoleCPRequest->CodePage;
|
||||||
|
else
|
||||||
|
Console->OutputCodePage = ConsoleCPRequest->CodePage;
|
||||||
|
|
||||||
if (IsValidCodePage(SetConsoleOutputCodePage->CodePage))
|
|
||||||
{
|
|
||||||
Console->OutputCodePage = SetConsoleOutputCodePage->CodePage;
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -828,35 +806,43 @@ CSR_API(CsrSetConsoleOutputCodePage) // TODO: Merge this function with the other
|
||||||
|
|
||||||
CSR_API(SrvGetConsoleProcessList)
|
CSR_API(SrvGetConsoleProcessList)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
PCSRSS_GET_PROCESS_LIST GetProcessListRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetProcessListRequest;
|
PCSRSS_GET_PROCESS_LIST GetProcessListRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetProcessListRequest;
|
||||||
PDWORD Buffer;
|
PDWORD Buffer;
|
||||||
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
// PCSR_PROCESS Process = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PCSR_PROCESS current;
|
PCONSOLE_PROCESS_DATA current;
|
||||||
PLIST_ENTRY current_entry;
|
PLIST_ENTRY current_entry;
|
||||||
ULONG nItems = 0;
|
ULONG nItems = 0;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
DPRINT("SrvGetConsoleProcessList\n");
|
DPRINT("SrvGetConsoleProcessList\n");
|
||||||
|
|
||||||
Buffer = GetProcessListRequest->ProcessId;
|
if (!CsrValidateMessageBuffer(ApiMessage,
|
||||||
|
(PVOID)&GetProcessListRequest->pProcessIds,
|
||||||
|
GetProcessListRequest->nMaxIds,
|
||||||
|
sizeof(DWORD)))
|
||||||
|
{
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
Buffer = GetProcessListRequest->pProcessIds;
|
||||||
|
|
||||||
|
/*
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, Buffer, GetProcessListRequest->nMaxIds, sizeof(DWORD)))
|
if (!Win32CsrValidateBuffer(ProcessData, Buffer, GetProcessListRequest->nMaxIds, sizeof(DWORD)))
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
|
*/
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (current_entry = Console->ProcessList.Flink;
|
for (current_entry = Console->ProcessList.Flink;
|
||||||
current_entry != &Console->ProcessList;
|
current_entry != &Console->ProcessList;
|
||||||
current_entry = current_entry->Flink)
|
current_entry = current_entry->Flink)
|
||||||
{
|
{
|
||||||
current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink);
|
current = CONTAINING_RECORD(current_entry, CONSOLE_PROCESS_DATA, ConsoleLink);
|
||||||
if (++nItems <= GetProcessListRequest->nMaxIds)
|
if (++nItems <= GetProcessListRequest->nMaxIds)
|
||||||
{
|
{
|
||||||
*Buffer++ = HandleToUlong(current->ClientId.UniqueProcess);
|
*Buffer++ = HandleToUlong(current->Process->ClientId.UniqueProcess);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -868,27 +854,24 @@ CSR_API(SrvGetConsoleProcessList)
|
||||||
|
|
||||||
CSR_API(SrvGenerateConsoleCtrlEvent)
|
CSR_API(SrvGenerateConsoleCtrlEvent)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
PCSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GenerateCtrlEvent;
|
PCSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GenerateCtrlEvent;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PCSR_PROCESS current;
|
PCONSOLE_PROCESS_DATA current;
|
||||||
PLIST_ENTRY current_entry;
|
PLIST_ENTRY current_entry;
|
||||||
DWORD Group;
|
DWORD Group;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
{
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Group = GenerateCtrlEvent->ProcessGroup;
|
Group = GenerateCtrlEvent->ProcessGroup;
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
for (current_entry = Console->ProcessList.Flink;
|
for (current_entry = Console->ProcessList.Flink;
|
||||||
current_entry != &Console->ProcessList;
|
current_entry != &Console->ProcessList;
|
||||||
current_entry = current_entry->Flink)
|
current_entry = current_entry->Flink)
|
||||||
{
|
{
|
||||||
current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink);
|
current = CONTAINING_RECORD(current_entry, CONSOLE_PROCESS_DATA, ConsoleLink);
|
||||||
if (Group == 0 || current->ProcessGroupId == Group)
|
if (Group == 0 || current->Process->ProcessGroupId == Group)
|
||||||
{
|
{
|
||||||
ConioConsoleCtrlEvent(GenerateCtrlEvent->Event, current);
|
ConioConsoleCtrlEvent(GenerateCtrlEvent->Event, current);
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
|
@ -906,7 +889,7 @@ CSR_API(SrvGetConsoleSelectionInfo)
|
||||||
PCSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleSelectionInfo;
|
PCSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleSelectionInfo;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
memset(&GetConsoleSelectionInfo->Info, 0, sizeof(CONSOLE_SELECTION_INFO));
|
memset(&GetConsoleSelectionInfo->Info, 0, sizeof(CONSOLE_SELECTION_INFO));
|
||||||
|
@ -914,6 +897,7 @@ CSR_API(SrvGetConsoleSelectionInfo)
|
||||||
GetConsoleSelectionInfo->Info = Console->Selection;
|
GetConsoleSelectionInfo->Info = Console->Selection;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue