Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* (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)
|