WINAPI
DefaultConsoleCtrlHandler(DWORD Event)
{
- DPRINT1("Default handler called: %lx\n", Event);
+ DPRINT("Default handler called: %lx\n", Event);
switch(Event)
{
case CTRL_C_EVENT:
break;
case CTRL_SHUTDOWN_EVENT:
- DPRINT1("Ctrl Shutdown Event\n");
+ DPRINT("Ctrl Shutdown Event\n");
break;
case CTRL_CLOSE_EVENT:
break;
case CTRL_LOGOFF_EVENT:
- DPRINT1("Ctrl Logoff Event\n");
+ DPRINT("Ctrl Logoff Event\n");
break;
}
UINT i;
EXCEPTION_RECORD erException;
- DPRINT1("Console Dispatcher Active: %lx %lx\n", CodeAndFlag, nCode);
+ DPRINT("Console Dispatcher Active: %lx %lx\n", CodeAndFlag, nCode);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
switch(nCode)
(CodeAndFlag & MINLONG) &&
((nCode == CTRL_LOGOFF_EVENT) || (nCode == CTRL_SHUTDOWN_EVENT)))
{
- DPRINT1("Skipping system/service apps\n");
+ DPRINT("Skipping system/service apps\n");
break;
}
ULONG CsrRequest;
NTSTATUS Status = STATUS_SUCCESS;
- if (0 == _wcsicmp(wsName, L"CONIN$"))
+ if (wsName && 0 == _wcsicmp(wsName, L"CONIN$"))
{
CsrRequest = MAKE_CSR_API(GET_INPUT_HANDLE, CSR_NATIVE);
}
- else if (0 == _wcsicmp(wsName, L"CONOUT$"))
+ else if (wsName && 0 == _wcsicmp(wsName, L"CONOUT$"))
{
CsrRequest = MAKE_CSR_API(GET_OUTPUT_HANDLE, CSR_NATIVE);
}
/* Structures for GET_INPUT_HANDLE and GET_OUTPUT_HANDLE requests are identical */
Request.Data.GetInputHandleRequest.Access = dwDesiredAccess;
Request.Data.GetInputHandleRequest.Inheritable = bInheritHandle;
+ Request.Data.GetInputHandleRequest.ShareMode = dwShareMode;
Status = CsrClientCallServer(&Request,
NULL,
return INVALID_HANDLE_VALUE;
}
- return Request.Data.GetInputHandleRequest.InputHandle;
+ return Request.Data.GetInputHandleRequest.Handle;
}
Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher;
Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE;
+ Request.Data.AllocConsoleRequest.Visible = TRUE;
CsrRequest = MAKE_CSR_API(ALLOC_CONSOLE, CSR_CONSOLE);
/*--------------------------------------------------------------
* SetConsoleScreenBufferSize
*
- * @unimplemented
+ * @implemented
*/
BOOL
WINAPI
SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
COORD dwSize)
{
- DPRINT1("SetConsoleScreenBufferSize(0x%x, 0x%x) UNIMPLEMENTED!\n", hConsoleOutput, dwSize);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ CSR_API_MESSAGE Request;
+ ULONG CsrRequest;
+ NTSTATUS Status;
+
+ CsrRequest = MAKE_CSR_API(SET_SCREEN_BUFFER_SIZE, CSR_CONSOLE);
+ Request.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput;
+ Request.Data.SetScreenBufferSize.Size = dwSize;
+
+ Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE));
+ if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+ {
+ SetLastErrorByStatus(Status);
+ return FALSE;
+ }
+
+ return TRUE;
}
/*--------------------------------------------------------------
GetConsoleProcessList(LPDWORD lpdwProcessList,
DWORD dwProcessCount)
{
- PCSR_API_MESSAGE Request;
+ PCSR_CAPTURE_BUFFER CaptureBuffer;
+ CSR_API_MESSAGE Request;
ULONG CsrRequest;
ULONG nProcesses;
NTSTATUS Status;
return 0;
}
- Request = RtlAllocateHeap(RtlGetProcessHeap(),
- 0,
- max(sizeof(CSR_API_MESSAGE),
- CSR_API_MESSAGE_HEADER_SIZE(CSRSS_GET_PROCESS_LIST)
- + min (dwProcessCount, CSRSS_MAX_GET_PROCESS_LIST / sizeof(DWORD)) * sizeof(DWORD)));
- if (Request == NULL)
+ CaptureBuffer = CsrAllocateCaptureBuffer(1, dwProcessCount * sizeof(DWORD));
+ if (CaptureBuffer == NULL)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
CsrRequest = MAKE_CSR_API(GET_PROCESS_LIST, CSR_CONSOLE);
- Request->Data.GetProcessListRequest.nMaxIds = min (dwProcessCount, CSRSS_MAX_GET_PROCESS_LIST / sizeof(DWORD));
+ Request.Data.GetProcessListRequest.nMaxIds = dwProcessCount;
+ CsrAllocateMessagePointer(CaptureBuffer,
+ dwProcessCount * sizeof(DWORD),
+ (PVOID*)&Request.Data.GetProcessListRequest.ProcessId);
- Status = CsrClientCallServer(Request,
- NULL,
+ Status = CsrClientCallServer(&Request,
+ CaptureBuffer,
CsrRequest,
- max(sizeof(CSR_API_MESSAGE),
- CSR_API_MESSAGE_HEADER_SIZE(CSRSS_GET_PROCESS_LIST)
- + Request->Data.GetProcessListRequest.nMaxIds * sizeof(DWORD)));
- if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request->Status))
+ sizeof(CSR_API_MESSAGE));
+ if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
{
- RtlFreeHeap(RtlGetProcessHeap(), 0, Request);
SetLastErrorByStatus (Status);
nProcesses = 0;
}
else
{
- nProcesses = Request->Data.GetProcessListRequest.nProcessIdsCopied;
+ nProcesses = Request.Data.GetProcessListRequest.nProcessIdsTotal;
if (dwProcessCount >= nProcesses)
{
- memcpy(lpdwProcessList, Request->Data.GetProcessListRequest.ProcessId, nProcesses * sizeof(DWORD));
+ memcpy(lpdwProcessList, Request.Data.GetProcessListRequest.ProcessId, nProcesses * sizeof(DWORD));
}
}
- RtlFreeHeap(RtlGetProcessHeap(), 0, Request);
-
+ CsrFreeCaptureBuffer(CaptureBuffer);
return nProcesses;
}