static VOID ConioInputEventToUnicode(PCONSOLE Console, PINPUT_RECORD InputEvent) { if (InputEvent->EventType == KEY_EVENT) { CHAR AsciiChar = InputEvent->Event.KeyEvent.uChar.AsciiChar; InputEvent->Event.KeyEvent.uChar.AsciiChar = 0; ConsoleInputAnsiCharToUnicodeChar(Console, &InputEvent->Event.KeyEvent.uChar.UnicodeChar, &AsciiChar); } }
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) { NTSTATUS Status = STATUS_SUCCESS; ULONG i; if (Console == NULL || InputBuffer == NULL /* || InputRecord == NULL */) return STATUS_INVALID_PARAMETER; /* Validity checks */ ASSERT(Console == InputBuffer->Header.Console); ASSERT( (InputRecord != NULL && NumEventsToWrite >= 0) || (InputRecord == NULL && NumEventsToWrite == 0) ); // Do NOT do that !! Use the existing number of events already written, if any... // if (NumEventsWritten) *NumEventsWritten = 0; for (i = (NumEventsWritten ? *NumEventsWritten : 0); i < NumEventsToWrite && NT_SUCCESS(Status); ++i) { if (InputRecord->EventType == KEY_EVENT && !Unicode) { CHAR AsciiChar = InputRecord->Event.KeyEvent.uChar.AsciiChar; ConsoleInputAnsiCharToUnicodeChar(Console, &InputRecord->Event.KeyEvent.uChar.UnicodeChar, &AsciiChar); } Status = ConioAddInputEvent(Console, InputRecord++, AppendToEnd); } if (NumEventsWritten) *NumEventsWritten = i; return Status; }