[KERNEL32]

- It is supposed that user buffers are valid, and if not, access to them is protected with SEH. This fixes almost all of the kernel32_winetest:console tests.
- Add parameter annotations.

svn path=/branches/condrv_restructure/; revision=63772
This commit is contained in:
Hermès Bélusca-Maïto 2014-07-29 15:59:17 +00:00
parent 2ae25e18a8
commit d06d5833ea

View file

@ -118,29 +118,30 @@ IntReadConsole(HANDLE hConsoleInput,
static static
BOOL BOOL
IntGetConsoleInput(HANDLE hConsoleInput, IntGetConsoleInput(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead, OUT LPDWORD lpNumberOfEventsRead,
WORD wFlags, IN WORD wFlags,
BOOLEAN bUnicode) IN BOOLEAN bUnicode)
{ {
BOOL Success;
CONSOLE_API_MESSAGE ApiMessage; CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_GETINPUT GetInputRequest = &ApiMessage.Data.GetInputRequest; PCONSOLE_GETINPUT GetInputRequest = &ApiMessage.Data.GetInputRequest;
PCSR_CAPTURE_BUFFER CaptureBuffer = NULL; PCSR_CAPTURE_BUFFER CaptureBuffer = NULL;
if (lpBuffer == NULL)
{
SetLastError(ERROR_INVALID_ACCESS);
return FALSE;
}
if (!IsConsoleHandle(hConsoleInput)) if (!IsConsoleHandle(hConsoleInput))
{ {
SetLastError(ERROR_INVALID_HANDLE); _SEH2_TRY
{
if (lpNumberOfEventsRead != NULL)
*lpNumberOfEventsRead = 0; *lpNumberOfEventsRead = 0;
SetLastError(ERROR_INVALID_HANDLE);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
}
_SEH2_END;
return FALSE; return FALSE;
} }
@ -191,33 +192,37 @@ IntGetConsoleInput(HANDLE hConsoleInput,
sizeof(*GetInputRequest)); sizeof(*GetInputRequest));
/* Check for success */ /* Check for success */
if (NT_SUCCESS(ApiMessage.Status)) Success = NT_SUCCESS(ApiMessage.Status);
{
/* Return the number of events read */
DPRINT("Events read: %lx\n", GetInputRequest->NumRecords);
if (lpNumberOfEventsRead != NULL) /* Retrieve the results */
_SEH2_TRY
{
DPRINT("Events read: %lx\n", GetInputRequest->NumRecords);
*lpNumberOfEventsRead = GetInputRequest->NumRecords; *lpNumberOfEventsRead = GetInputRequest->NumRecords;
/* Copy into the buffer */ if (Success)
{
RtlCopyMemory(lpBuffer, RtlCopyMemory(lpBuffer,
GetInputRequest->RecordBufPtr, GetInputRequest->RecordBufPtr,
GetInputRequest->NumRecords * sizeof(INPUT_RECORD)); GetInputRequest->NumRecords * sizeof(INPUT_RECORD));
} }
else else
{ {
if (lpNumberOfEventsRead != NULL)
*lpNumberOfEventsRead = 0;
/* Error out */
BaseSetLastNTError(ApiMessage.Status); BaseSetLastNTError(ApiMessage.Status);
} }
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
Success = FALSE;
}
_SEH2_END;
/* Release the capture buffer if needed */ /* Release the capture buffer if needed */
if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer); if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer);
/* Return TRUE or FALSE */ /* Return success status */
return NT_SUCCESS(ApiMessage.Status); return Success;
} }
@ -305,13 +310,14 @@ IntReadConsoleOutput(HANDLE hConsoleOutput,
static static
BOOL BOOL
IntReadConsoleOutputCode(HANDLE hConsoleOutput, IntReadConsoleOutputCode(IN HANDLE hConsoleOutput,
CODE_TYPE CodeType, IN CODE_TYPE CodeType,
PVOID pCode, OUT PVOID pCode,
DWORD nLength, IN DWORD nLength,
COORD dwReadCoord, IN COORD dwReadCoord,
LPDWORD lpNumberOfCodesRead) OUT LPDWORD lpNumberOfCodesRead)
{ {
BOOL Success;
CONSOLE_API_MESSAGE ApiMessage; CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_READOUTPUTCODE ReadOutputCodeRequest = &ApiMessage.Data.ReadOutputCodeRequest; PCONSOLE_READOUTPUTCODE ReadOutputCodeRequest = &ApiMessage.Data.ReadOutputCodeRequest;
PCSR_CAPTURE_BUFFER CaptureBuffer = NULL; PCSR_CAPTURE_BUFFER CaptureBuffer = NULL;
@ -386,30 +392,36 @@ IntReadConsoleOutputCode(HANDLE hConsoleOutput,
sizeof(*ReadOutputCodeRequest)); sizeof(*ReadOutputCodeRequest));
/* Check for success */ /* Check for success */
if (NT_SUCCESS(ApiMessage.Status)) Success = NT_SUCCESS(ApiMessage.Status);
/* Retrieve the results */
_SEH2_TRY
{
*lpNumberOfCodesRead = ReadOutputCodeRequest->NumCodes;
if (Success)
{ {
DWORD NumCodes = ReadOutputCodeRequest->NumCodes;
RtlCopyMemory(pCode, RtlCopyMemory(pCode,
ReadOutputCodeRequest->pCode, ReadOutputCodeRequest->pCode,
NumCodes * CodeSize); ReadOutputCodeRequest->NumCodes * CodeSize);
if (lpNumberOfCodesRead != NULL)
*lpNumberOfCodesRead = NumCodes;
} }
else else
{ {
if (lpNumberOfCodesRead != NULL)
*lpNumberOfCodesRead = 0;
/* Error out */
BaseSetLastNTError(ApiMessage.Status); BaseSetLastNTError(ApiMessage.Status);
} }
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
Success = FALSE;
}
_SEH2_END;
/* Release the capture buffer if needed */ /* Release the capture buffer if needed */
if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer); if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer);
/* Return TRUE or FALSE */ /* Return success status */
return NT_SUCCESS(ApiMessage.Status); return Success;
} }
@ -488,23 +500,18 @@ IntWriteConsole(HANDLE hConsoleOutput,
static static
BOOL BOOL
IntWriteConsoleInput(HANDLE hConsoleInput, IntWriteConsoleInput(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, IN PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsWritten, OUT LPDWORD lpNumberOfEventsWritten,
BOOLEAN bUnicode, IN BOOLEAN bUnicode,
BOOLEAN bAppendToEnd) IN BOOLEAN bAppendToEnd)
{ {
BOOL Success;
CONSOLE_API_MESSAGE ApiMessage; CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_WRITEINPUT WriteInputRequest = &ApiMessage.Data.WriteInputRequest; PCONSOLE_WRITEINPUT WriteInputRequest = &ApiMessage.Data.WriteInputRequest;
PCSR_CAPTURE_BUFFER CaptureBuffer = NULL; PCSR_CAPTURE_BUFFER CaptureBuffer = NULL;
if (lpBuffer == NULL)
{
SetLastError(ERROR_INVALID_ACCESS);
return FALSE;
}
DPRINT("IntWriteConsoleInput: %lx %p\n", nLength, lpNumberOfEventsWritten); DPRINT("IntWriteConsoleInput: %lx %p\n", nLength, lpNumberOfEventsWritten);
/* Set up the data to send to the Console Server */ /* Set up the data to send to the Console Server */
@ -525,10 +532,19 @@ IntWriteConsoleInput(HANDLE hConsoleInput,
WriteInputRequest->RecordBufPtr = WriteInputRequest->RecordStaticBuffer; WriteInputRequest->RecordBufPtr = WriteInputRequest->RecordStaticBuffer;
// CaptureBuffer = NULL; // CaptureBuffer = NULL;
_SEH2_TRY
{
RtlCopyMemory(WriteInputRequest->RecordBufPtr, RtlCopyMemory(WriteInputRequest->RecordBufPtr,
lpBuffer, lpBuffer,
nLength * sizeof(INPUT_RECORD)); nLength * sizeof(INPUT_RECORD));
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
return FALSE;
}
_SEH2_END;
}
else else
{ {
ULONG Size = nLength * sizeof(INPUT_RECORD); ULONG Size = nLength * sizeof(INPUT_RECORD);
@ -555,29 +571,30 @@ IntWriteConsoleInput(HANDLE hConsoleInput,
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepWriteConsoleInput), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepWriteConsoleInput),
sizeof(*WriteInputRequest)); sizeof(*WriteInputRequest));
/* Check for success */
Success = NT_SUCCESS(ApiMessage.Status);
/* Release the capture buffer if needed */ /* Release the capture buffer if needed */
if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer); if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer);
/* Check for success */ /* Retrieve the results */
if (NT_SUCCESS(ApiMessage.Status)) _SEH2_TRY
{ {
/* Return the number of events written */
DPRINT("Events written: %lx\n", WriteInputRequest->NumRecords); DPRINT("Events written: %lx\n", WriteInputRequest->NumRecords);
if (lpNumberOfEventsWritten != NULL)
*lpNumberOfEventsWritten = WriteInputRequest->NumRecords; *lpNumberOfEventsWritten = WriteInputRequest->NumRecords;
}
else
{
if (lpNumberOfEventsWritten != NULL)
*lpNumberOfEventsWritten = 0;
/* Error out */ if (!Success)
BaseSetLastNTError(ApiMessage.Status); BaseSetLastNTError(ApiMessage.Status);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
Success = FALSE;
}
_SEH2_END;
/* Return TRUE or FALSE */ /* Return success status */
return NT_SUCCESS(ApiMessage.Status); return Success;
} }
@ -661,24 +678,19 @@ IntWriteConsoleOutput(HANDLE hConsoleOutput,
static static
BOOL BOOL
IntWriteConsoleOutputCode(HANDLE hConsoleOutput, IntWriteConsoleOutputCode(IN HANDLE hConsoleOutput,
CODE_TYPE CodeType, IN CODE_TYPE CodeType,
CONST VOID *pCode, IN CONST VOID *pCode,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfCodesWritten) OUT LPDWORD lpNumberOfCodesWritten)
{ {
BOOL Success;
CONSOLE_API_MESSAGE ApiMessage; CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest = &ApiMessage.Data.WriteOutputCodeRequest; PCONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest = &ApiMessage.Data.WriteOutputCodeRequest;
PCSR_CAPTURE_BUFFER CaptureBuffer = NULL; PCSR_CAPTURE_BUFFER CaptureBuffer = NULL;
ULONG SizeBytes, CodeSize; ULONG SizeBytes, CodeSize;
if (pCode == NULL)
{
SetLastError(ERROR_INVALID_ACCESS);
return FALSE;
}
if ( (CodeType != CODE_ASCII ) && if ( (CodeType != CODE_ASCII ) &&
(CodeType != CODE_UNICODE ) && (CodeType != CODE_UNICODE ) &&
(CodeType != CODE_ATTRIBUTE) ) (CodeType != CODE_ATTRIBUTE) )
@ -724,10 +736,19 @@ IntWriteConsoleOutputCode(HANDLE hConsoleOutput,
WriteOutputCodeRequest->pCode = WriteOutputCodeRequest->CodeStaticBuffer; WriteOutputCodeRequest->pCode = WriteOutputCodeRequest->CodeStaticBuffer;
// CaptureBuffer = NULL; // CaptureBuffer = NULL;
_SEH2_TRY
{
RtlCopyMemory(WriteOutputCodeRequest->pCode, RtlCopyMemory(WriteOutputCodeRequest->pCode,
pCode, pCode,
SizeBytes); SizeBytes);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
return FALSE;
}
_SEH2_END;
}
else else
{ {
/* Allocate a Capture Buffer */ /* Allocate a Capture Buffer */
@ -752,38 +773,42 @@ IntWriteConsoleOutputCode(HANDLE hConsoleOutput,
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepWriteConsoleOutputString), CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepWriteConsoleOutputString),
sizeof(*WriteOutputCodeRequest)); sizeof(*WriteOutputCodeRequest));
/* Check for success */
Success = NT_SUCCESS(ApiMessage.Status);
/* Release the capture buffer if needed */ /* Release the capture buffer if needed */
if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer); if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer);
/* Check for success */ /* Retrieve the results */
if (NT_SUCCESS(ApiMessage.Status)) _SEH2_TRY
{ {
if (lpNumberOfCodesWritten != NULL)
*lpNumberOfCodesWritten = WriteOutputCodeRequest->NumCodes; *lpNumberOfCodesWritten = WriteOutputCodeRequest->NumCodes;
}
else
{
if (lpNumberOfCodesWritten != NULL)
*lpNumberOfCodesWritten = 0;
/* Error out */ if (!Success)
BaseSetLastNTError(ApiMessage.Status); BaseSetLastNTError(ApiMessage.Status);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
Success = FALSE;
}
_SEH2_END;
/* Return TRUE or FALSE */ /* Return success status */
return NT_SUCCESS(ApiMessage.Status); return Success;
} }
static static
BOOL BOOL
IntFillConsoleOutputCode(HANDLE hConsoleOutput, IntFillConsoleOutputCode(IN HANDLE hConsoleOutput,
CODE_TYPE CodeType, IN CODE_TYPE CodeType,
CODE_ELEMENT Code, IN CODE_ELEMENT Code,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfCodesWritten) OUT LPDWORD lpNumberOfCodesWritten)
{ {
BOOL Success;
CONSOLE_API_MESSAGE ApiMessage; CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_FILLOUTPUTCODE FillOutputRequest = &ApiMessage.Data.FillOutputRequest; PCONSOLE_FILLOUTPUTCODE FillOutputRequest = &ApiMessage.Data.FillOutputRequest;
@ -812,21 +837,25 @@ IntFillConsoleOutputCode(HANDLE hConsoleOutput,
sizeof(*FillOutputRequest)); sizeof(*FillOutputRequest));
/* Check for success */ /* Check for success */
if (NT_SUCCESS(ApiMessage.Status)) Success = NT_SUCCESS(ApiMessage.Status);
{
if (lpNumberOfCodesWritten != NULL)
*lpNumberOfCodesWritten = FillOutputRequest->NumCodes;
}
else
{
if (lpNumberOfCodesWritten != NULL)
*lpNumberOfCodesWritten = 0;
/* Retrieve the results */
_SEH2_TRY
{
*lpNumberOfCodesWritten = FillOutputRequest->NumCodes;
if (!Success)
BaseSetLastNTError(ApiMessage.Status); BaseSetLastNTError(ApiMessage.Status);
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
Success = FALSE;
}
_SEH2_END;
/* Return TRUE or FALSE */ /* Return success status */
return NT_SUCCESS(ApiMessage.Status); return Success;
} }
@ -887,10 +916,10 @@ ReadConsoleA(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
PeekConsoleInputW(HANDLE hConsoleInput, PeekConsoleInputW(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead) OUT LPDWORD lpNumberOfEventsRead)
{ {
return IntGetConsoleInput(hConsoleInput, return IntGetConsoleInput(hConsoleInput,
lpBuffer, lpBuffer,
@ -908,10 +937,10 @@ PeekConsoleInputW(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
PeekConsoleInputA(HANDLE hConsoleInput, PeekConsoleInputA(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead) OUT LPDWORD lpNumberOfEventsRead)
{ {
return IntGetConsoleInput(hConsoleInput, return IntGetConsoleInput(hConsoleInput,
lpBuffer, lpBuffer,
@ -929,10 +958,10 @@ PeekConsoleInputA(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleInputW(HANDLE hConsoleInput, ReadConsoleInputW(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead) OUT LPDWORD lpNumberOfEventsRead)
{ {
return IntGetConsoleInput(hConsoleInput, return IntGetConsoleInput(hConsoleInput,
lpBuffer, lpBuffer,
@ -950,10 +979,10 @@ ReadConsoleInputW(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleInputA(HANDLE hConsoleInput, ReadConsoleInputA(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead) OUT LPDWORD lpNumberOfEventsRead)
{ {
return IntGetConsoleInput(hConsoleInput, return IntGetConsoleInput(hConsoleInput,
lpBuffer, lpBuffer,
@ -971,11 +1000,11 @@ ReadConsoleInputA(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleInputExW(HANDLE hConsoleInput, ReadConsoleInputExW(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead, OUT LPDWORD lpNumberOfEventsRead,
WORD wFlags) IN WORD wFlags)
{ {
return IntGetConsoleInput(hConsoleInput, return IntGetConsoleInput(hConsoleInput,
lpBuffer, lpBuffer,
@ -993,11 +1022,11 @@ ReadConsoleInputExW(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleInputExA(HANDLE hConsoleInput, ReadConsoleInputExA(IN HANDLE hConsoleInput,
PINPUT_RECORD lpBuffer, OUT PINPUT_RECORD lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsRead, OUT LPDWORD lpNumberOfEventsRead,
WORD wFlags) IN WORD wFlags)
{ {
return IntGetConsoleInput(hConsoleInput, return IntGetConsoleInput(hConsoleInput,
lpBuffer, lpBuffer,
@ -1059,11 +1088,11 @@ ReadConsoleOutputA(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleOutputCharacterW(HANDLE hConsoleOutput, ReadConsoleOutputCharacterW(IN HANDLE hConsoleOutput,
LPWSTR lpCharacter, OUT LPWSTR lpCharacter,
DWORD nLength, IN DWORD nLength,
COORD dwReadCoord, IN COORD dwReadCoord,
LPDWORD lpNumberOfCharsRead) OUT LPDWORD lpNumberOfCharsRead)
{ {
return IntReadConsoleOutputCode(hConsoleOutput, return IntReadConsoleOutputCode(hConsoleOutput,
CODE_UNICODE, CODE_UNICODE,
@ -1081,11 +1110,11 @@ ReadConsoleOutputCharacterW(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleOutputCharacterA(HANDLE hConsoleOutput, ReadConsoleOutputCharacterA(IN HANDLE hConsoleOutput,
LPSTR lpCharacter, OUT LPSTR lpCharacter,
DWORD nLength, IN DWORD nLength,
COORD dwReadCoord, IN COORD dwReadCoord,
LPDWORD lpNumberOfCharsRead) OUT LPDWORD lpNumberOfCharsRead)
{ {
return IntReadConsoleOutputCode(hConsoleOutput, return IntReadConsoleOutputCode(hConsoleOutput,
CODE_ASCII, CODE_ASCII,
@ -1103,11 +1132,11 @@ ReadConsoleOutputCharacterA(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
ReadConsoleOutputAttribute(HANDLE hConsoleOutput, ReadConsoleOutputAttribute(IN HANDLE hConsoleOutput,
LPWORD lpAttribute, OUT LPWORD lpAttribute,
DWORD nLength, IN DWORD nLength,
COORD dwReadCoord, IN COORD dwReadCoord,
LPDWORD lpNumberOfAttrsRead) OUT LPDWORD lpNumberOfAttrsRead)
{ {
return IntReadConsoleOutputCode(hConsoleOutput, return IntReadConsoleOutputCode(hConsoleOutput,
CODE_ATTRIBUTE, CODE_ATTRIBUTE,
@ -1173,10 +1202,10 @@ WriteConsoleA(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleInputW(HANDLE hConsoleInput, WriteConsoleInputW(IN HANDLE hConsoleInput,
CONST INPUT_RECORD *lpBuffer, IN CONST INPUT_RECORD *lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsWritten) OUT LPDWORD lpNumberOfEventsWritten)
{ {
return IntWriteConsoleInput(hConsoleInput, return IntWriteConsoleInput(hConsoleInput,
(PINPUT_RECORD)lpBuffer, (PINPUT_RECORD)lpBuffer,
@ -1194,10 +1223,10 @@ WriteConsoleInputW(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleInputA(HANDLE hConsoleInput, WriteConsoleInputA(IN HANDLE hConsoleInput,
CONST INPUT_RECORD *lpBuffer, IN CONST INPUT_RECORD *lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsWritten) OUT LPDWORD lpNumberOfEventsWritten)
{ {
return IntWriteConsoleInput(hConsoleInput, return IntWriteConsoleInput(hConsoleInput,
(PINPUT_RECORD)lpBuffer, (PINPUT_RECORD)lpBuffer,
@ -1215,10 +1244,10 @@ WriteConsoleInputA(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleInputVDMW(HANDLE hConsoleInput, WriteConsoleInputVDMW(IN HANDLE hConsoleInput,
CONST INPUT_RECORD *lpBuffer, IN CONST INPUT_RECORD *lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsWritten) OUT LPDWORD lpNumberOfEventsWritten)
{ {
return IntWriteConsoleInput(hConsoleInput, return IntWriteConsoleInput(hConsoleInput,
(PINPUT_RECORD)lpBuffer, (PINPUT_RECORD)lpBuffer,
@ -1236,10 +1265,10 @@ WriteConsoleInputVDMW(HANDLE hConsoleInput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleInputVDMA(HANDLE hConsoleInput, WriteConsoleInputVDMA(IN HANDLE hConsoleInput,
CONST INPUT_RECORD *lpBuffer, IN CONST INPUT_RECORD *lpBuffer,
DWORD nLength, IN DWORD nLength,
LPDWORD lpNumberOfEventsWritten) OUT LPDWORD lpNumberOfEventsWritten)
{ {
return IntWriteConsoleInput(hConsoleInput, return IntWriteConsoleInput(hConsoleInput,
(PINPUT_RECORD)lpBuffer, (PINPUT_RECORD)lpBuffer,
@ -1301,11 +1330,11 @@ WriteConsoleOutputA(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleOutputCharacterW(HANDLE hConsoleOutput, WriteConsoleOutputCharacterW(IN HANDLE hConsoleOutput,
LPCWSTR lpCharacter, IN LPCWSTR lpCharacter,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfCharsWritten) OUT LPDWORD lpNumberOfCharsWritten)
{ {
return IntWriteConsoleOutputCode(hConsoleOutput, return IntWriteConsoleOutputCode(hConsoleOutput,
CODE_UNICODE, CODE_UNICODE,
@ -1323,11 +1352,11 @@ WriteConsoleOutputCharacterW(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleOutputCharacterA(HANDLE hConsoleOutput, WriteConsoleOutputCharacterA(IN HANDLE hConsoleOutput,
LPCSTR lpCharacter, IN LPCSTR lpCharacter,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfCharsWritten) OUT LPDWORD lpNumberOfCharsWritten)
{ {
return IntWriteConsoleOutputCode(hConsoleOutput, return IntWriteConsoleOutputCode(hConsoleOutput,
CODE_ASCII, CODE_ASCII,
@ -1345,11 +1374,11 @@ WriteConsoleOutputCharacterA(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
WriteConsoleOutputAttribute(HANDLE hConsoleOutput, WriteConsoleOutputAttribute(IN HANDLE hConsoleOutput,
CONST WORD *lpAttribute, IN CONST WORD *lpAttribute,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfAttrsWritten) OUT LPDWORD lpNumberOfAttrsWritten)
{ {
return IntWriteConsoleOutputCode(hConsoleOutput, return IntWriteConsoleOutputCode(hConsoleOutput,
CODE_ATTRIBUTE, CODE_ATTRIBUTE,
@ -1367,11 +1396,11 @@ WriteConsoleOutputAttribute(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
FillConsoleOutputCharacterW(HANDLE hConsoleOutput, FillConsoleOutputCharacterW(IN HANDLE hConsoleOutput,
WCHAR cCharacter, IN WCHAR cCharacter,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfCharsWritten) OUT LPDWORD lpNumberOfCharsWritten)
{ {
CODE_ELEMENT Code; CODE_ELEMENT Code;
Code.UnicodeChar = cCharacter; Code.UnicodeChar = cCharacter;
@ -1391,10 +1420,10 @@ FillConsoleOutputCharacterW(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
FillConsoleOutputCharacterA(HANDLE hConsoleOutput, FillConsoleOutputCharacterA(IN HANDLE hConsoleOutput,
CHAR cCharacter, IN CHAR cCharacter,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfCharsWritten) LPDWORD lpNumberOfCharsWritten)
{ {
CODE_ELEMENT Code; CODE_ELEMENT Code;
@ -1415,11 +1444,11 @@ FillConsoleOutputCharacterA(HANDLE hConsoleOutput,
*/ */
BOOL BOOL
WINAPI WINAPI
FillConsoleOutputAttribute(HANDLE hConsoleOutput, FillConsoleOutputAttribute(IN HANDLE hConsoleOutput,
WORD wAttribute, IN WORD wAttribute,
DWORD nLength, IN DWORD nLength,
COORD dwWriteCoord, IN COORD dwWriteCoord,
LPDWORD lpNumberOfAttrsWritten) OUT LPDWORD lpNumberOfAttrsWritten)
{ {
CODE_ELEMENT Code; CODE_ELEMENT Code;
Code.Attribute = wAttribute; Code.Attribute = wAttribute;