122 lines
4.0 KiB
C
122 lines
4.0 KiB
C
// Native console service protocol and client helpers.
|
|
|
|
#pragma once
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <ntlite/handle.h>
|
|
#include <ntlite/input.h>
|
|
#include <ntlite/status.h>
|
|
|
|
#define NTL_CONSOLE_PROTOCOL_VERSION 1u
|
|
#define NTL_CONSOLE_SERVICE_PATH "/Services/Console"
|
|
|
|
#define NTL_CONSOLE_FLAG_NONE 0x00000000u
|
|
#define NTL_CONSOLE_WRITE_MAX 512u
|
|
|
|
#define NTL_CONSOLE_OP_WRITE 1u
|
|
#define NTL_CONSOLE_OP_QUERY_INFO 2u
|
|
#define NTL_CONSOLE_OP_SET_CURSOR 3u
|
|
#define NTL_CONSOLE_OP_FILL_CHARACTER 4u
|
|
#define NTL_CONSOLE_OP_FILL_ATTRIBUTE 5u
|
|
#define NTL_CONSOLE_OP_PUT_CHARACTER 6u
|
|
#define NTL_CONSOLE_OP_CLEAR 7u
|
|
#define NTL_CONSOLE_OP_READ_INPUT 8u
|
|
#define NTL_CONSOLE_OP_PEEK_INPUT 9u
|
|
#define NTL_CONSOLE_OP_FLUSH_INPUT 10u
|
|
|
|
typedef struct NTL_CONSOLE_INFO {
|
|
uint32_t Size;
|
|
uint32_t Flags;
|
|
uint32_t Columns;
|
|
uint32_t Rows;
|
|
uint32_t CursorX;
|
|
uint32_t CursorY;
|
|
uint16_t Attribute;
|
|
uint16_t Reserved;
|
|
uint32_t PixelWidth;
|
|
uint32_t PixelHeight;
|
|
uint64_t Generation;
|
|
} NTL_CONSOLE_INFO;
|
|
|
|
typedef struct NTL_CONSOLE_REQUEST {
|
|
uint32_t Size;
|
|
uint32_t Version;
|
|
uint32_t Operation;
|
|
uint32_t Flags;
|
|
uint64_t TimeoutMilliseconds;
|
|
union {
|
|
struct {
|
|
uint32_t Length;
|
|
char Data[NTL_CONSOLE_WRITE_MAX];
|
|
} Write;
|
|
struct {
|
|
int32_t X;
|
|
int32_t Y;
|
|
} Cursor;
|
|
struct {
|
|
char Character;
|
|
uint8_t Reserved[3];
|
|
int32_t X;
|
|
int32_t Y;
|
|
uint32_t Length;
|
|
} FillCharacter;
|
|
struct {
|
|
uint16_t Attribute;
|
|
uint16_t Reserved;
|
|
int32_t X;
|
|
int32_t Y;
|
|
uint32_t Length;
|
|
} FillAttribute;
|
|
struct {
|
|
char Character;
|
|
uint8_t Reserved[3];
|
|
int32_t X;
|
|
int32_t Y;
|
|
uint32_t Foreground;
|
|
uint32_t Background;
|
|
} PutCharacter;
|
|
struct {
|
|
uint32_t Color;
|
|
} Clear;
|
|
} Data;
|
|
} NTL_CONSOLE_REQUEST;
|
|
|
|
typedef struct NTL_CONSOLE_REPLY {
|
|
uint32_t Size;
|
|
uint32_t Version;
|
|
uint32_t Operation;
|
|
uint32_t Flags;
|
|
KSTATUS Status;
|
|
uint32_t Written;
|
|
INPUT_KEY_RECORD Input;
|
|
NTL_CONSOLE_INFO Info;
|
|
} NTL_CONSOLE_REPLY;
|
|
|
|
#if defined(NTL_SYSCALL_STATIC)
|
|
#define NTL_CONSOLE_API
|
|
#elif defined(NTL_SYSCALL_BUILD)
|
|
#define NTL_CONSOLE_API __declspec(dllexport)
|
|
#else
|
|
#define NTL_CONSOLE_API
|
|
#endif
|
|
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleConnect(SYS_HANDLE* sessionOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleClose(SYS_HANDLE session);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleWrite(SYS_HANDLE session, const void* data, size_t length, size_t* writtenOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleQueryInfo(SYS_HANDLE session, NTL_CONSOLE_INFO* infoOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleSetCursor(SYS_HANDLE session, int x, int y);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleFillCharacter(SYS_HANDLE session, char character, int x, int y,
|
|
size_t length, size_t* writtenOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleFillAttribute(SYS_HANDLE session, uint16_t attribute, int x, int y,
|
|
size_t length, size_t* writtenOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsolePutCharacter(SYS_HANDLE session, char character, int x, int y,
|
|
uint32_t foreground, uint32_t background);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleClear(SYS_HANDLE session, uint32_t color);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleReadInput(SYS_HANDLE session, uint64_t timeoutMilliseconds,
|
|
INPUT_KEY_RECORD* recordOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsolePeekInput(SYS_HANDLE session, uint64_t timeoutMilliseconds,
|
|
INPUT_KEY_RECORD* recordOut);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleFlushInput(SYS_HANDLE session);
|
|
NTL_CONSOLE_API KSTATUS NtlConsoleReadCharacter(SYS_HANDLE session, char* characterOut);
|