WindowsXP-SP1/termsrv/inc/mcsioctl.h

304 lines
8.4 KiB
C

/* (C) 1997 Microsoft Corp.
*
* file : MCSIOCTL.h
* author : Erik Mavrinac
*
* description: Definitions for the interface between MCSMUX and PDMCS.
*/
#ifndef __MCSIOCTL_H
#define __MCSIOCTL_H
/*
* Defines
*/
// From uportmsg.h in NetMeeting project (defined there as
// MAXIMUM_DOMAIN_SELECTOR).
#define MaxDomainSelectorLength 32
// Max allowable GCC data for connect-initial and connect-response PDUs.
// Used to reduce memory allocations for handling these PDUs -- if too large
// we will send a bad response PDU and/or disconnect.
#define MaxGCCConnectDataLength 1024
/*
* T.120 IOCTLs.
*/
#define IOCTL_T120_BASE (0x500)
// Used by MCSMUX to signal on a stack IOCTL that the included data is an MCS
// request/response. An MCSXxxYyyIoctl struct is expected as the
// pSdIoctl->InputBuffer; the Header.Type value in the struct will be used
// to determine the type of the request.
#define IOCTL_T120_REQUEST _ICA_CTL_CODE (IOCTL_T120_BASE, METHOD_NEITHER)
/*
* Used as the header of all data passed via IOCTL_T120_REQUEST or channel
* input.
*/
typedef struct {
UserHandle hUser; // PDMCS-supplied handle (NULL for node controller).
int Type; // MCS request/indication type.
} IoctlHeader;
/*
* Connect provider (node controller only). These are special in that they
* only come from user mode and so the assoicated user data (if any)
* will always be packed at the end of the struct by MCSMUX.
*/
// Passed in by node controller. Confirm is defined next.
typedef struct
{
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_REQUEST.
unsigned char CallingDomain[MaxDomainSelectorLength];
unsigned CallingDomainLength;
unsigned char CalledDomain[MaxDomainSelectorLength];
unsigned CalledDomainLength;
BOOLEAN bUpwardConnection;
DomainParameters DomainParams;
unsigned UserDataLength;
BYTE UserData[MaxGCCConnectDataLength];
} ConnectProviderRequestIoctl;
typedef struct
{
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_CONFIRM.
ConnectionHandle hConn;
DomainParameters DomainParams;
MCSResult Result;
} ConnectProviderConfirmIoctl;
// Asynchronous indication triggered when another node connects.
typedef struct
{
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_INDICATION.
ConnectionHandle hConn;
BOOLEAN bUpwardConnection;
DomainParameters DomainParams;
unsigned UserDataLength;
BYTE UserData[MaxGCCConnectDataLength];
} ConnectProviderIndicationIoctl;
// Reply to connect-provider indication.
typedef struct
{
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_RESPONSE.
ConnectionHandle hConn;
MCSResult Result;
unsigned UserDataLength;
BYTE * pUserData;
} ConnectProviderResponseIoctl;
/*
* Disconnect provider (node controller only).
*/
// Passed in by node controller. There is no confirm.
typedef struct
{
IoctlHeader Header; // Contains MCS_DISCONNECT_PROVIDER_REQUEST/INDICATION.
ConnectionHandle hConn;
MCSReason Reason;
} DisconnectProviderRequestIoctl;
// Asynchronous indication.
typedef struct
{
IoctlHeader Header; // Contains MCS_DISCONNECT_PROVIDER_REQUEST/INDICATION.
ConnectionHandle hConn;
MCSReason Reason;
} DisconnectProviderIndicationIoctl;
/*
* Attach user
*/
// Chosen domain is implicit since each PDMCS instance is a domain.
// Header.hUser is filled in during call to contain the user handle.
typedef struct
{
IoctlHeader Header; // Contains MCS_ATTACH_USER_REQUEST.
void *UserDefined;
} AttachUserRequestIoctl;
typedef struct {
UserHandle hUser;
UserID UserID; // Valid only if bCompleted is TRUE.
unsigned MaxSendSize;
MCSError MCSErr;
BOOLEAN bCompleted;
} AttachUserReturnIoctl;
// Used only in the case where an attach-user request was sent across the net
// to the top provider. Hydra 4.0 is always top provider so this is not used.
typedef struct
{
IoctlHeader Header; // Contains MCS_ATTACH_USER_CONFIRM.
UserHandle hUser;
void *UserDefined; // As passed into attach-user request.
MCSResult Result;
} AttachUserConfirmIoctl;
/*
* Detach user
*/
// Passed in by application. This is synchronous -- no confirm is issued.
typedef struct
{
IoctlHeader Header; // Contains MCS_DETACH_USER_REQUEST and the hUser.
} DetachUserRequestIoctl;
// Asynchronous indication triggered when another user detaches.
typedef struct
{
IoctlHeader Header; // Contains MCS_DETACH_USER_INDICATION.
void *UserDefined; // As passed into attach-user request.
DetachUserIndication DUin;
} DetachUserIndicationIoctl;
/*
* Channel join
*/
// Passed in by application. Confirm is defined next.
typedef struct
{
IoctlHeader Header; // Contains MCS_CHANNEL_JOIN_REQUEST.
ChannelID ChannelID;
} ChannelJoinRequestIoctl;
typedef struct
{
ChannelHandle hChannel;
ChannelID ChannelID; // Valid only if bCompleted is TRUE.
MCSError MCSErr;
BOOLEAN bCompleted;
} ChannelJoinReturnIoctl;
// Used in the case where a channel-join request is sent across the net to
// the top provider. Should not be used in Hydra 4.0 -- we are always TP.
typedef struct
{
IoctlHeader Header; // Contains MCS_CHANNEL_JOIN_CONFIRM.
void *UserDefined; // As passed into attach-user request.
MCSResult Result;
ChannelID ChannelID;
} ChannelJoinConfirmIoctl;
/*
* Channel leave
*/
// Passed in by application. This is synchronous -- no confirm is issued.
typedef struct
{
IoctlHeader Header; // Contains MCS_CHANNEL_LEAVE_REQUEST.
ChannelHandle hChannel;
} ChannelLeaveRequestIoctl;
/*
* (Uniform) send data
*/
// Asynchronous indication triggered when data arrives. Used by both
// send-data and uniform-send-data indications.
// Data is packed right after this struct.
typedef struct
{
IoctlHeader Header; // Contains (UNIFORM)SEND_DATA_INDICATION.
void *UserDefined; // As passed into attach-user request.
ChannelHandle hChannel;
UserID SenderID;
MCSPriority Priority;
Segmentation Segmentation;
unsigned DataLength;
} SendDataIndicationIoctl;
// Passed in by application. This is synchronous -- no confirm is issued.
// This struct is used both for send-data and uniform-send-data requests.
typedef struct
{
IoctlHeader Header; // Contains (UNIFORM_)MCS_SEND_DATA_REQUEST.
DataRequestType RequestType; // Redundant but useful info.
ChannelHandle hChannel; // Kernel-mode hChannel.
ChannelID ChannelID; // If hChn==NULL, unjoined chn to send to.
MCSPriority Priority;
Segmentation Segmentation;
unsigned DataLength;
} SendDataRequestIoctl;
/*
* Request and response types for use in differentiating requests.
*/
// User attachment requests.
// These values must be contiguously numbered, since a dispatch table is used
// to quickly call handler functions.
#define MCS_ATTACH_USER_REQUEST 0
#define MCS_DETACH_USER_REQUEST 1
#define MCS_CHANNEL_JOIN_REQUEST 2
#define MCS_CHANNEL_LEAVE_REQUEST 3
#define MCS_SEND_DATA_REQUEST 4
#define MCS_UNIFORM_SEND_DATA_REQUEST 5
#define MCS_CHANNEL_CONVENE_REQUEST 6
#define MCS_CHANNEL_DISBAND_REQUEST 7
#define MCS_CHANNEL_ADMIT_REQUEST 8
#define MCS_CHANNEL_EXPEL_REQUEST 9
#define MCS_TOKEN_GRAB_REQUEST 10
#define MCS_TOKEN_INHIBIT_REQUEST 11
#define MCS_TOKEN_GIVE_REQUEST 12
#define MCS_TOKEN_GIVE_RESPONSE 13
#define MCS_TOKEN_PLEASE_REQUEST 14
#define MCS_TOKEN_RELEASE_REQUEST 15
#define MCS_TOKEN_TEST_REQUEST 16
// NC-only requests.
#define MCS_CONNECT_PROVIDER_REQUEST 17
#define MCS_CONNECT_PROVIDER_RESPONSE 18
#define MCS_DISCONNECT_PROVIDER_REQUEST 19
// Startup synchonization trigger. This message is sent when the rest of the
// system is ready for MCS to start processing inputs.
#define MCS_T120_START 20
/*
* ICA virtual channel definitions for the T.120 input channel.
*/
#define Virtual_T120 "MS_T120"
#define Virtual_T120ChannelNum 31
#endif // !defined(__MCSIOCTL_H)