mirror of
https://github.com/reactos/reactos.git
synced 2025-05-13 14:20:31 +00:00
[KERNEL32][CONSRV]
Implement WriteConsoleInputVDMA/W, its only purpose being putting console input events at the beginning of the console input event list instead of putting them at the end, as it is done with WriteConsoleInputA/W . svn path=/trunk/; revision=60756
This commit is contained in:
parent
077b7ac04d
commit
ccdf36a380
7 changed files with 94 additions and 39 deletions
|
@ -804,38 +804,6 @@ VerifyConsoleIoHandle(HANDLE Handle)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
DWORD
|
||||
WINAPI
|
||||
WriteConsoleInputVDMA(DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2,
|
||||
DWORD Unknown3)
|
||||
{
|
||||
DPRINT1("WriteConsoleInputVDMA(0x%x, 0x%x, 0x%x, 0x%x) UNIMPLEMENTED!\n", Unknown0, Unknown1, Unknown2, Unknown3);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
DWORD
|
||||
WINAPI
|
||||
WriteConsoleInputVDMW(DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2,
|
||||
DWORD Unknown3)
|
||||
{
|
||||
DPRINT1("WriteConsoleInputVDMW(0x%x, 0x%x, 0x%x, 0x%x) UNIMPLEMENTED!\n", Unknown0, Unknown1, Unknown2, Unknown3);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented (Undocumented)
|
||||
*/
|
||||
|
|
|
@ -460,7 +460,8 @@ IntWriteConsoleInput(HANDLE hConsoleInput,
|
|||
PINPUT_RECORD lpBuffer,
|
||||
DWORD nLength,
|
||||
LPDWORD lpNumberOfEventsWritten,
|
||||
BOOL bUnicode)
|
||||
BOOL bUnicode,
|
||||
BOOL bAppendToEnd)
|
||||
{
|
||||
CONSOLE_API_MESSAGE ApiMessage;
|
||||
PCONSOLE_WRITEINPUT WriteInputRequest = &ApiMessage.Data.WriteInputRequest;
|
||||
|
@ -488,8 +489,9 @@ IntWriteConsoleInput(HANDLE hConsoleInput,
|
|||
|
||||
/* Set up the data to send to the Console Server */
|
||||
WriteInputRequest->InputHandle = hConsoleInput;
|
||||
WriteInputRequest->Unicode = bUnicode;
|
||||
WriteInputRequest->Length = nLength;
|
||||
WriteInputRequest->Unicode = bUnicode;
|
||||
WriteInputRequest->AppendToEnd = bAppendToEnd;
|
||||
|
||||
/* Call the server */
|
||||
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
||||
|
@ -1086,6 +1088,7 @@ WriteConsoleInputW(HANDLE hConsoleInput,
|
|||
(PINPUT_RECORD)lpBuffer,
|
||||
nLength,
|
||||
lpNumberOfEventsWritten,
|
||||
TRUE,
|
||||
TRUE);
|
||||
}
|
||||
|
||||
|
@ -1106,6 +1109,49 @@ WriteConsoleInputA(HANDLE hConsoleInput,
|
|||
(PINPUT_RECORD)lpBuffer,
|
||||
nLength,
|
||||
lpNumberOfEventsWritten,
|
||||
FALSE,
|
||||
TRUE);
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
* WriteConsoleInputVDMW
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL
|
||||
WINAPI
|
||||
WriteConsoleInputVDMW(HANDLE hConsoleInput,
|
||||
CONST INPUT_RECORD *lpBuffer,
|
||||
DWORD nLength,
|
||||
LPDWORD lpNumberOfEventsWritten)
|
||||
{
|
||||
return IntWriteConsoleInput(hConsoleInput,
|
||||
(PINPUT_RECORD)lpBuffer,
|
||||
nLength,
|
||||
lpNumberOfEventsWritten,
|
||||
TRUE,
|
||||
FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
* WriteConsoleInputVDMA
|
||||
*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL
|
||||
WINAPI
|
||||
WriteConsoleInputVDMA(HANDLE hConsoleInput,
|
||||
CONST INPUT_RECORD *lpBuffer,
|
||||
DWORD nLength,
|
||||
LPDWORD lpNumberOfEventsWritten)
|
||||
{
|
||||
return IntWriteConsoleInput(hConsoleInput,
|
||||
(PINPUT_RECORD)lpBuffer,
|
||||
nLength,
|
||||
lpNumberOfEventsWritten,
|
||||
FALSE,
|
||||
FALSE);
|
||||
}
|
||||
|
||||
|
|
|
@ -616,6 +616,22 @@ WriteConsoleInputW(
|
|||
_In_ DWORD nLength,
|
||||
_Out_ LPDWORD lpNumberOfEventsWritten);
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
WriteConsoleInputVDMA(
|
||||
_In_ HANDLE hConsoleInput,
|
||||
_In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
|
||||
_In_ DWORD nLength,
|
||||
_Out_ LPDWORD lpNumberOfEventsWritten);
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
WriteConsoleInputVDMW(
|
||||
_In_ HANDLE hConsoleInput,
|
||||
_In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
|
||||
_In_ DWORD nLength,
|
||||
_Out_ LPDWORD lpNumberOfEventsWritten);
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
WriteConsoleOutputA(
|
||||
|
|
|
@ -492,9 +492,10 @@ typedef struct
|
|||
typedef struct
|
||||
{
|
||||
HANDLE InputHandle;
|
||||
BOOL Unicode;
|
||||
DWORD Length;
|
||||
INPUT_RECORD* InputRecord;
|
||||
BOOL Unicode;
|
||||
BOOL AppendToEnd;
|
||||
} CONSOLE_WRITEINPUT, *PCONSOLE_WRITEINPUT;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -60,8 +60,9 @@ ConioInputEventToAnsi(PCONSOLE Console, PINPUT_RECORD InputEvent)
|
|||
}
|
||||
|
||||
NTSTATUS FASTCALL
|
||||
ConioProcessInputEvent(PCONSOLE Console,
|
||||
PINPUT_RECORD InputEvent)
|
||||
ConioAddInputEvent(PCONSOLE Console,
|
||||
PINPUT_RECORD InputEvent,
|
||||
BOOLEAN AppendToEnd)
|
||||
{
|
||||
ConsoleInput *ConInRec;
|
||||
|
||||
|
@ -97,7 +98,17 @@ ConioProcessInputEvent(PCONSOLE Console,
|
|||
if (ConInRec == NULL) return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
ConInRec->InputEvent = *InputEvent;
|
||||
InsertTailList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
|
||||
|
||||
if (AppendToEnd)
|
||||
{
|
||||
/* Append the event to the end of the queue */
|
||||
InsertTailList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Append the event to the beginning of the queue */
|
||||
InsertHeadList(&Console->InputBuffer.InputEvents, &ConInRec->ListEntry);
|
||||
}
|
||||
|
||||
SetEvent(Console->InputBuffer.ActiveEvent);
|
||||
CsrNotifyWait(&Console->InputBuffer.ReadWaitQueue,
|
||||
|
@ -112,6 +123,13 @@ ConioProcessInputEvent(PCONSOLE Console,
|
|||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS FASTCALL
|
||||
ConioProcessInputEvent(PCONSOLE Console,
|
||||
PINPUT_RECORD InputEvent)
|
||||
{
|
||||
return ConioAddInputEvent(Console, InputEvent, TRUE);
|
||||
}
|
||||
|
||||
VOID FASTCALL
|
||||
PurgeInputBuffer(PCONSOLE Console)
|
||||
{
|
||||
|
@ -429,6 +447,7 @@ NTSTATUS NTAPI
|
|||
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||
IN BOOLEAN Unicode,
|
||||
IN BOOLEAN AppendToEnd,
|
||||
IN PINPUT_RECORD InputRecord,
|
||||
IN ULONG NumEventsToWrite,
|
||||
OUT PULONG NumEventsWritten OPTIONAL)
|
||||
|
@ -457,7 +476,7 @@ ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
|||
&AsciiChar);
|
||||
}
|
||||
|
||||
Status = ConioProcessInputEvent(Console, InputRecord++);
|
||||
Status = ConioAddInputEvent(Console, InputRecord++, AppendToEnd);
|
||||
}
|
||||
|
||||
if (NumEventsWritten) *NumEventsWritten = i;
|
||||
|
|
|
@ -391,6 +391,7 @@ NTSTATUS NTAPI
|
|||
ConDrvWriteConsoleInput(IN PCONSOLE Console,
|
||||
IN PCONSOLE_INPUT_BUFFER InputBuffer,
|
||||
IN BOOLEAN Unicode,
|
||||
IN BOOLEAN AppendToEnd,
|
||||
IN PINPUT_RECORD InputRecord,
|
||||
IN ULONG NumEventsToWrite,
|
||||
OUT PULONG NumEventsWritten OPTIONAL);
|
||||
|
@ -420,6 +421,7 @@ CSR_API(SrvWriteConsoleInput)
|
|||
Status = ConDrvWriteConsoleInput(InputBuffer->Header.Console,
|
||||
InputBuffer,
|
||||
WriteInputRequest->Unicode,
|
||||
WriteInputRequest->AppendToEnd,
|
||||
WriteInputRequest->InputRecord,
|
||||
WriteInputRequest->Length,
|
||||
&NumEventsWritten);
|
||||
|
|
|
@ -348,6 +348,9 @@ ConDrvConsoleProcessCtrlEvent(IN PCONSOLE Console,
|
|||
|
||||
/* coninput.c */
|
||||
VOID NTAPI ConioProcessKey(PCONSOLE Console, MSG* msg);
|
||||
NTSTATUS FASTCALL ConioAddInputEvent(PCONSOLE Console,
|
||||
PINPUT_RECORD InputEvent,
|
||||
BOOLEAN AppendToEnd);
|
||||
NTSTATUS FASTCALL ConioProcessInputEvent(PCONSOLE Console,
|
||||
PINPUT_RECORD InputEvent);
|
||||
|
||||
|
|
Loading…
Reference in a new issue