ReactOS 0.4.15-dev-7788-g1ad9096
console.c
Go to the documentation of this file.
1/*
2 * ReactOS kernel
3 * Copyright (C) 2002 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19/*
20 * COPYRIGHT: See COPYING in the top level directory
21 * PROJECT: ReactOS text-mode setup
22 * FILE: base/setup/usetup/console.c
23 * PURPOSE: Console support functions
24 * PROGRAMMER:
25 */
26
27/* INCLUDES ******************************************************************/
28
29#include <usetup.h>
30/* Blue Driver Header */
31#include <blue/ntddblue.h>
32#include "keytrans.h"
33
34#define NDEBUG
35#include <debug.h>
36
37/* DATA **********************************************************************/
38
41static KEYBOARD_INPUT_DATA InputDataQueue; // Only one element!
44
45/* FUNCTIONS *****************************************************************/
46
48{
53
54static PVOID
56 IN PCABINET_CONTEXT CabinetContext,
58{
59 PCONSOLE_CABINET_CONTEXT ConsoleCabinetContext;
60
61 ConsoleCabinetContext = (PCONSOLE_CABINET_CONTEXT)CabinetContext;
62 ConsoleCabinetContext->Data = RtlAllocateHeap(ProcessHeap, 0, FileSize);
63 if (!ConsoleCabinetContext->Data)
64 {
65 DPRINT("Failed to allocate %d bytes\n", FileSize);
66 return NULL;
67 }
68 ConsoleCabinetContext->Size = FileSize;
69 return ConsoleCabinetContext->Data;
70}
71
72BOOL
75{
77 UNICODE_STRING ScreenName = RTL_CONSTANT_STRING(L"\\??\\BlueScreen");
78 UNICODE_STRING KeyboardName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardClass0");
82
83 /* Open the screen */
85 &ScreenName,
86 0,
87 NULL,
88 NULL);
95 if (!NT_SUCCESS(Status))
96 return FALSE;
97
98 /* Enable it */
99 Enable = TRUE;
101 NULL,
102 NULL,
103 NULL,
106 &Enable,
107 sizeof(Enable),
108 NULL,
109 0);
110 if (!NT_SUCCESS(Status))
111 {
113 return FALSE;
114 }
115
116 /* Default to en-US output codepage */
118
119 /* Open the keyboard */
121 &KeyboardName,
122 0,
123 NULL,
124 NULL);
129 FILE_OPEN,
130 0);
131 if (!NT_SUCCESS(Status))
132 {
134 return FALSE;
135 }
136
137 /* Reset the queue state */
140
141 return TRUE;
142}
143
144
145BOOL
146WINAPI
148 IN DWORD dwProcessId)
149{
150 return FALSE;
151}
152
153
154BOOL
155WINAPI
157{
158 /* Reset the queue state */
161
164
167
168 return TRUE;
169}
170
171
172BOOL
173WINAPI
175 IN HANDLE hConsoleOutput,
176 IN const VOID *lpBuffer,
177 IN DWORD nNumberOfCharsToWrite,
178 OUT LPDWORD lpNumberOfCharsWritten,
179 IN LPVOID lpReserved)
180{
183
184 Status = NtWriteFile(hConsoleOutput,
185 NULL,
186 NULL,
187 NULL,
190 nNumberOfCharsToWrite,
191 NULL,
192 NULL);
193 if (!NT_SUCCESS(Status))
194 return FALSE;
195
196 *lpNumberOfCharsWritten = IoStatusBlock.Information;
197 return TRUE;
198}
199
200
201HANDLE
202WINAPI
204 IN DWORD nStdHandle)
205{
206 switch (nStdHandle)
207 {
208 case STD_INPUT_HANDLE:
209 return StdInput;
211 return StdOutput;
212 default:
214 }
215}
216
217
218BOOL
219WINAPI
221 IN HANDLE hConsoleInput)
222{
226 KEYBOARD_INPUT_DATA InputData;
227
228 /* Cancel any pending read */
229 if (WaitForInput)
230 NtCancelIoFile(hConsoleInput, &IoStatusBlock);
231
232 /* Reset the queue state */
235
236 /* Flush the keyboard buffer */
237 do
238 {
239 Offset.QuadPart = 0;
240 Status = NtReadFile(hConsoleInput,
241 NULL,
242 NULL,
243 NULL,
245 &InputData,
246 sizeof(InputData),
247 &Offset,
248 NULL);
249 if (Status == STATUS_PENDING)
250 {
251 Timeout.QuadPart = -100;
252 Status = NtWaitForSingleObject(hConsoleInput, FALSE, &Timeout);
253 if (Status == STATUS_TIMEOUT)
254 {
255 NtCancelIoFile(hConsoleInput, &IoStatusBlock);
256 return TRUE;
257 }
258 }
259 } while (NT_SUCCESS(Status));
260 return FALSE;
261}
262
263
264BOOL
265WINAPI
267 IN HANDLE hConsoleInput,
271{
274 KEYBOARD_INPUT_DATA InputData;
275
276 if (InputQueueEmpty)
277 {
278 /* Read the keyboard for an event, without waiting */
279 if (!WaitForInput)
280 {
281 Offset.QuadPart = 0;
282 Status = NtReadFile(hConsoleInput,
283 NULL,
284 NULL,
285 NULL,
286 &InputIosb,
288 sizeof(InputDataQueue),
289 &Offset,
290 NULL);
291 if (!NT_SUCCESS(Status))
292 return FALSE;
293 if (Status == STATUS_PENDING)
294 {
295 /* No input yet, we will have to wait next time */
298 return TRUE;
299 }
300 }
301 else
302 {
303 /*
304 * We already tried to read from the keyboard and are
305 * waiting for data, check whether something showed up.
306 */
307 Timeout.QuadPart = -100; // Wait just a little bit.
308 Status = NtWaitForSingleObject(hConsoleInput, FALSE, &Timeout);
309 if (Status == STATUS_TIMEOUT)
310 {
311 /* Nothing yet, continue waiting next time */
314 return TRUE;
315 }
317 if (!NT_SUCCESS(Status))
318 return FALSE;
319 }
320
321 /* We got something in the queue */
324 }
325
326 /* Fetch from the queue but keep it inside */
327 InputData = InputDataQueue;
328
329 lpBuffer->EventType = KEY_EVENT;
330 Status = IntTranslateKey(hConsoleInput, &InputData, &lpBuffer->Event.KeyEvent);
331 if (!NT_SUCCESS(Status))
332 return FALSE;
333
335 return TRUE;
336}
337
338
339BOOL
340WINAPI
342 IN HANDLE hConsoleInput,
346{
349 KEYBOARD_INPUT_DATA InputData;
350
351 if (InputQueueEmpty)
352 {
353 /* Read the keyboard and wait for an event, skipping the queue */
354 if (!WaitForInput)
355 {
356 Offset.QuadPart = 0;
357 Status = NtReadFile(hConsoleInput,
358 NULL,
359 NULL,
360 NULL,
361 &InputIosb,
363 sizeof(InputDataQueue),
364 &Offset,
365 NULL);
366 if (Status == STATUS_PENDING)
367 {
368 /* Block and wait for input */
370 Status = NtWaitForSingleObject(hConsoleInput, FALSE, NULL);
373 }
374 if (!NT_SUCCESS(Status))
375 return FALSE;
376 }
377 else
378 {
379 /*
380 * We already tried to read from the keyboard and are
381 * waiting for data, block and wait for input.
382 */
383 Status = NtWaitForSingleObject(hConsoleInput, FALSE, NULL);
386 if (!NT_SUCCESS(Status))
387 return FALSE;
388 }
389 }
390
391 /* Fetch from the queue and empty it */
392 InputData = InputDataQueue;
394
395 lpBuffer->EventType = KEY_EVENT;
396 Status = IntTranslateKey(hConsoleInput, &InputData, &lpBuffer->Event.KeyEvent);
397 if (!NT_SUCCESS(Status))
398 return FALSE;
399
401 return TRUE;
402}
403
404
405BOOL
406WINAPI
408 HANDLE hConsoleOutput,
409 IN LPCSTR lpCharacter,
411 IN COORD dwWriteCoord,
412 OUT LPDWORD lpNumberOfCharsWritten)
413{
416 COORD *pCoord;
417 PCHAR pText;
419
421 0,
422 nLength + sizeof(COORD));
423 pCoord = (COORD *)Buffer;
424 pText = (PCHAR)(pCoord + 1);
425
426 *pCoord = dwWriteCoord;
427 memcpy(pText, lpCharacter, nLength);
428
429 Status = NtDeviceIoControlFile(hConsoleOutput,
430 NULL,
431 NULL,
432 NULL,
435 NULL,
436 0,
437 Buffer,
438 nLength + sizeof(COORD));
439
441 if (!NT_SUCCESS(Status))
442 return FALSE;
443
444 *lpNumberOfCharsWritten = IoStatusBlock.Information;
445 return TRUE;
446}
447
448
449BOOL
450WINAPI
452 HANDLE hConsoleOutput,
453 IN LPCWSTR lpCharacter,
455 IN COORD dwWriteCoord,
456 OUT LPDWORD lpNumberOfCharsWritten)
457{
460 COORD *pCoord;
461 PCHAR pText;
463// ULONG i;
464
468
469 UnicodeString.Length = nLength * sizeof(WCHAR);
470 UnicodeString.MaximumLength = nLength * sizeof(WCHAR);
471 UnicodeString.Buffer = (PWSTR)lpCharacter;
472
474
475
477 0,
478 OemLength + sizeof(COORD));
479// nLength + sizeof(COORD));
480 if (Buffer== NULL)
481 return FALSE;
482
483 pCoord = (COORD *)Buffer;
484 pText = (PCHAR)(pCoord + 1);
485
486 *pCoord = dwWriteCoord;
487
488 OemString.Length = 0;
489 OemString.MaximumLength = OemLength;
490 OemString.Buffer = pText;
491
494 FALSE);
495 if (!NT_SUCCESS(Status))
496 goto done;
497
498 /* FIXME: use real unicode->oem conversion */
499// for (i = 0; i < nLength; i++)
500// pText[i] = (CHAR)lpCharacter[i];
501
502 Status = NtDeviceIoControlFile(hConsoleOutput,
503 NULL,
504 NULL,
505 NULL,
508 NULL,
509 0,
510 Buffer,
511 nLength + sizeof(COORD));
512
513done:
515 if (!NT_SUCCESS(Status))
516 return FALSE;
517
518 *lpNumberOfCharsWritten = IoStatusBlock.Information;
519 return TRUE;
520}
521
522
523BOOL
524WINAPI
526 IN HANDLE hConsoleOutput,
527 IN WORD wAttribute,
529 IN COORD dwWriteCoord,
530 OUT LPDWORD lpNumberOfAttrsWritten)
531{
535
536 Buffer.wAttribute = wAttribute;
537 Buffer.nLength = nLength;
538 Buffer.dwCoord = dwWriteCoord;
539
540 Status = NtDeviceIoControlFile(hConsoleOutput,
541 NULL,
542 NULL,
543 NULL,
546 &Buffer,
547 sizeof(OUTPUT_ATTRIBUTE),
548 &Buffer,
549 sizeof(OUTPUT_ATTRIBUTE));
550 if (!NT_SUCCESS(Status))
551 return FALSE;
552
553 *lpNumberOfAttrsWritten = Buffer.dwTransfered;
554 return TRUE;
555}
556
557
558BOOL
559WINAPI
561 IN HANDLE hConsoleOutput,
562 IN CHAR cCharacter,
564 IN COORD dwWriteCoord,
565 OUT LPDWORD lpNumberOfCharsWritten)
566{
570
571 Buffer.cCharacter = cCharacter;
572 Buffer.nLength = nLength;
573 Buffer.dwCoord = dwWriteCoord;
574
575 Status = NtDeviceIoControlFile(hConsoleOutput,
576 NULL,
577 NULL,
578 NULL,
581 &Buffer,
582 sizeof(OUTPUT_CHARACTER),
583 &Buffer,
584 sizeof(OUTPUT_CHARACTER));
585 if (!NT_SUCCESS(Status))
586 return FALSE;
587
588 *lpNumberOfCharsWritten = Buffer.dwTransfered;
589 return TRUE;
590}
591
592
593BOOL
594WINAPI
596 IN HANDLE hConsoleOutput,
597 OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
598{
601
602 Status = NtDeviceIoControlFile(hConsoleOutput,
603 NULL,
604 NULL,
605 NULL,
608 NULL,
609 0,
610 lpConsoleScreenBufferInfo,
612 return NT_SUCCESS(Status);
613}
614
615
616BOOL
617WINAPI
619 IN HANDLE hConsoleOutput,
620 IN const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo)
621{
624
625 Status = NtDeviceIoControlFile(hConsoleOutput,
626 NULL,
627 NULL,
628 NULL,
631 (PCONSOLE_CURSOR_INFO)lpConsoleCursorInfo,
632 sizeof(CONSOLE_CURSOR_INFO),
633 NULL,
634 0);
635 return NT_SUCCESS(Status);
636}
637
638
639BOOL
640WINAPI
642 IN HANDLE hConsoleOutput,
643 IN COORD dwCursorPosition)
644{
645 CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
648
649 Status = GetConsoleScreenBufferInfo(hConsoleOutput, &ConsoleScreenBufferInfo);
650 if (!NT_SUCCESS(Status))
651 return FALSE;
652
653 ConsoleScreenBufferInfo.dwCursorPosition.X = dwCursorPosition.X;
654 ConsoleScreenBufferInfo.dwCursorPosition.Y = dwCursorPosition.Y;
655
656 Status = NtDeviceIoControlFile(hConsoleOutput,
657 NULL,
658 NULL,
659 NULL,
662 &ConsoleScreenBufferInfo,
664 NULL,
665 0);
666 return NT_SUCCESS(Status);
667}
668
669
670BOOL
671WINAPI
673 IN HANDLE hConsoleOutput,
674 IN WORD wAttributes)
675{
678
679 Status = NtDeviceIoControlFile(hConsoleOutput,
680 NULL,
681 NULL,
682 NULL,
685 &wAttributes,
686 sizeof(USHORT),
687 NULL,
688 0);
689 return NT_SUCCESS(Status);
690}
691
692
693BOOL
694WINAPI
696 IN UINT wCodepage)
697{
698 static PCWSTR FontFile = L"\\SystemRoot\\vgafonts.cab";
699 WCHAR FontName[20];
700 CONSOLE_CABINET_CONTEXT ConsoleCabinetContext;
701 PCABINET_CONTEXT CabinetContext = &ConsoleCabinetContext.CabinetContext;
702 CAB_SEARCH Search;
703 ULONG CabStatus;
704 HANDLE hConsoleOutput;
707
708 if (wCodepage == LastLoadedCodepage)
709 return TRUE;
710
711 hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
712
713 CabinetInitialize(CabinetContext);
714 CabinetSetEventHandlers(CabinetContext,
716 CabinetSetCabinetName(CabinetContext, FontFile);
717
718 CabStatus = CabinetOpen(CabinetContext);
719 if (CabStatus != CAB_STATUS_SUCCESS)
720 {
721 DPRINT("CabinetOpen('%S') returned 0x%08x\n", FontFile, CabStatus);
722 return FALSE;
723 }
724
725 RtlStringCbPrintfW(FontName, sizeof(FontName),
726 L"%u-8x8.bin", wCodepage);
727 CabStatus = CabinetFindFirst(CabinetContext, FontName, &Search);
728 if (CabStatus != CAB_STATUS_SUCCESS)
729 {
730 DPRINT("CabinetFindFirst('%S', '%S') returned 0x%08x\n", FontFile, FontName, CabStatus);
731 CabinetClose(CabinetContext);
732 return FALSE;
733 }
734
735 CabStatus = CabinetExtractFile(CabinetContext, &Search);
736 CabinetClose(CabinetContext);
737 if (CabStatus != CAB_STATUS_SUCCESS)
738 {
739 DPRINT("CabinetExtractFile('%S', '%S') returned 0x%08x\n", FontFile, FontName, CabStatus);
740 if (ConsoleCabinetContext.Data)
741 RtlFreeHeap(ProcessHeap, 0, ConsoleCabinetContext.Data);
742 return FALSE;
743 }
744 ASSERT(ConsoleCabinetContext.Data);
745
746 Status = NtDeviceIoControlFile(hConsoleOutput,
747 NULL,
748 NULL,
749 NULL,
752 ConsoleCabinetContext.Data,
753 ConsoleCabinetContext.Size,
754 NULL,
755 0);
756
757 RtlFreeHeap(ProcessHeap, 0, ConsoleCabinetContext.Data);
758
759 if (!NT_SUCCESS(Status))
760 return FALSE;
761
762 LastLoadedCodepage = wCodepage;
763 return TRUE;
764}
765
766
767/* EOF */
unsigned char BOOLEAN
LONG NTSTATUS
Definition: precomp.h:26
HANDLE ProcessHeap
Definition: servman.c:15
BOOL WINAPI SetConsoleOutputCP(IN UINT wCodepage)
Definition: console.c:695
BOOL WINAPI WriteConsoleOutputCharacterA(HANDLE hConsoleOutput, IN LPCSTR lpCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten)
Definition: console.c:407
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:220
static PVOID ConsoleCreateFileHandler(IN PCABINET_CONTEXT CabinetContext, IN ULONG FileSize)
Definition: console.c:55
BOOL WINAPI FillConsoleOutputCharacterA(IN HANDLE hConsoleOutput, IN CHAR cCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten)
Definition: console.c:560
static BOOLEAN InputQueueEmpty
Definition: console.c:39
BOOL WINAPI SetConsoleCursorPosition(IN HANDLE hConsoleOutput, IN COORD dwCursorPosition)
Definition: console.c:641
BOOL WINAPI WriteConsoleOutputCharacterW(HANDLE hConsoleOutput, IN LPCWSTR lpCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten)
Definition: console.c:451
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
BOOL WINAPI AllocConsole(VOID)
Definition: console.c:74
struct _CONSOLE_CABINET_CONTEXT CONSOLE_CABINET_CONTEXT
BOOL WINAPI FreeConsole(VOID)
Definition: console.c:156
BOOL WINAPI SetConsoleTextAttribute(IN HANDLE hConsoleOutput, IN WORD wAttributes)
Definition: console.c:672
static UINT LastLoadedCodepage
Definition: console.c:43
static KEYBOARD_INPUT_DATA InputDataQueue
Definition: console.c:41
BOOL WINAPI SetConsoleCursorInfo(IN HANDLE hConsoleOutput, IN const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo)
Definition: console.c:618
static BOOLEAN WaitForInput
Definition: console.c:40
static IO_STATUS_BLOCK InputIosb
Definition: console.c:42
BOOL WINAPI AttachConsole(IN DWORD dwProcessId)
Definition: console.c:147
BOOL WINAPI FillConsoleOutputAttribute(IN HANDLE hConsoleOutput, IN WORD wAttribute, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfAttrsWritten)
Definition: console.c:525
struct _CONSOLE_CABINET_CONTEXT * PCONSOLE_CABINET_CONTEXT
BOOL WINAPI GetConsoleScreenBufferInfo(IN HANDLE hConsoleOutput, OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
Definition: console.c:595
#define CAB_STATUS_SUCCESS
Definition: cabinet.h:23
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:590
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:608
ULONG CabinetOpen(IN OUT PCABINET_CONTEXT CabinetContext)
Definition: cabinet.c:627
ULONG CabinetFindFirst(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName, IN OUT PCAB_SEARCH Search)
Definition: cabinet.c:826
VOID CabinetClose(IN OUT PCABINET_CONTEXT CabinetContext)
Definition: cabinet.c:807
ULONG CabinetExtractFile(IN PCABINET_CONTEXT CabinetContext, IN PCAB_SEARCH Search)
Definition: cabinet.c:965
VOID CabinetSetEventHandlers(IN PCABINET_CONTEXT CabinetContext, IN PCABINET_OVERWRITE Overwrite, IN PCABINET_EXTRACT Extract, IN PCABINET_DISK_CHANGE DiskChange, IN PCABINET_CREATE_FILE CreateFile)
Definition: cabinet.c:1346
VOID CabinetInitialize(IN OUT PCABINET_CONTEXT CabinetContext)
Definition: cabinet.c:507
VOID CabinetSetCabinetName(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName)
Definition: cabinet.c:586
Definition: bufpool.h:45
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
HANDLE StdOutput
Definition: consup.c:37
HANDLE StdInput
Definition: consup.c:36
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
#define FILE_OPEN
Definition: from_kernel.h:54
#define FILE_SYNCHRONOUS_IO_ALERT
Definition: from_kernel.h:30
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
Status
Definition: gdiplustypes.h:25
NTSTATUS IntTranslateKey(HANDLE hConsoleInput, PKEYBOARD_INPUT_DATA InputData, KEY_EVENT_RECORD *Event)
Definition: keytrans.c:417
#define PCHAR
Definition: match.c:90
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ASSERT(a)
Definition: mode.c:44
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
unsigned int UINT
Definition: ndis.h:50
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString, PCUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3952
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define FILE_ALL_ACCESS
Definition: nt_native.h:651
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(IN HANDLE hObject, IN BOOLEAN bAlertable, IN PLARGE_INTEGER Timeout)
#define IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER
Definition: ntddblue.h:20
#define IOCTL_CONSOLE_LOADFONT
Definition: ntddblue.h:24
#define IOCTL_CONSOLE_FILL_OUTPUT_CHARACTER
Definition: ntddblue.h:18
#define IOCTL_CONSOLE_RESET_SCREEN
Definition: ntddblue.h:4
#define IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE
Definition: ntddblue.h:16
#define IOCTL_CONSOLE_SET_SCREEN_BUFFER_INFO
Definition: ntddblue.h:7
#define IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO
Definition: ntddblue.h:6
#define IOCTL_CONSOLE_SET_CURSOR_INFO
Definition: ntddblue.h:9
#define IOCTL_CONSOLE_FILL_OUTPUT_ATTRIBUTE
Definition: ntddblue.h:13
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142
NTSTATUS NTAPI NtCancelIoFile(IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock)
Definition: file.c:4019
#define STATUS_TIMEOUT
Definition: ntstatus.h:81
#define STATUS_PENDING
Definition: ntstatus.h:82
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
Definition: ntstrsafe.h:1173
#define L(x)
Definition: ntvdm.h:50
unsigned short USHORT
Definition: pedump.c:61
static ULONG Timeout
Definition: ping.c:61
NTSTATUS NTAPI NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key)
#define DPRINT
Definition: sndvol32.h:71
CABINET_CONTEXT CabinetContext
Definition: console.c:49
Definition: bl.h:1338
SHORT Y
Definition: blue.h:27
SHORT X
Definition: blue.h:26
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
LPCSTR pText
Definition: txtscale.cpp:79
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint32_t * LPDWORD
Definition: typedefs.h:59
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
STRING OEM_STRING
Definition: umtypes.h:203
#define STD_OUTPUT_HANDLE
Definition: winbase.h:268
#define STD_INPUT_HANDLE
Definition: winbase.h:267
_In_ DWORD _Out_ LPDWORD lpNumberOfEventsRead
Definition: wincon.h:474
#define ReadConsoleInput
Definition: wincon.h:778
#define KEY_EVENT
Definition: wincon.h:128
_In_ DWORD nLength
Definition: wincon.h:473
#define PeekConsoleInput
Definition: wincon.h:776
#define WriteConsole
Definition: wincon.h:784
#define WINAPI
Definition: msvc.h:6
#define RtlUnicodeStringToOemSize(STRING)
*BytesInOemString PCHAR OemString
Definition: rtlfuncs.h:1560
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char CHAR
Definition: xmlstorage.h:175