|
|
/*++
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_
|