|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
hdlsterm.h
Abstract:
This module contains the public header information (function prototypes, data and type declarations) for the Headless Terminal effort.
Author:
Sean Selitrennikoff (v-seans) Oct, 1999
Revision History:
--*/
#ifndef _HDLSTERM_
#define _HDLSTERM_
//
// Defines for string codes that can be passed to HeadlessAddLogEntry()
//
#define HEADLESS_LOG_LOADING_FILENAME 0x01 // expects parameter.
#define HEADLESS_LOG_LOAD_SUCCESSFUL 0x02
#define HEADLESS_LOG_LOAD_FAILED 0x03
#define HEADLESS_LOG_EVENT_CREATE_FAILED 0x04
#define HEADLESS_LOG_OBJECT_TYPE_CREATE_FAILED 0x05
#define HEADLESS_LOG_ROOT_DIR_CREATE_FAILED 0x06
#define HEADLESS_LOG_PNP_PHASE0_INIT_FAILED 0x07
#define HEADLESS_LOG_PNP_PHASE1_INIT_FAILED 0x08
#define HEADLESS_LOG_BOOT_DRIVERS_INIT_FAILED 0x09
#define HEADLESS_LOG_LOCATE_SYSTEM_DLL_FAILED 0x0A
#define HEADLESS_LOG_SYSTEM_DRIVERS_INIT_FAILED 0x0B
#define HEADLESS_LOG_ASSIGN_SYSTEM_ROOT_FAILED 0x0C
#define HEADLESS_LOG_PROTECT_SYSTEM_ROOT_FAILED 0x0D
#define HEADLESS_LOG_UNICODE_TO_ANSI_FAILED 0x0E
#define HEADLESS_LOG_ANSI_TO_UNICODE_FAILED 0x0F
#define HEADLESS_LOG_FIND_GROUPS_FAILED 0x10
#define HEADLESS_LOG_OUT_OF_MEMORY 0x11
#define HEADLESS_LOG_WAIT_BOOT_DEVICES_DELETE_FAILED 0x12
#define HEADLESS_LOG_WAIT_BOOT_DEVICES_START_FAILED 0x13
#define HEADLESS_LOG_WAIT_BOOT_DEVICES_REINIT_FAILED 0x14
#define HEADLESS_LOG_MARK_BOOT_PARTITION_FAILED 0x15
//
// Global defines for a default vt100 terminal. May be used by clients to size the
// local monitor to match the headless monitor.
//
#define HEADLESS_TERM_DEFAULT_BKGD_COLOR 40
#define HEADLESS_TERM_DEFAULT_TEXT_COLOR 37
#define HEADLESS_SCREEN_HEIGHT 24
//
// Commands that can be submitted to HeadlessDispatch.
//
typedef enum _HEADLESS_CMD { HeadlessCmdEnableTerminal = 1, HeadlessCmdCheckForReboot, HeadlessCmdPutString, HeadlessCmdClearDisplay, HeadlessCmdClearToEndOfDisplay, HeadlessCmdClearToEndOfLine, HeadlessCmdDisplayAttributesOff, HeadlessCmdDisplayInverseVideo, HeadlessCmdSetColor, HeadlessCmdPositionCursor, HeadlessCmdTerminalPoll, HeadlessCmdGetByte, HeadlessCmdGetLine, HeadlessCmdStartBugCheck, HeadlessCmdDoBugCheckProcessing, HeadlessCmdQueryInformation, HeadlessCmdAddLogEntry, HeadlessCmdDisplayLog, HeadlessCmdSetBlueScreenData, HeadlessCmdSendBlueScreenData, HeadlessCmdQueryGUID, HeadlessCmdPutData } HEADLESS_CMD, *PHEADLESS_CMD;
//
//
// Structure definitions for the input buffer for each command type.
//
//
//
// HeadlessCmdEnableTerminal:
// Input structure: Enable, TRUE if to attempt to enable, FALSE if attempt to disable.
//
typedef struct _HEADLESS_CMD_ENABLE_TERMINAL { BOOLEAN Enable; } HEADLESS_CMD_ENABLE_TERMINAL, *PHEADLESS_CMD_ENABLE_TERMINAL;
//
// HeadlessCmdCheckForReboot:
// Response structure: Reboot, TRUE if user typed reboot command on the terminal.
//
typedef struct _HEADLESS_RSP_REBOOT { BOOLEAN Reboot; } HEADLESS_RSP_REBOOT, *PHEADLESS_RSP_REBOOT;
//
// HeadlessCmdPutString:
// Input structure: String, A NULL-terminated string.
//
typedef struct _HEADLESS_CMD_PUT_STRING { UCHAR String[1]; } HEADLESS_CMD_PUT_STRING, *PHEADLESS_CMD_PUT_STRING;
//
// HeadlessCmdClearDisplay:
// HeadlessCmdClearToEndOfDisplay:
// HeadlessCmdClearToEndOfLine:
// HeadlessCmdDisplayAttributesOff:
// HeadlessCmdDisplayInverseVideo:
// HeadlessCmdStartBugCheck:
// HeadlessCmdDoBugCheckProcessing:
// No Input nor Output parameters expected.
//
//
// HeadlessCmdSetColor:
// Input structure: FgColor, BkgColor: Both colors set according to ANSI terminal
// definitons.
//
typedef struct _HEADLESS_CMD_SET_COLOR { ULONG FgColor; ULONG BkgColor; } HEADLESS_CMD_SET_COLOR, *PHEADLESS_CMD_SET_COLOR;
//
// HeadlessCmdPositionCursor:
// Input structure: X, Y: Both values are zero base, with upper left being (0, 0).
//
typedef struct _HEADLESS_CMD_POSITION_CURSOR { ULONG X; ULONG Y; } HEADLESS_CMD_POSITION_CURSOR, *PHEADLESS_CMD_POSITION_CURSOR;
//
// HeadlessCmdTerminalPoll:
// Response structure: QueuedInput, TRUE if input is available, else FALSE.
//
typedef struct _HEADLESS_RSP_POLL { BOOLEAN QueuedInput; } HEADLESS_RSP_POLL, *PHEADLESS_RSP_POLL;
//
// HeadlessCmdGetByte:
// Response structure: Value, 0 if no input is available, else a single byte of input.
//
typedef struct _HEADLESS_RSP_GET_BYTE { UCHAR Value; } HEADLESS_RSP_GET_BYTE, *PHEADLESS_RSP_GET_BYTE;
//
// HeadlessCmdGetLine:
// Response structure: LineComplete, TRUE if the string is filled in, else FALSE becuase
// the user has not yet pressed enter.
// String, the string entered by the user, NULL terminated, with
// leading and trailing whitespace removed.
//
typedef struct _HEADLESS_RSP_GET_LINE { BOOLEAN LineComplete; UCHAR Buffer[1]; } HEADLESS_RSP_GET_LINE, *PHEADLESS_RSP_GET_LINE;
//
// HeadlessCmdQueryInformation:
// Response structure:
//
// PortType - Determines what kind of connection is being used to connect the
// headless terminal to the machine.
//
// If SerialPort, then
// TerminalAttached, TRUE if there is a terminal connected.
// TerminalPort, the port settings used by headless.
//
typedef enum _HEADLESS_TERM_PORT_TYPE { HeadlessUndefinedPortType = 0, HeadlessSerialPort } HEADLESS_TERM_PORT_TYPE, *PHEADLESS_TERM_PORT_TYPE;
typedef enum _HEADLESS_TERM_SERIAL_PORT { SerialPortUndefined = 0, ComPort1, ComPort2, ComPort3, ComPort4 } HEADLESS_TERM_SERIAL_PORT, *PHEADLESS_TERM_SERIAL_PORT;
typedef struct _HEADLESS_RSP_QUERY_INFO { HEADLESS_TERM_PORT_TYPE PortType;
//
// All the possible parameters for each connection type.
//
union { struct { BOOLEAN TerminalAttached; BOOLEAN UsedBiosSettings; HEADLESS_TERM_SERIAL_PORT TerminalPort; PUCHAR TerminalPortBaseAddress; ULONG TerminalBaudRate; UCHAR TerminalType; } Serial;
};
} HEADLESS_RSP_QUERY_INFO, *PHEADLESS_RSP_QUERY_INFO;
//
// HeadlessCmdAddLogEntry:
// Input structure: String, A NULL-terminated string.
//
typedef struct _HEADLESS_CMD_ADD_LOG_ENTRY { WCHAR String[1]; } HEADLESS_CMD_ADD_LOG_ENTRY, *PHEADLESS_CMD_ADD_LOG_ENTRY;
//
// HeadlessCmdDisplayLog:
// Response structure: Paging, TRUE if paging is to be applied, else FALSE.
//
typedef struct _HEADLESS_CMD_DISPLAY_LOG { BOOLEAN Paging; } HEADLESS_CMD_DISPLAY_LOG, *PHEADLESS_CMD_DISPLAY_LOG;
//
// HeadlessCmdSetBlueScreenData
//
// External structure from the API.
// ValueIndex is the index into the data where the XML Data is
// located. Strings are null terminated.
//
// For cross checking, the UCHAR in the Data array before the ValueIndex
// must be a null character. Similarly the last character in the
// entire data buffer passed in must be a null character.
//
typedef struct _HEADLESS_CMD_SET_BLUE_SCREEN_DATA { ULONG ValueIndex; UCHAR Data[1]; } HEADLESS_CMD_SET_BLUE_SCREEN_DATA, *PHEADLESS_CMD_SET_BLUE_SCREEN_DATA;
//
// HeadlessCmdSendBlueScreenData
// The only parameter is the bugcheck code
//
typedef struct _HEADLESS_CMD_SEND_BLUE_SCREEN_DATA { ULONG BugcheckCode; } HEADLESS_CMD_SEND_BLUE_SCREEN_DATA, *PHEADLESS_CMD_SEND_BLUE_SCREEN_DATA;
//
// Headless routines
//
VOID HeadlessInit( IN PLOADER_PARAMETER_BLOCK LoaderBlock );
NTSTATUS HeadlessTerminalAddResources( PCM_RESOURCE_LIST Resources, ULONG ResourceListSize, BOOLEAN TranslatedList, PCM_RESOURCE_LIST *NewList, PULONG NewListSize );
VOID HeadlessKernelAddLogEntry( IN ULONG StringCode, IN PUNICODE_STRING DriverName OPTIONAL );
NTSTATUS HeadlessDispatch( IN HEADLESS_CMD Command, IN PVOID InputBuffer OPTIONAL, IN SIZE_T InputBufferSize OPTIONAL, OUT PVOID OutputBuffer OPTIONAL, OUT PSIZE_T OutputBufferSize OPTIONAL );
#endif // _HDLSTERM_
|