[KERNEL32]

- Add some NULL checks.
- Use new structures and api indices namings.

svn path=/branches/ros-csrss/; revision=57726
This commit is contained in:
Hermès Bélusca-Maïto 2012-11-17 23:45:14 +00:00
parent 1568822b7c
commit 3a0d4c3269
2 changed files with 98 additions and 85 deletions

View file

@ -864,6 +864,12 @@ GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage; CONSOLE_API_MESSAGE ApiMessage;
if (lpConsoleScreenBufferInfo == NULL)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
ApiMessage.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput; ApiMessage.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput;
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
@ -954,8 +960,8 @@ WINAPI
GetNumberOfConsoleInputEvents(HANDLE hConsoleInput, GetNumberOfConsoleInputEvents(HANDLE hConsoleInput,
LPDWORD lpNumberOfEvents) LPDWORD lpNumberOfEvents)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
if (lpNumberOfEvents == NULL) if (lpNumberOfEvents == NULL)
{ {
@ -963,19 +969,19 @@ GetNumberOfConsoleInputEvents(HANDLE hConsoleInput,
return FALSE; return FALSE;
} }
Request.Data.GetNumInputEventsRequest.ConsoleHandle = hConsoleInput; ApiMessage.Data.GetNumInputEventsRequest.ConsoleHandle = hConsoleInput;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_NUM_INPUT_EVENTS), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetNumberOfInputEvents),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_GET_NUM_INPUT_EVENTS));
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;
} }
*lpNumberOfEvents = Request.Data.GetNumInputEventsRequest.NumInputEvents; *lpNumberOfEvents = ApiMessage.Data.GetNumInputEventsRequest.NumInputEvents;
return TRUE; return TRUE;
} }
@ -1093,16 +1099,16 @@ BOOL
WINAPI WINAPI
SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput) SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
Request.Data.SetScreenBufferRequest.OutputHandle = hConsoleOutput; ApiMessage.Data.SetScreenBufferRequest.OutputHandle = hConsoleOutput;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_SCREEN_BUFFER), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetActiveScreenBuffer),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_SET_SCREEN_BUFFER));
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;
@ -1121,16 +1127,16 @@ BOOL
WINAPI WINAPI
FlushConsoleInputBuffer(HANDLE hConsoleInput) FlushConsoleInputBuffer(HANDLE hConsoleInput)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
Request.Data.FlushInputBufferRequest.ConsoleInput = hConsoleInput; ApiMessage.Data.FlushInputBufferRequest.ConsoleInput = hConsoleInput;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, FLUSH_INPUT_BUFFER), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepFlushInputBuffer),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_FLUSH_INPUT_BUFFER));
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;
@ -1150,17 +1156,17 @@ WINAPI
SetConsoleScreenBufferSize(HANDLE hConsoleOutput, SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
COORD dwSize) COORD dwSize)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
Request.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput; ApiMessage.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput;
Request.Data.SetScreenBufferSize.Size = dwSize; ApiMessage.Data.SetScreenBufferSize.Size = dwSize;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_SCREEN_BUFFER_SIZE), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetScreenBufferSize),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_SET_SCREEN_BUFFER_SIZE));
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;
@ -1209,32 +1215,33 @@ IntScrollConsoleScreenBuffer(HANDLE hConsoleOutput,
const CHAR_INFO *lpFill, const CHAR_INFO *lpFill,
BOOL bUnicode) BOOL bUnicode)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest = &ApiMessage.Data.ScrollConsoleScreenBufferRequest;
Request.Data.ScrollConsoleScreenBufferRequest.ConsoleHandle = hConsoleOutput; ScrollConsoleScreenBufferRequest->ConsoleHandle = hConsoleOutput;
Request.Data.ScrollConsoleScreenBufferRequest.Unicode = bUnicode; ScrollConsoleScreenBufferRequest->Unicode = bUnicode;
Request.Data.ScrollConsoleScreenBufferRequest.ScrollRectangle = *lpScrollRectangle; ScrollConsoleScreenBufferRequest->ScrollRectangle = *lpScrollRectangle;
if (lpClipRectangle != NULL) if (lpClipRectangle != NULL)
{ {
Request.Data.ScrollConsoleScreenBufferRequest.UseClipRectangle = TRUE; ScrollConsoleScreenBufferRequest->UseClipRectangle = TRUE;
Request.Data.ScrollConsoleScreenBufferRequest.ClipRectangle = *lpClipRectangle; ScrollConsoleScreenBufferRequest->ClipRectangle = *lpClipRectangle;
} }
else else
{ {
Request.Data.ScrollConsoleScreenBufferRequest.UseClipRectangle = FALSE; ScrollConsoleScreenBufferRequest->UseClipRectangle = FALSE;
} }
Request.Data.ScrollConsoleScreenBufferRequest.DestinationOrigin = dwDestinationOrigin; ScrollConsoleScreenBufferRequest->DestinationOrigin = dwDestinationOrigin;
Request.Data.ScrollConsoleScreenBufferRequest.Fill = *lpFill; ScrollConsoleScreenBufferRequest->Fill = *lpFill;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SCROLL_CONSOLE_SCREEN_BUFFER), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepScrollScreenBuffer),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER));
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;
@ -1315,17 +1322,17 @@ WINAPI
SetConsoleTextAttribute(HANDLE hConsoleOutput, SetConsoleTextAttribute(HANDLE hConsoleOutput,
WORD wAttributes) WORD wAttributes)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
Request.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput; ApiMessage.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput;
Request.Data.SetAttribRequest.Attrib = wAttributes; ApiMessage.Data.SetAttribRequest.Attrib = wAttributes;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_ATTRIB), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetTextAttribute),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_SET_ATTRIB));
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;
@ -1544,8 +1551,6 @@ GetConsoleTitleW(LPWSTR lpConsoleTitle,
/*-------------------------------------------------------------- /*--------------------------------------------------------------
* GetConsoleTitleA * GetConsoleTitleA
* *
* 19990306 EA
*
* @implemented * @implemented
*/ */
DWORD DWORD
@ -1605,8 +1610,6 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle)
/*-------------------------------------------------------------- /*--------------------------------------------------------------
* SetConsoleTitleA * SetConsoleTitleA
* *
* 19990204 EA Added
*
* @implemented * @implemented
*/ */
BOOL BOOL
@ -1641,32 +1644,33 @@ CreateConsoleScreenBuffer(DWORD dwDesiredAccess,
DWORD dwFlags, DWORD dwFlags,
LPVOID lpScreenBufferData) LPVOID lpScreenBufferData)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
if (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE) if ( (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE)) ||
|| dwShareMode & ~(FILE_SHARE_READ | FILE_SHARE_WRITE) (dwShareMode & ~(FILE_SHARE_READ | FILE_SHARE_WRITE)) ||
|| dwFlags != CONSOLE_TEXTMODE_BUFFER) (dwFlags != CONSOLE_TEXTMODE_BUFFER) )
{ {
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
Request.Data.CreateScreenBufferRequest.Access = dwDesiredAccess; ApiMessage.Data.CreateScreenBufferRequest.Access = dwDesiredAccess;
Request.Data.CreateScreenBufferRequest.ShareMode = dwShareMode; ApiMessage.Data.CreateScreenBufferRequest.ShareMode = dwShareMode;
Request.Data.CreateScreenBufferRequest.Inheritable = ApiMessage.Data.CreateScreenBufferRequest.Inheritable =
lpSecurityAttributes ? lpSecurityAttributes->bInheritHandle : FALSE; (lpSecurityAttributes ? lpSecurityAttributes->bInheritHandle : FALSE);
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, CREATE_SCREEN_BUFFER), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepCreateScreenBuffer),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_CREATE_SCREEN_BUFFER));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
return Request.Data.CreateScreenBufferRequest.OutputHandle;
return ApiMessage.Data.CreateScreenBufferRequest.OutputHandle;
} }
@ -1842,18 +1846,26 @@ BOOL
WINAPI WINAPI
GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo) GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo)
{ {
CSR_API_MESSAGE Request; NTSTATUS Status;
NTSTATUS Status = CsrClientCallServer(&Request, CONSOLE_API_MESSAGE ApiMessage;
NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_SELECTION_INFO), if (lpConsoleSelectionInfo == NULL)
sizeof(CSR_API_MESSAGE)); {
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL,
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetSelectionInfo),
sizeof(CSRSS_GET_CONSOLE_SELECTION_INFO));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return FALSE; return FALSE;
} }
*lpConsoleSelectionInfo = Request.Data.GetConsoleSelectionInfo.Info; *lpConsoleSelectionInfo = ApiMessage.Data.GetConsoleSelectionInfo.Info;
return TRUE; return TRUE;
} }
@ -1871,6 +1883,7 @@ AttachConsole(DWORD dwProcessId)
return TRUE; return TRUE;
} }
/*-------------------------------------------------------------- /*--------------------------------------------------------------
* GetConsoleWindow * GetConsoleWindow
* *
@ -1880,20 +1893,20 @@ HWND
WINAPI WINAPI
GetConsoleWindow(VOID) GetConsoleWindow(VOID)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_WINDOW), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetConsoleWindow),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_GET_CONSOLE_WINDOW));
if (!NT_SUCCESS(Status ) || !NT_SUCCESS(Status = Request.Status)) if (!NT_SUCCESS(Status ) || !NT_SUCCESS(Status = ApiMessage.Status))
{ {
BaseSetLastNTError(Status); BaseSetLastNTError(Status);
return (HWND) NULL; return (HWND) NULL;
} }
return Request.Data.GetConsoleWindowRequest.WindowHandle; return ApiMessage.Data.GetConsoleWindowRequest.WindowHandle;
} }
@ -1906,16 +1919,16 @@ BOOL
WINAPI WINAPI
SetConsoleIcon(HICON hicon) SetConsoleIcon(HICON hicon)
{ {
CSR_API_MESSAGE Request;
NTSTATUS Status; NTSTATUS Status;
CONSOLE_API_MESSAGE ApiMessage;
Request.Data.SetConsoleIconRequest.WindowIcon = hicon; ApiMessage.Data.SetConsoleIconRequest.WindowIcon = hicon;
Status = CsrClientCallServer(&Request, Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL, NULL,
CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_ICON), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetIcon),
sizeof(CSR_API_MESSAGE)); sizeof(CSRSS_SET_CONSOLE_ICON));
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;

View file

@ -413,17 +413,17 @@ typedef struct
typedef struct typedef struct
{ {
HANDLE ConsoleHandle; HANDLE ConsoleHandle;
DWORD State; DWORD State;
} CSRSS_CONSOLE_HW_STATE, *PCSRSS_CONSOLE_HW_STATE; } CSRSS_CONSOLE_HW_STATE, *PCSRSS_CONSOLE_HW_STATE;
typedef struct typedef struct
{ {
HWND WindowHandle; HWND WindowHandle;
} CSRSS_GET_CONSOLE_WINDOW, *PCSRSS_GET_CONSOLE_WINDOW; } CSRSS_GET_CONSOLE_WINDOW, *PCSRSS_GET_CONSOLE_WINDOW;
typedef struct typedef struct
{ {
HICON WindowIcon; HICON WindowIcon;
} CSRSS_SET_CONSOLE_ICON, *PCSRSS_SET_CONSOLE_ICON; } CSRSS_SET_CONSOLE_ICON, *PCSRSS_SET_CONSOLE_ICON;