56 {0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F, 0x00, 0x47, 0x1E, 0x00,
57 0x00, 0x00, 0x05, 0xF0, 0x9C, 0x8E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3},
59 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B,
60 0x3C, 0x3D, 0x3E, 0x3F, 0x0C, 0x00, 0x0F, 0x08, 0x00},
62 {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0xFF},
64 {0x03, 0x00, 0x03, 0x00, 0x02},
208 if ((
i > 0) && (--
i == 0))
225 if ((
i > 0) && (--
i == 0))
335 for (
i = 0;
i <
sizeof(Registers->
CRT);
i++)
367 if (!DeviceExtension->VideoMemory)
370 Offset = (DeviceExtension->CursorY * DeviceExtension->Columns) + DeviceExtension->CursorX;
388 if (!DeviceExtension->VideoMemory)
391 height = DeviceExtension->ScanLines;
392 data = (DeviceExtension->CursorVisible) ? 0x00 : 0x20;
394 size = (DeviceExtension->CursorSize *
height) / 100;
455 DeviceExtension->Rows |= (((
data & 0x02) << 7) | ((
data & 0x40) << 3));
456 DeviceExtension->Rows++;
473 data | ((DeviceExtension->ScanLines - 1) & 0x1F));
478 DeviceExtension->Rows = DeviceExtension->Rows / DeviceExtension->ScanLines;
481 DeviceExtension->CursorX = (
USHORT)(
offset % DeviceExtension->Columns);
482 DeviceExtension->CursorY = (
USHORT)(
offset / DeviceExtension->Columns);
484 DeviceExtension->CursorY =
min(
max(DeviceExtension->CursorY, 0), DeviceExtension->Rows - 1);
487 if (DeviceExtension->FontBitfield)
490 DPRINT(
"%d Columns %d Rows %d Scanlines\n",
491 DeviceExtension->Columns,
492 DeviceExtension->Rows,
493 DeviceExtension->ScanLines);
502#define FOREGROUND_LIGHTGRAY (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED)
507 if (!FullReset && (
Enable == DeviceExtension->Enabled))
512 DeviceExtension->CursorSize = 5;
513 DeviceExtension->CursorVisible =
TRUE;
515 if (DeviceExtension->FontBitfield)
518 DeviceExtension->FontBitfield =
NULL;
538 if (DeviceExtension->VideoMemory)
540 ASSERT(DeviceExtension->VideoMemorySize != 0);
541 MmUnmapIoSpace(DeviceExtension->VideoMemory, DeviceExtension->VideoMemorySize);
543 DeviceExtension->VideoMemory =
NULL;
544 DeviceExtension->VideoMemorySize = 0;
547 if (DeviceExtension->ScreenBuffer)
549 ASSERT(DeviceExtension->ScreenBufferSize != 0);
552 DeviceExtension->ScreenBuffer =
NULL;
553 DeviceExtension->ScreenBufferSize = 0;
556 DeviceExtension->VideoMemorySize = DeviceExtension->Rows * DeviceExtension->Columns * 2;
557 if (DeviceExtension->VideoMemorySize == 0)
562 DeviceExtension->VideoMemory =
564 if (!DeviceExtension->VideoMemory)
566 DeviceExtension->VideoMemorySize = 0;
571 DeviceExtension->ScreenBufferSize = DeviceExtension->VideoMemorySize;
572 DeviceExtension->ScreenBuffer =
574 if (!DeviceExtension->ScreenBuffer)
576 DPRINT1(
"Could not allocate screenbuffer, ignore...\n");
577 DeviceExtension->ScreenBufferSize = 0;
590 if (DeviceExtension->ScreenBuffer)
592 ASSERT(DeviceExtension->VideoMemory);
593 ASSERT(DeviceExtension->ScreenBuffer);
594 ASSERT(DeviceExtension->ScreenBufferSize != 0);
595 ASSERT(DeviceExtension->VideoMemorySize == DeviceExtension->ScreenBufferSize);
598 DeviceExtension->ScreenBuffer,
599 DeviceExtension->VideoMemorySize);
606 DeviceExtension->Enabled =
TRUE;
610 DeviceExtension->Enabled =
FALSE;
621 if (DeviceExtension->VideoMemory)
623 ASSERT(DeviceExtension->VideoMemorySize != 0);
624 MmUnmapIoSpace(DeviceExtension->VideoMemory, DeviceExtension->VideoMemorySize);
626 DeviceExtension->VideoMemory =
NULL;
627 DeviceExtension->VideoMemorySize = 0;
630 if (DeviceExtension->ScreenBuffer)
632 ASSERT(DeviceExtension->ScreenBufferSize != 0);
635 DeviceExtension->ScreenBuffer =
NULL;
636 DeviceExtension->ScreenBufferSize = 0;
639 DeviceExtension->Columns = 1;
640 DeviceExtension->Rows = 1;
641 DeviceExtension->ScanLines = 1;
650 if (DeviceExtension->ScreenBuffer)
652 ASSERT(DeviceExtension->VideoMemory);
653 ASSERT(DeviceExtension->ScreenBuffer);
654 ASSERT(DeviceExtension->ScreenBufferSize != 0);
655 ASSERT(DeviceExtension->VideoMemorySize == DeviceExtension->ScreenBufferSize);
658 DeviceExtension->VideoMemory,
659 DeviceExtension->VideoMemorySize);
705 if (!DeviceExtension->Enabled || !DeviceExtension->VideoMemory)
716 vidmem = DeviceExtension->VideoMemory;
717 rows = DeviceExtension->Rows;
718 columns = DeviceExtension->Columns;
719 cursorx = DeviceExtension->CursorX;
720 cursory = DeviceExtension->CursorY;
727 offset = cursorx + cursory * columns;
738 cursory =
min(
max(cursory, 0), rows - 1);
753 else if (cursory > 0)
756 cursorx = columns - 1;
758 offset = cursorx + cursory * columns;
776 vidmem[(cursorx + cursory * columns) * 2] =
' ';
778 if (cursorx >= columns)
791 offset = cursorx + cursory * columns;
795 if (cursorx >= columns)
811 columns * (rows - 1) * 2);
815 for (
j = 0;
j < columns;
j++)
817 LinePtr[
j] = DeviceExtension->CharAttribute << 8;
820 for (
j = 0;
j < columns;
j++)
822 offset =
j + cursory * columns;
831 ASSERT((0 <= cursorx) && (cursorx < DeviceExtension->
Columns));
832 ASSERT((0 <= cursory) && (cursory < DeviceExtension->
Rows));
833 DeviceExtension->CursorX = cursorx;
834 DeviceExtension->CursorY = cursory;
875 Irp->IoStatus.Information = 0;
882 USHORT rows = DeviceExtension->Rows;
883 USHORT columns = DeviceExtension->Columns;
902 pcsbi->
wAttributes = DeviceExtension->CharAttribute;
934 Irp->IoStatus.Information = 0;
939 DeviceExtension->CharAttribute = pcsbi->
wAttributes;
946 if (DeviceExtension->Enabled)
949 Irp->IoStatus.Information = 0;
969 pcci->
dwSize = DeviceExtension->CursorSize;
970 pcci->
bVisible = DeviceExtension->CursorVisible;
991 DeviceExtension->CursorSize = pcci->
dwSize;
992 DeviceExtension->CursorVisible = pcci->
bVisible;
993 if (DeviceExtension->Enabled)
996 Irp->IoStatus.Information = 0;
1011 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1016 pcm->
dwMode = DeviceExtension->Mode;
1033 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1036 DeviceExtension->Mode = pcm->
dwMode;
1038 Irp->IoStatus.Information = 0;
1058 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1074 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1078 vidmem = DeviceExtension->VideoMemory;
1081 nMaxLength =
min(nMaxLength,
1082 (DeviceExtension->Rows - Buf->
dwCoord.
Y)
1083 * DeviceExtension->Columns - Buf->
dwCoord.
X);
1085 for (dwCount = 0; dwCount < nMaxLength; dwCount++)
1111 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1114 Irp->IoStatus.Information = 0;
1138 nMaxLength /=
sizeof(
USHORT);
1140 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1142 vidmem = DeviceExtension->VideoMemory;
1145 nMaxLength =
min(nMaxLength,
1146 (DeviceExtension->Rows - Buf->
dwCoord.
Y)
1147 * DeviceExtension->Columns - Buf->
dwCoord.
X);
1149 for (dwCount = 0; dwCount < nMaxLength; dwCount++, pAttr++)
1153 Irp->IoStatus.Information = dwCount *
sizeof(
USHORT);
1192 nMaxLength /=
sizeof(
USHORT);
1194 Irp->IoStatus.Information = 0;
1196 if ( dwCoord.
X < 0 || dwCoord.
X >= DeviceExtension->Columns ||
1197 dwCoord.
Y < 0 || dwCoord.
Y >= DeviceExtension->Rows ||
1204 pAttr = (
PUSHORT)(pCoord + 1);
1206 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1208 vidmem = DeviceExtension->VideoMemory;
1209 offset = (dwCoord.
X + dwCoord.
Y * DeviceExtension->Columns) * 2 + 1;
1211 nMaxLength =
min(nMaxLength,
1212 (DeviceExtension->Rows - dwCoord.
Y)
1213 * DeviceExtension->Columns - dwCoord.
X);
1215 for (dwCount = 0; dwCount < nMaxLength; dwCount++, pAttr++)
1219 Irp->IoStatus.Information = dwCount *
sizeof(
USHORT);
1234 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1236 DeviceExtension->CharAttribute = *(
PUSHORT)
Irp->AssociatedIrp.SystemBuffer;
1238 Irp->IoStatus.Information = 0;
1258 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1274 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1278 vidmem = DeviceExtension->VideoMemory;
1281 nMaxLength =
min(nMaxLength,
1282 (DeviceExtension->Rows - Buf->
dwCoord.
Y)
1283 * DeviceExtension->Columns - Buf->
dwCoord.
X);
1285 for (dwCount = 0; dwCount < nMaxLength; dwCount++)
1311 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1314 Irp->IoStatus.Information = 0;
1339 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1341 vidmem = DeviceExtension->VideoMemory;
1344 nMaxLength =
min(nMaxLength,
1345 (DeviceExtension->Rows - Buf->
dwCoord.
Y)
1346 * DeviceExtension->Columns - Buf->
dwCoord.
X);
1348 for (dwCount = 0; dwCount < nMaxLength; dwCount++, pChar++)
1352 Irp->IoStatus.Information = dwCount *
sizeof(
CHAR);
1391 Irp->IoStatus.Information = 0;
1393 if ( dwCoord.
X < 0 || dwCoord.
X >= DeviceExtension->Columns ||
1394 dwCoord.
Y < 0 || dwCoord.
Y >= DeviceExtension->Rows ||
1401 pChar = (
PCHAR)(pCoord + 1);
1403 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1405 vidmem = DeviceExtension->VideoMemory;
1406 offset = (dwCoord.
X + dwCoord.
Y * DeviceExtension->Columns) * 2;
1408 nMaxLength =
min(nMaxLength,
1409 (DeviceExtension->Rows - dwCoord.
Y)
1410 * DeviceExtension->Columns - dwCoord.
X);
1412 for (dwCount = 0; dwCount < nMaxLength; dwCount++, pChar++)
1416 Irp->IoStatus.Information = dwCount *
sizeof(
CHAR);
1428 UINT32 SrcDelta, DestDelta,
i;
1438 if (pConsoleDraw ==
NULL)
1444 ConsoleDraw = *pConsoleDraw;
1454 Irp->IoStatus.Information = 0;
1457 DeviceExtension->CursorX =
min(
max(ConsoleDraw.
CursorX, 0), DeviceExtension->Columns - 1);
1458 DeviceExtension->CursorY =
min(
max(ConsoleDraw.
CursorY, 0), DeviceExtension->Rows - 1);
1459 if (DeviceExtension->Enabled)
1465 if ( ConsoleDraw.
X < 0 || ConsoleDraw.
X >= DeviceExtension->Columns ||
1466 ConsoleDraw.
Y < 0 || ConsoleDraw.
Y >= DeviceExtension->Rows )
1471 if ( ConsoleDraw.
SizeX > DeviceExtension->Columns - ConsoleDraw.
X ||
1472 ConsoleDraw.
SizeY > DeviceExtension->Rows - ConsoleDraw.
Y )
1478 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1480 Src = (
PUCHAR)(pConsoleDraw + 1);
1481 SrcDelta = ConsoleDraw.
SizeX * 2;
1482 Dest = DeviceExtension->VideoMemory +
1483 (ConsoleDraw.
X + ConsoleDraw.
Y * DeviceExtension->Columns) * 2;
1484 DestDelta = DeviceExtension->Columns * 2;
1488 for (
i = 0;
i < ConsoleDraw.
SizeY;
i++)
1512 ASSERT(
Irp->AssociatedIrp.SystemBuffer);
1514 if (DeviceExtension->FontBitfield)
1517 if (!DeviceExtension->FontBitfield)
1522 RtlCopyMemory(DeviceExtension->FontBitfield,
Irp->AssociatedIrp.SystemBuffer, 256 * 8);
1525 if (DeviceExtension->Enabled && DeviceExtension->VideoMemory)
1528 Irp->IoStatus.Information = 0;
1554 DPRINT1(
"ScrDispatch(0x%p): stk->MajorFunction = %lu UNIMPLEMENTED\n",
1576 DPRINT(
"Screen Driver 0.0.6\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
static const COLUMN_LIST Columns[]
static VOID FASTCALL ScrSetCursorShape(_In_ PDEVICE_EXTENSION DeviceExtension)
static DRIVER_DISPATCH ScrDispatch
static BOOLEAN InbvMonitoring
static NTSTATUS ScrInbvCleanup(VOID)
static DRIVER_DISPATCH ScrWrite
struct _DEVICE_EXTENSION DEVICE_EXTENSION
static DRIVER_DISPATCH ScrCreateClose
static PDEVICE_EXTENSION ResetDisplayParametersDeviceExtension
static VOID FASTCALL ScrAcquireOwnership(_In_ PDEVICE_EXTENSION DeviceExtension)
static const UCHAR DefaultPalette[]
struct _VGA_REGISTERS VGA_REGISTERS
static BOOLEAN NTAPI ScrResetDisplayParameters(_In_ ULONG Columns, _In_ ULONG Rows)
static VOID FASTCALL ScrSetRegisters(const VGA_REGISTERS *Registers)
static BOOLEAN ScrResetScreen(_In_ PDEVICE_EXTENSION DeviceExtension, _In_ BOOLEAN FullReset, _In_ BOOLEAN Enable)
static VOID FASTCALL ScrSetCursor(_In_ PDEVICE_EXTENSION DeviceExtension)
static const VGA_REGISTERS VidpMode3Regs
struct _VGA_REGISTERS * PVGA_REGISTERS
static VOID NTAPI InbvMonitorThread(_In_ PVOID Context)
#define FOREGROUND_LIGHTGRAY
static NTSTATUS ScrInbvInitialize(VOID)
struct _DEVICE_EXTENSION * PDEVICE_EXTENSION
static HANDLE InbvThreadHandle
static DRIVER_DISPATCH ScrIoControl
static BOOLEAN NTAPI ScrResetDisplayParametersEx(_In_ ULONG Columns, _In_ ULONG Rows, _In_ BOOLEAN CalledByInbv)
#define ENABLE_WRAP_AT_EOL_OUTPUT
VOID ScrSetFont(_In_ PUCHAR FontBitfield)
#define ENABLE_PROCESSED_OUTPUT
struct tagCONSOLE_SCREEN_BUFFER_INFO CONSOLE_SCREEN_BUFFER_INFO
struct tagCONSOLE_CURSOR_INFO CONSOLE_CURSOR_INFO
struct tagCONSOLE_CURSOR_INFO * PCONSOLE_CURSOR_INFO
struct tagCONSOLE_SCREEN_BUFFER_INFO * PCONSOLE_SCREEN_BUFFER_INFO
#define FILE_DEVICE_SECURE_OPEN
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
DRIVER_INITIALIZE DriverEntry
#define InterlockedExchangePointer(Target, Value)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeDelayExecutionThread(mode, foo, t)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define KeGetCurrentThread
VOID NTAPI InbvNotifyDisplayOwnershipLost(_In_ INBV_RESET_DISPLAY_PARAMETERS Callback)
BOOLEAN NTAPI InbvCheckDisplayOwnership(VOID)
#define OBJ_KERNEL_HANDLE
#define LOW_REALTIME_PRIORITY
void __cdecl _disable(void)
void __cdecl _enable(void)
VOID NTAPI MmUnmapIoSpace(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
#define ExFreePoolWithTag(_P, _T)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
DRIVER_DISPATCH(nfs41_FsdDispatch)
#define UNREFERENCED_PARAMETER(P)
#define IOCTL_CONSOLE_DRAW
struct tagOUTPUT_ATTRIBUTE * POUTPUT_ATTRIBUTE
#define IOCTL_CONSOLE_READ_OUTPUT_ATTRIBUTE
#define IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER
struct tagOUTPUT_ATTRIBUTE OUTPUT_ATTRIBUTE
struct tagOUTPUT_CHARACTER * POUTPUT_CHARACTER
struct tagOUTPUT_CHARACTER OUTPUT_CHARACTER
#define IOCTL_CONSOLE_GET_MODE
#define IOCTL_CONSOLE_LOADFONT
#define IOCTL_CONSOLE_FILL_OUTPUT_CHARACTER
#define IOCTL_CONSOLE_READ_OUTPUT_CHARACTER
#define IOCTL_CONSOLE_SET_MODE
#define IOCTL_CONSOLE_RESET_SCREEN
#define IOCTL_CONSOLE_WRITE_OUTPUT_ATTRIBUTE
struct tagCONSOLE_MODE CONSOLE_MODE
#define IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE
struct tagCONSOLE_MODE * PCONSOLE_MODE
#define IOCTL_CONSOLE_GET_CURSOR_INFO
#define IOCTL_CONSOLE_SET_SCREEN_BUFFER_INFO
#define IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO
#define IOCTL_CONSOLE_SET_CURSOR_INFO
#define IOCTL_CONSOLE_FILL_OUTPUT_ATTRIBUTE
_In_ ULONG _In_ ULONG Offset
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
#define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define IoCompleteRequest
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
#define STATUS_INVALID_BUFFER_SIZE
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
#define READ_PORT_UCHAR(p)
#define WRITE_PORT_UCHAR(p, d)
#define FILE_DEVICE_SCREEN
#define IRP_MJ_DEVICE_CONTROL
struct _IO_STACK_LOCATION::@1579::@1580 DeviceIoControl
union _IO_STACK_LOCATION::@1579 Parameters
struct _IO_STACK_LOCATION::@3978::@3983 Write
COORD dwMaximumWindowSize
KPRIORITY NTAPI KeSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
static int processed(const type_t *type)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
#define IO_VIDEO_INCREMENT
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)