/*++ Copyright(c) 2000-2001 Microsoft Corporation Module Name: sacioctl.h Abstract: This module contains the public header information for communicating to and from the SAC via IOCTLs. Author: Sean Selitrennikoff (v-seans) Oct, 2000 Brian Guarraci (briangu), 2001 Revision History: --*/ #ifndef _SACIOCTL_ #define _SACIOCTL_ // // This enables the ability to register a lock event // which when fired indicates that the channel should lock itself. // #define ENABLE_CHANNEL_LOCKING 1 // // This is the maxium length a channel name may be, not including the NULL terminator // #define SAC_MAX_CHANNEL_NAME_LENGTH 64 #define SAC_MAX_CHANNEL_NAME_SIZE ((SAC_MAX_CHANNEL_NAME_LENGTH+1)*sizeof(WCHAR)) #define SAC_MAX_CHANNEL_DESCRIPTION_LENGTH 256 #define SAC_MAX_CHANNEL_DESCRIPTION_SIZE ((SAC_MAX_CHANNEL_DESCRIPTION_LENGTH+1)*sizeof(WCHAR)) // // IOCTL defs // #define IOCTL_SAC_OPEN_CHANNEL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x1, METHOD_BUFFERED, FILE_WRITE_DATA) #define IOCTL_SAC_CLOSE_CHANNEL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2, METHOD_BUFFERED, FILE_WRITE_DATA) #define IOCTL_SAC_WRITE_CHANNEL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x3, METHOD_BUFFERED, FILE_WRITE_DATA) #define IOCTL_SAC_READ_CHANNEL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x4, METHOD_BUFFERED, FILE_READ_DATA) #define IOCTL_SAC_POLL_CHANNEL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x5, METHOD_BUFFERED, FILE_READ_DATA) #define IOCTL_SAC_REGISTER_CMD_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x6, METHOD_BUFFERED, FILE_WRITE_DATA) #define IOCTL_SAC_UNREGISTER_CMD_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x7, METHOD_BUFFERED, FILE_WRITE_DATA) #if 0 #define IOCTL_SAC_GET_CHANNEL_ATTRIBUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x8, METHOD_BUFFERED, FILE_READ_DATA) #define IOCTL_SAC_SET_CHANNEL_ATTRIBUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x9, METHOD_BUFFERED, FILE_WRITE_DATA) #endif // // Structure to be use to refer to a channel when // using the IOCTL interface. // typedef struct _SAC_CHANNEL_HANDLE { GUID ChannelHandle; HANDLE DriverHandle; } SAC_CHANNEL_HANDLE, *PSAC_CHANNEL_HANDLE; // // Define the channel types that can be created // typedef enum _SAC_CHANNEL_TYPE { ChannelTypeVTUTF8, ChannelTypeRaw, ChannelTypeCmd } SAC_CHANNEL_TYPE, *PSAC_CHANNEL_TYPE; // // IOCTL_SAC_OPEN_CHANNEL. // // Flags typedef ULONG SAC_CHANNEL_FLAG; typedef PULONG PSAC_CHANNEL_FLAG; #define SAC_CHANNEL_FLAG_PRESERVE 0x01 #define SAC_CHANNEL_FLAG_CLOSE_EVENT 0x02 #define SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT 0x04 #define SAC_CHANNEL_FLAG_LOCK_EVENT 0x08 #define SAC_CHANNEL_FLAG_REDRAW_EVENT 0x10 #define SAC_CHANNEL_FLAG_APPLICATION_TYPE 0x20 // // Structure used by to describe // the attributes of the channel wanting to be created // typedef struct _SAC_CHANNEL_OPEN_ATTRIBUTES { SAC_CHANNEL_TYPE Type; WCHAR Name[SAC_MAX_CHANNEL_NAME_LENGTH+1]; WCHAR Description[SAC_MAX_CHANNEL_DESCRIPTION_LENGTH+1]; SAC_CHANNEL_FLAG Flags; HANDLE CloseEvent; OPTIONAL HANDLE HasNewDataEvent; OPTIONAL HANDLE LockEvent; OPTIONAL HANDLE RedrawEvent; OPTIONAL GUID ApplicationType; OPTIONAL } SAC_CHANNEL_OPEN_ATTRIBUTES, *PSAC_CHANNEL_OPEN_ATTRIBUTES; typedef struct _SAC_CMD_OPEN_CHANNEL { SAC_CHANNEL_OPEN_ATTRIBUTES Attributes; } SAC_CMD_OPEN_CHANNEL, *PSAC_CMD_OPEN_CHANNEL; // // This is the response struct for an IOCTL_SAC_OPEN_CHANNEL. // typedef struct _SAC_RSP_OPEN_CHANNEL { SAC_CHANNEL_HANDLE Handle; } SAC_RSP_OPEN_CHANNEL, *PSAC_RSP_OPEN_CHANNEL; // // IOCTL_SAC_CLOSE_CHANNEL. // Handle is value returned by IOCTL_SAC_OPEN_CHANNEL. // typedef struct _SAC_CMD_CLOSE_CHANNEL { SAC_CHANNEL_HANDLE Handle; } SAC_CMD_CLOSE_CHANNEL, *PSAC_CMD_CLOSE_CHANNEL; // // IOCTL_SAC_WRITE_CHANNEL. // Handle is value returned by IOCTL_SAC_OPEN_CHANNEL. // typedef struct _SAC_CMD_WRITE_CHANNEL { SAC_CHANNEL_HANDLE Handle; ULONG Size; // The # of bytes in String to process UCHAR Buffer[1]; // byte buffer } SAC_CMD_WRITE_CHANNEL, *PSAC_CMD_WRITE_CHANNEL; // // IOCTL_SAC_READ_CHANNEL. // Handle is value returned by IOCTL_SAC_OPEN_CHANNEL. // typedef struct _SAC_CMD_READ_CHANNEL { SAC_CHANNEL_HANDLE Handle; } SAC_CMD_READ_CHANNEL, *PSAC_CMD_READ_CHANNEL; // // Response structure fore the IOCTL_SAC_READ_CHANNEL // // Note: BufferSize is returned as the response size // in the IOCTL call. // typedef struct _SAC_RSP_READ_CHANNEL { UCHAR Buffer[1]; // A NULL terminated string. } SAC_RSP_READ_CHANNEL, *PSAC_RSP_READ_CHANNEL; // // This is the struct for an IOCTL_SAC_POLL_CHANNEL. // Handle is value returned by IOCTL_SAC_OPEN_CHANNEL. // typedef struct _SAC_CMD_POLL_CHANNEL { SAC_CHANNEL_HANDLE Handle; } SAC_CMD_POLL_CHANNEL, *PSAC_CMD_POLL_CHANNEL; // // Reponse structure for IOCTL_SAC_POLL_CHANNEL // typedef struct _SAC_RSP_POLL_CHANNEL { BOOLEAN InputWaiting; } SAC_RSP_POLL_CHANNEL, *PSAC_RSP_POLL_CHANNEL; // // Define the attributes applications may modify // typedef enum _SAC_CHANNEL_ATTRIBUTE { ChannelAttributeStatus, ChannelAttributeType, ChannelAttributeName, ChannelAttributeDescription, ChannelAttributeApplicationType, ChannelAttributeFlags } SAC_CHANNEL_ATTRIBUTE, *PSAC_CHANNEL_ATTRIBUTE; // // Define the possible channel states // typedef enum _SAC_CHANNEL_STATUS { ChannelStatusInactive = 0, ChannelStatusActive } SAC_CHANNEL_STATUS, *PSAC_CHANNEL_STATUS; #if 0 // // Command structure for getting a channel attribute // typedef struct _SAC_CMD_GET_CHANNEL_ATTRIBUTE { SAC_CHANNEL_HANDLE Handle; SAC_CHANNEL_ATTRIBUTE Attribute; } SAC_CMD_GET_CHANNEL_ATTRIBUTE, *PSAC_CMD_GET_CHANNEL_ATTRIBUTE; // // Response structure for getting a channel attribute // typedef struct _SAC_RSP_GET_CHANNEL_ATTRIBUTE { union { SAC_CHANNEL_STATUS ChannelStatus; SAC_CHANNEL_TYPE ChannelType; WCHAR ChannelName[SAC_MAX_CHANNEL_NAME_LENGTH+1]; WCHAR ChannelDescription[SAC_MAX_CHANNEL_DESCRIPTION_LENGTH+1]; GUID ChannelApplicationType; SAC_CHANNEL_FLAG ChannelFlags; }; } SAC_RSP_GET_CHANNEL_ATTRIBUTE, *PSAC_RSP_GET_CHANNEL_ATTRIBUTE; // // Command structure for setting a channel attribute // typedef struct _SAC_CMD_SET_CHANNEL_ATTRIBUTE { SAC_CHANNEL_HANDLE Handle; SAC_CHANNEL_ATTRIBUTE Attribute; union { WCHAR ChannelName[SAC_MAX_CHANNEL_NAME_LENGTH+1]; WCHAR ChannelDescription[SAC_MAX_CHANNEL_DESCRIPTION_LENGTH+1]; GUID ChannelApplicationType; SAC_CHANNEL_FLAG ChannelFlags; }; } SAC_CMD_SET_CHANNEL_ATTRIBUTE, *PSAC_CMD_SET_CHANNEL_ATTRIBUTE; #endif // // IOCTL_SAC_REGISTER_CMD_EVENT // // Command structure for setting the command console event info // typedef struct _SAC_CMD_REGISTER_CMD_EVENT { // // Handles of events used for communication between // device driver and the user-mode app. // HANDLE RequestSacCmdEvent; // // Handles of the events indicating the result // of the command console launch // HANDLE RequestSacCmdSuccessEvent; HANDLE RequestSacCmdFailureEvent; } SAC_CMD_SETUP_CMD_EVENT, *PSAC_CMD_SETUP_CMD_EVENT; #endif // _SACIOCTL_