mirror of https://github.com/UMSKT/xpmgr.git
812 lines
28 KiB
C
812 lines
28 KiB
C
/*********************************************************************
|
|
*
|
|
* WTSDEFS.H
|
|
*
|
|
* Windows Terminal Server Interface Header File
|
|
*
|
|
* Copyright (c) 1997-2001 Microsoft Corporation
|
|
*
|
|
**********************************************************************/
|
|
|
|
#ifndef _INC_WTSDEFS
|
|
#define _INC_WTSDEFS
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/*****************************************************************
|
|
* DEFINES
|
|
****************************************************************/
|
|
|
|
#define WTS_DOMAIN_LENGTH 255
|
|
#define WTS_USERNAME_LENGTH 255
|
|
#define WTS_PASSWORD_LENGTH 255
|
|
#define WTS_DIRECTORY_LENGTH 256
|
|
#define WTS_INITIALPROGRAM_LENGTH 256
|
|
#define WTS_PROTOCOL_NAME_LENGTH 8
|
|
#define WTS_DRIVER_NAME_LENGTH 8
|
|
#define WTS_DEVICE_NAME_LENGTH 19
|
|
#define WTS_IMEFILENAME_LENGTH 32
|
|
#define WTS_CLIENTNAME_LENGTH 20
|
|
#define WTS_CLIENTADDRESS_LENGTH 30
|
|
#define WTS_CLIENT_PRODUCT_ID_LENGTH 32
|
|
#define WTS_MAX_PROTOCOL_CACHE 4
|
|
#define WTS_MAX_CACHE_RESERVED 20
|
|
#define WTS_MAX_RESERVED 100
|
|
#define WTS_MAX_COUNTERS 100
|
|
#define WTS_MAX_DISPLAY_IOCTL_DATA 256
|
|
|
|
//
|
|
// Fields used in the PerformanceFlags property in WTS_CONNECTION_CONFIG
|
|
// Setting a flag disables that feature
|
|
//
|
|
#define WTS_PERF_DISABLE_NOTHING 0x00000000
|
|
#define WTS_PERF_DISABLE_WALLPAPER 0x00000001
|
|
#define WTS_PERF_DISABLE_FULLWINDOWDRAG 0x00000002
|
|
#define WTS_PERF_DISABLE_MENUANIMATIONS 0x00000004
|
|
#define WTS_PERF_DISABLE_THEMING 0x00000008
|
|
#define WTS_PERF_ENABLE_ENHANCED_GRAPHICS 0x00000010
|
|
#define WTS_PERF_DISABLE_CURSOR_SHADOW 0x00000020
|
|
#define WTS_PERF_DISABLE_CURSORSETTINGS 0x00000040
|
|
#define WTS_PERF_ENABLE_FONT_SMOOTHING 0x00000080
|
|
#define WTS_PERF_ENABLE_DESKTOP_COMPOSITION 0x00000100
|
|
|
|
|
|
/*****************************************************************
|
|
* STRUCTURES
|
|
****************************************************************/
|
|
|
|
typedef BYTE *PBYTE;
|
|
|
|
// IP address
|
|
//
|
|
typedef struct _WTS_SOCKADDR {
|
|
#ifdef __midl
|
|
USHORT sin_family;
|
|
union switch (unsigned short sin_family) u
|
|
{
|
|
case 2: // AF_INET
|
|
struct{
|
|
USHORT sin_port;
|
|
ULONG in_addr;
|
|
UCHAR sin_zero[8];
|
|
} ipv4;
|
|
case 23: // AF_INET6
|
|
struct {
|
|
USHORT sin6_port;
|
|
ULONG sin6_flowinfo;
|
|
USHORT sin6_addr[8];
|
|
ULONG sin6_scope_id;
|
|
} ipv6;
|
|
};
|
|
#else
|
|
USHORT sin_family;
|
|
union {
|
|
struct{
|
|
USHORT sin_port;
|
|
ULONG in_addr;
|
|
UCHAR sin_zero[8];
|
|
} ipv4;
|
|
struct {
|
|
USHORT sin6_port;
|
|
ULONG sin6_flowinfo;
|
|
USHORT sin6_addr[8];
|
|
ULONG sin6_scope_id;
|
|
} ipv6;
|
|
} u;
|
|
#endif
|
|
} WTS_SOCKADDR, *PWTS_SOCKADDR;
|
|
|
|
typedef struct _WTS_SMALL_RECT {
|
|
SHORT Left;
|
|
SHORT Top;
|
|
SHORT Right;
|
|
SHORT Bottom;
|
|
} WTS_SMALL_RECT, *PWTS_SMALL_RECT;
|
|
|
|
// =================================================================
|
|
// Service State Change
|
|
// =================================================================
|
|
typedef enum {
|
|
WTS_SERVICE_NONE, // No service (start/stop) state change
|
|
WTS_SERVICE_START, // RCM Service starting
|
|
WTS_SERVICE_STOP // RCM Service stopping
|
|
} WTS_RCM_SERVICE_STATE;
|
|
|
|
typedef enum {
|
|
WTS_DRAIN_STATE_NONE, // No drain state change
|
|
WTS_DRAIN_IN_DRAIN, // RCM In drain.
|
|
WTS_DRAIN_NOT_IN_DRAIN // RCM Out of drain.
|
|
} WTS_RCM_DRAIN_STATE;
|
|
|
|
typedef struct _WTS_SERVICE_STATE {
|
|
WTS_RCM_SERVICE_STATE RcmServiceState;
|
|
WTS_RCM_DRAIN_STATE RcmDrainState;
|
|
}WTS_SERVICE_STATE, *PWTS_SERVICE_STATE;
|
|
|
|
typedef struct _WTS_SESSION_ID {
|
|
GUID SessionUniqueGuid;
|
|
ULONG SessionId;
|
|
}WTS_SESSION_ID, *PWTS_SESSION_ID;
|
|
|
|
typedef struct _WTS_USER_CREDENTIAL {
|
|
WCHAR UserName[ WTS_USERNAME_LENGTH + 1 ];
|
|
WCHAR Password[ WTS_PASSWORD_LENGTH + 1 ];
|
|
WCHAR Domain[ WTS_DOMAIN_LENGTH + 1 ];
|
|
} WTS_USER_CREDENTIAL, *PWTS_USER_CREDENTIAL;
|
|
|
|
|
|
/* -------------------------------------------------------------------
|
|
* Structures used to query connectoin specific data from the protocol
|
|
* ------------------------------------------------------------------*/
|
|
typedef struct _WTS_SYSTEMTIME {
|
|
USHORT wYear;
|
|
USHORT wMonth;
|
|
USHORT wDayOfWeek;
|
|
USHORT wDay;
|
|
USHORT wHour;
|
|
USHORT wMinute;
|
|
USHORT wSecond;
|
|
USHORT wMilliseconds;
|
|
} WTS_SYSTEMTIME, *PWTS_SYSTEMTIME;
|
|
|
|
typedef struct _WTS_TIME_ZONE_INFORMATION {
|
|
LONG Bias;
|
|
WCHAR StandardName[ 32 ];
|
|
WTS_SYSTEMTIME StandardDate;
|
|
LONG StandardBias;
|
|
WCHAR DaylightName[ 32 ];
|
|
WTS_SYSTEMTIME DaylightDate;
|
|
LONG DaylightBias;
|
|
} WTS_TIME_ZONE_INFORMATION, *PWTS_TIME_ZONE_INFORMATION;
|
|
|
|
typedef struct _WTS_CLIENT_DATA {
|
|
|
|
/* --------------------------------------------------------
|
|
* Properties that will be used by RCM for the session.
|
|
* These MIGHT be exposed through WTSAPI
|
|
* -------------------------------------------------------*/
|
|
|
|
// Disable Ctrl-Atl-Del
|
|
BOOLEAN fDisableCtrlAltDel;
|
|
|
|
// Detect Double Click
|
|
BOOLEAN fDoubleClickDetect;
|
|
|
|
// Enable Windows key
|
|
// Will be sent to win32k
|
|
BOOLEAN fEnableWindowsKey;
|
|
|
|
// Hide the title bar
|
|
// Will be sent to win32k
|
|
BOOLEAN fHideTitleBar;
|
|
|
|
// This will overwrite the fInheritAutoLogon flag
|
|
// from listener registry
|
|
BOOL fInheritAutoLogon;
|
|
|
|
// Prompt for password even if autologon set
|
|
// Will be used if fInheritAutoLogon is set
|
|
// and policy not set on the machine
|
|
BOOLEAN fPromptForPassword;
|
|
|
|
// Client used saved credentials
|
|
BOOLEAN fUsingSavedCreds;
|
|
|
|
// User credentials
|
|
// Will be used if fInheritAutoLogon is set
|
|
WCHAR Domain[WTS_DOMAIN_LENGTH + 1]; // WTS_DOMAIN_LENGTH + 1
|
|
WCHAR UserName[ WTS_USERNAME_LENGTH + 1 ];
|
|
WCHAR Password[ WTS_PASSWORD_LENGTH + 1 ];
|
|
|
|
// Smartcard PIN is used to log in
|
|
// Will be used if fInheritAutoLogon is set
|
|
BOOLEAN fPasswordIsScPin;
|
|
|
|
// This will overwrite the fInheritInitialProgram flag
|
|
// from listener registry
|
|
BOOL fInheritInitialProgram;
|
|
|
|
// Working directory
|
|
// Will be used if fInheritInitialProgram is set
|
|
WCHAR WorkDirectory[ WTS_DIRECTORY_LENGTH + 1 ];
|
|
|
|
// Intial Program to start in TS session
|
|
// Will be used if fInheritInitialProgram is set
|
|
WCHAR InitialProgram[ WTS_INITIALPROGRAM_LENGTH + 1 ];
|
|
|
|
// Maximize the shell
|
|
// Will be used if fInheritInitialProgram is set
|
|
BOOLEAN fMaximizeShell;
|
|
|
|
// Security level of encryption
|
|
BYTE EncryptionLevel;
|
|
|
|
// List of features to disable for perf
|
|
// Will be used to disable specific features
|
|
ULONG PerformanceFlags;
|
|
|
|
// Name of the protocol
|
|
// Will be sent to win32k
|
|
WCHAR ProtocolName[ WTS_PROTOCOL_NAME_LENGTH + 1 ];
|
|
|
|
// Protocol type
|
|
USHORT ProtocolType;
|
|
|
|
// This will overwrite the fInheritColorDepth flag
|
|
// from listener registry
|
|
BOOL fInheritColorDepth;
|
|
|
|
// Display properties
|
|
// Will be sent to win32k
|
|
USHORT HRes;
|
|
USHORT VRes;
|
|
USHORT ColorDepth;
|
|
WCHAR DisplayDriverName[ WTS_DRIVER_NAME_LENGTH + 1 ];
|
|
WCHAR DisplayDeviceName[ WTS_DEVICE_NAME_LENGTH + 1 ];
|
|
|
|
// Enable Mouse input
|
|
// Will be sent to win32k
|
|
BOOLEAN fMouse;
|
|
|
|
// Keyboard information
|
|
// Will be sent to win32k
|
|
ULONG KeyboardLayout;
|
|
ULONG KeyboardType;
|
|
ULONG KeyboardSubType;
|
|
ULONG KeyboardFunctionKey;
|
|
WCHAR imeFileName[ WTS_IMEFILENAME_LENGTH + 1 ];
|
|
|
|
// Client's active input locale HKL
|
|
ULONG ActiveInputLocale;
|
|
|
|
// Client selected no audio
|
|
BOOLEAN fNoAudioPlayback;
|
|
|
|
// Client selected leave audio at remote computer
|
|
BOOLEAN fRemoteConsoleAudio;
|
|
|
|
// Name of the audio driver
|
|
// Will be sent to win32k
|
|
WCHAR AudioDriverName[ WTS_DRIVER_NAME_LENGTH + 1 ];
|
|
|
|
// Client time zone information
|
|
// Will be sent to win32k
|
|
WTS_TIME_ZONE_INFORMATION ClientTimeZone;
|
|
|
|
/* ----------------------------------------------------
|
|
* Properties that are not used by RCM but exposed
|
|
* through WTS API
|
|
* ---------------------------------------------------*/
|
|
|
|
// Client machine name
|
|
WCHAR ClientName[ WTS_CLIENTNAME_LENGTH + 1 ];
|
|
|
|
// Client computer's unique serial number
|
|
ULONG SerialNumber;
|
|
|
|
// Client IP address
|
|
ULONG ClientAddressFamily;
|
|
WCHAR ClientAddress[ WTS_CLIENTADDRESS_LENGTH + 1 ];
|
|
WTS_SOCKADDR ClientSockAddress;
|
|
|
|
// Client Directory
|
|
WCHAR ClientDirectory[ WTS_DIRECTORY_LENGTH + 1 ];
|
|
|
|
// Client build number
|
|
ULONG ClientBuildNumber;
|
|
|
|
// Client software product id
|
|
USHORT ClientProductId;
|
|
|
|
// number of output buffers on host
|
|
USHORT OutBufCountHost;
|
|
|
|
// number of output buffers on client
|
|
USHORT OutBufCountClient;
|
|
|
|
// length of output buffers in bytes
|
|
USHORT OutBufLength;
|
|
|
|
// Client Session ID
|
|
ULONG ClientSessionId;
|
|
|
|
// Client Product ID
|
|
WCHAR ClientDigProductId[ WTS_CLIENT_PRODUCT_ID_LENGTH + 1 ];
|
|
|
|
// ******* REDIRECTIONS ********//
|
|
// These will be prepopulated with data from policies
|
|
// Changing them will led to policies being overwritten
|
|
|
|
// Disable Printer Mapping
|
|
BOOLEAN fDisableCpm;
|
|
|
|
// Disable Drive Mapping
|
|
BOOLEAN fDisableCdm;
|
|
|
|
// Disable COM port Mapping
|
|
BOOLEAN fDisableCcm;
|
|
|
|
// Disable LPT printer redirection
|
|
BOOLEAN fDisableLPT;
|
|
|
|
// Disable Clipboard redirection
|
|
BOOLEAN fDisableClip;
|
|
|
|
// Disable PNP redirection
|
|
BOOLEAN fDisablePNP;
|
|
} WTS_CLIENT_DATA, *PWTS_CLIENT_DATA;
|
|
|
|
typedef struct _WTS_USER_DATA {
|
|
|
|
/* --------------------------------------------------------
|
|
* Should be filled in with user specific properties.
|
|
* Queried after user has logged in and User GP merged.
|
|
* This will be pre-populated with client data. Hence if user
|
|
* property doesn't exist for any field, do not change it.
|
|
* -------------------------------------------------------*/
|
|
|
|
// Corresponding to WorkDirectory in WTS_CLIENT_DATA
|
|
WCHAR WorkDirectory[ WTS_DIRECTORY_LENGTH + 1 ];
|
|
|
|
// Corresponding to InitialProgram in WTS_CLIENT_DATA
|
|
WCHAR InitialProgram[ WTS_INITIALPROGRAM_LENGTH + 1 ];
|
|
|
|
// Corresponding to ClientTimeZone in WTS_CLIENT_DATA
|
|
WTS_TIME_ZONE_INFORMATION UserTimeZone;
|
|
|
|
}WTS_USER_DATA, *PWTS_USER_DATA;
|
|
|
|
/* -------------------------------------------------------------------
|
|
* Structures used to pass down policy data to the protocol
|
|
* ------------------------------------------------------------------*/
|
|
typedef struct _WTS_POLICY_DATA {
|
|
// Disable encryption
|
|
BOOLEAN fDisableEncryption;
|
|
|
|
// Disable auto-reconnect
|
|
BOOLEAN fDisableAutoReconnect;
|
|
|
|
// Color Depth
|
|
ULONG ColorDepth;
|
|
|
|
// Minimum allowed Encryption Level
|
|
BYTE MinEncryptionLevel;
|
|
|
|
// ******* REDIRECTIONS ********//
|
|
// Disable Printer Mapping
|
|
BOOLEAN fDisableCpm;
|
|
|
|
// Disable Drive Mapping
|
|
BOOLEAN fDisableCdm;
|
|
|
|
// Disable COM port Mapping
|
|
BOOLEAN fDisableCcm;
|
|
|
|
// Disable LPT printer redirection
|
|
BOOLEAN fDisableLPT;
|
|
|
|
// Disable Clipboard redirection
|
|
BOOLEAN fDisableClip;
|
|
|
|
// Disable PNP redirection
|
|
BOOLEAN fDisablePNPRedir;
|
|
} WTS_POLICY_DATA, *PWTS_POLICY_DATA;
|
|
|
|
/* -------------------------------------------------------------------
|
|
* Structures used to query performance data from the protocol using
|
|
* GetProtocolStatus call
|
|
* -------------------------------------------------------------------*/
|
|
|
|
// Protocol Cache stats
|
|
//
|
|
typedef struct _WTS_PROTOCOL_CACHE {
|
|
ULONG CacheReads;
|
|
ULONG CacheHits;
|
|
} WTS_PROTOCOL_CACHE, *PWTS_PROTOCOL_CACHE;
|
|
|
|
// Union of Protocol cache, TShare Cache and Reserved stats
|
|
//
|
|
#ifdef __midl
|
|
typedef [switch_type(DWORD)] union _WTS_CACHE_STATS_UN {
|
|
[case(1)]
|
|
WTS_PROTOCOL_CACHE ProtocolCache[ WTS_MAX_PROTOCOL_CACHE ];
|
|
[case(2)]
|
|
ULONG TShareCacheStats;
|
|
[case(3)]
|
|
ULONG Reserved[ WTS_MAX_CACHE_RESERVED ]; // Protocol specific Reserved data
|
|
} WTS_CACHE_STATS_UN, *PWTS_CACHE_STATS_UN;
|
|
|
|
// Cache Statistics
|
|
//
|
|
typedef struct _WTS_CACHE_STATS {
|
|
DWORD Specific;
|
|
[switch_is(Specific)] WTS_CACHE_STATS_UN Data;
|
|
USHORT ProtocolType; // Protocol Type
|
|
USHORT Length; // Length of Data
|
|
} WTS_CACHE_STATS, *PWTS_CACHE_STATS;
|
|
#else
|
|
typedef union _WTS_CACHE_STATS_UN {
|
|
WTS_PROTOCOL_CACHE ProtocolCache[ WTS_MAX_PROTOCOL_CACHE ];
|
|
ULONG TShareCacheStats;
|
|
ULONG Reserved[ WTS_MAX_CACHE_RESERVED ]; // Protocol specific Reserved data
|
|
} WTS_CACHE_STATS_UN, *PWTS_CACHE_STATS_UN;
|
|
|
|
// Cache Statistics
|
|
//
|
|
typedef struct _WTS_CACHE_STATS {
|
|
DWORD Specific;
|
|
WTS_CACHE_STATS_UN Data;
|
|
USHORT ProtocolType; // Protocol Type
|
|
USHORT Length; // Length of Data
|
|
} WTS_CACHE_STATS, *PWTS_CACHE_STATS;
|
|
#endif
|
|
|
|
// Protocol Counters Data
|
|
//
|
|
typedef struct _WTS_PROTOCOL_COUNTERS {
|
|
ULONG WdBytes; // wd common
|
|
ULONG WdFrames; // wd common
|
|
ULONG WaitForOutBuf; // wd common
|
|
ULONG Frames; // td common
|
|
ULONG Bytes; // td common
|
|
ULONG CompressedBytes; // pdcomp
|
|
ULONG CompressFlushes; // pdcomp
|
|
ULONG Errors; // pdreli
|
|
ULONG Timeouts; // pdreli
|
|
ULONG AsyncFramingError; // pdasync
|
|
ULONG AsyncOverrunError; // pdasync
|
|
ULONG AsyncOverflowError; // pdasync
|
|
ULONG AsyncParityError; // pdasync
|
|
ULONG TdErrors; // td common
|
|
USHORT ProtocolType; // Protocol Type
|
|
USHORT Length; // Length of Reserved
|
|
USHORT Specific; // Specifies type of Reserved
|
|
ULONG Reserved[ WTS_MAX_RESERVED ];
|
|
} WTS_PROTOCOL_COUNTERS, * PWTS_PROTOCOL_COUNTERS;
|
|
|
|
// Protocol Status
|
|
//
|
|
typedef struct _WTS_PROTOCOL_STATUS {
|
|
WTS_PROTOCOL_COUNTERS Output;
|
|
WTS_PROTOCOL_COUNTERS Input;
|
|
WTS_CACHE_STATS Cache;
|
|
ULONG AsyncSignal; // MS_CTS_ON, MS_DSR_ON, etc...
|
|
ULONG AsyncSignalMask; // EV_CTS, EV_DSR, etc...
|
|
LARGE_INTEGER Counters[ WTS_MAX_COUNTERS ];
|
|
} WTS_PROTOCOL_STATUS, * PWTS_PROTOCOL_STATUS;
|
|
|
|
// Display IOCTL data
|
|
typedef struct _WTS_DISPLAY_IOCTL {
|
|
BYTE pDisplayIOCtlData[ WTS_MAX_DISPLAY_IOCTL_DATA ];
|
|
ULONG cbDisplayIOCtlData;
|
|
} WTS_DISPLAY_IOCTL, * PWTS_DISPLAY_IOCTL;
|
|
|
|
/* -------------------------------------------------------------------
|
|
* LogonUI Error Redirector Response
|
|
* -------------------------------------------------------------------*/
|
|
typedef enum _WTS_LOGON_ERROR_REDIRECTOR_RESPONSE
|
|
{
|
|
// Used only as a safe initialization value.
|
|
WTS_LOGON_ERR_INVALID = 0,
|
|
|
|
// The call was not handled by the redirector.
|
|
// The call should be handled normally by LogonUI.
|
|
WTS_LOGON_ERR_NOT_HANDLED,
|
|
|
|
// The call was handled by the redirector.
|
|
// LogonUI should paint itself normally.
|
|
WTS_LOGON_ERR_HANDLED_SHOW,
|
|
|
|
// The call was handled by the redirector and should not be passed to
|
|
// the next redirector. LogonUI should not paint the normal error screen.
|
|
// LogonUI will then attempt to gather credentials again.
|
|
WTS_LOGON_ERR_HANDLED_DONT_SHOW,
|
|
|
|
// The call was handled by the redirector and should not be passed to
|
|
// the next redirector. LogonUI should not show itself and should
|
|
// NOT attempt to gather credentials again.
|
|
WTS_LOGON_ERR_HANDLED_DONT_SHOW_START_OVER,
|
|
|
|
} WTS_LOGON_ERROR_REDIRECTOR_RESPONSE;
|
|
|
|
|
|
/* -------------------------------------------------------------------
|
|
* QueryProperty GUIDs
|
|
* These are the mandatory properties that the protocol must implement.
|
|
* For any other QueryProperty that the protocol doesn't understand,
|
|
* it should return E_NOTIMPL
|
|
* -------------------------------------------------------------------*/
|
|
|
|
#define WTS_VALUE_TYPE_ULONG 1
|
|
#define WTS_VALUE_TYPE_STRING 2
|
|
#define WTS_VALUE_TYPE_BINARY 3
|
|
#define WTS_VALUE_TYPE_GUID 4
|
|
|
|
// Basic structure used to query properties.
|
|
// This can be used as both input and output parameter
|
|
typedef struct __WTS_PROPERTY_VALUE
|
|
{
|
|
#ifdef __midl
|
|
union switch ( unsigned short Type ) u {
|
|
case WTS_VALUE_TYPE_ULONG:
|
|
ULONG ulVal;
|
|
case WTS_VALUE_TYPE_STRING:
|
|
struct {
|
|
[range(0, 0x8000)] ULONG size;
|
|
[string, size_is(size)] WCHAR* pstrVal;
|
|
} strVal;
|
|
case WTS_VALUE_TYPE_BINARY:
|
|
struct {
|
|
[range(0, 0x8000)] ULONG size;
|
|
[size_is(size)] char* pbVal;
|
|
} bVal;
|
|
case WTS_VALUE_TYPE_GUID:
|
|
GUID guidVal;
|
|
};
|
|
|
|
#else
|
|
unsigned short Type;
|
|
union {
|
|
ULONG ulVal;
|
|
struct {
|
|
ULONG size;
|
|
WCHAR* pstrVal;
|
|
} strVal;
|
|
struct {
|
|
ULONG size;
|
|
char* pbVal;
|
|
} bVal;
|
|
GUID guidVal;
|
|
} u;
|
|
#endif
|
|
} WTS_PROPERTY_VALUE, *PWTS_PROPERTY_VALUE;
|
|
|
|
#ifndef __midl
|
|
|
|
//
|
|
// **************** WTS_QUERY_ALLOWED_INITIAL_APP *********************
|
|
//
|
|
// This is used to query if protocol wants to allow an initial app to run.
|
|
// If protocol wants initial app to run, it must implement this property
|
|
// query and return success.
|
|
//
|
|
// Input to this query - It passes 3 WTS_PROPERTY_VALUE structures
|
|
// pPropertyEntriesIn[0].Type = WTS_VALUE_TYPE_STRING;
|
|
// pPropertyEntriesIn[0].u.strVal.pstrVal = NAME of the inital app, ex. notepad.exe
|
|
// pPropertyEntriesIn[0].u.strVal.size = Length of the name string
|
|
//
|
|
// pPropertyEntriesIn[1].Type = WTS_VALUE_TYPE_STRING;
|
|
// pPropertyEntriesIn[1].u.strVal.pstrVal = PARAMETERS for the inital app
|
|
// pPropertyEntriesIn[1].u.strVal.size = Length of the parameter string
|
|
//
|
|
// pPropertyEntriesIn[2].Type = WTS_VALUE_TYPE_ULONG;
|
|
// pPropertyEntriesIn[2].u.ulVal = Reserved
|
|
//
|
|
// Output to this query - It passes 3 WTS_PROPERTY_VALUE structures. Protocol needs to set it to:
|
|
// pPropertyEntriesOut[0].Type = WTS_VALUE_TYPE_STRING;
|
|
// pPropertyEntriesOut[0].u.strVal.pstrVal = Full command line to execute. Protocol should
|
|
// append current working dir to the app name and put here
|
|
// pPropertyEntriesOut[0].u.strVal.size = Length of command line
|
|
//
|
|
// pPropertyEntriesOut[1].Type = WTS_VALUE_TYPE_STRING;
|
|
// pPropertyEntriesOut[1].u.strVal.pstrVal = PARAMETERS for the inital app
|
|
// pPropertyEntriesOut[1].u.strVal.size = Length of the parameter string
|
|
//
|
|
// If protocol want to maintain the initial app and parameters passed in input parameter,
|
|
// it should just copy them to the corresponding fields (two above) in output paramters
|
|
//
|
|
// pPropertyEntriesOut[2].Type = WTS_VALUE_TYPE_ULONG;
|
|
// pPropertyEntriesOut[2].u.ulVal = 0 indicates don't allow initial app to run, allow otherwise
|
|
//
|
|
EXTERN_C const __declspec(selectany) GUID WTS_QUERY_ALLOWED_INITIAL_APP = /*C77D1B30-5BE1-4c6b-A0E1-BD6D2E5C9FCC*/
|
|
{ 0xc77d1b30, 0x5be1, 0x4c6b, { 0xa0, 0xe1, 0xbd, 0x6d, 0x2e, 0x5c, 0x9f, 0xcc} };
|
|
|
|
// **************** WTS_QUERY_LOGON_SCREEN_SIZE *********************
|
|
//
|
|
// This is used by LogonUI to query the size of the logon screen.
|
|
//
|
|
// Input to this query - NONE
|
|
//
|
|
// Output to this query - It passes 1 WTS_PROPERTY_VALUE structure. Protocol needs to set it to:
|
|
// pPropertyEntriesOut[0].Type = WTS_VALUE_TYPE_ULONG;
|
|
// pPropertyEntriesOut[0].u.strVal.pstrVal = Size of the LogonUI screen.
|
|
//
|
|
// If protocol doesn't want to keep the default size of the LogonUI screen, it must fail this call with error E_NOTIMPL.
|
|
//
|
|
EXTERN_C const __declspec(selectany) GUID WTS_QUERY_LOGON_SCREEN_SIZE = /* 8b8e0fe7-0804-4a0e-b279-8660b1df0049 */
|
|
{ 0x8b8e0fe7, 0x0804, 0x4a0e, {0xb2, 0x79, 0x86, 0x60, 0xb1, 0xdf, 0x00, 0x49} };
|
|
|
|
// **************** WTS_QUERY_AUDIOENUM_DLL **************************
|
|
//
|
|
// This is used by to query Remote audio enumerator DLL name.
|
|
//
|
|
// Input to this query - NONE
|
|
//
|
|
// Output to this query -
|
|
// pPropertyEntriesOut[0].Type = WTS_VALUE_TYPE_STRING;
|
|
// pPropertyEntriesOut[0].u.strVal.pstrVal = Remote audio enumerator DLL name
|
|
// pPropertyEntriesOut[0].u.strVal.size = Length of DLL name
|
|
//
|
|
//
|
|
EXTERN_C const __declspec(selectany) GUID WTS_QUERY_AUDIOENUM_DLL = /* 9bf4fa97-c883-4c2a-80ab-5a39c9af00db */
|
|
{ 0x9bf4fa97, 0xc883, 0x4c2a, {0x80, 0xab, 0x5a, 0x39, 0xc9, 0xaf, 0x00, 0xdb} };
|
|
|
|
// ************************************************************************
|
|
|
|
// **************** WTS_QUERY_MF_FORMAT_SUPPORT **************************
|
|
//
|
|
// This is used by Remote Desktop Media Foundation Plugin to query the sink
|
|
// objects to be used for specified media formats.
|
|
//
|
|
// Input to this query is a WTS_PROPERTY_VALUE structures containing
|
|
// pPropertyEntriesOut[0].Type = WTS_VALUE_TYPE_BINARY;
|
|
// pPropertyEntriesOut[0].u.bVal.pbVal = TSMF_SUPPORT_DATA_IN structure
|
|
// pPropertyEntriesOut[0].u.bVal.size = Size of TSMF_SUPPORT_DATA_IN structure.
|
|
// This will vary based on the size of the variable data in the structure.
|
|
//
|
|
// Output to this query is a WTS_PROPERTY_VALUE structures containing
|
|
// pPropertyEntriesOut[0].Type = WTS_VALUE_TYPE_BINARY;
|
|
// pPropertyEntriesOut[0].u.bVal.pbVal = TSMF_SUPPORT_DATA_OUT structure
|
|
// pPropertyEntriesOut[0].u.bVal.size = Size of TSMF_SUPPORT_DATA_OUT structure.
|
|
// This will vary based on the size of the variable data in the structure.
|
|
//
|
|
// STRUCTURE DEFINITIONS
|
|
//
|
|
// typedef struct tagTSMF_SUPPORT_DATA_IN {
|
|
// GUID guidMfSession;
|
|
// //number of nodes in input data.
|
|
// UINT32 numEntries;
|
|
// //
|
|
// // variable length data. The data is of type TSMF_SUPPORT_NODEDATA_IN
|
|
// // for each node corresponding to numEntries
|
|
// //
|
|
// } TSMF_SUPPORT_DATA_IN, *PTSMF_SUPPORT_DATA_IN;
|
|
//
|
|
// typedef struct tagTSMF_SUPPORT_NODEDATA_IN {
|
|
// UINT32 byteCount;
|
|
// INT64 nodeId;
|
|
// // Number of media type entries for this node
|
|
// UINT32 numMediaTypes;
|
|
// //
|
|
// // variable length media format data. It should be read as a set of TS_AM_MEDIA_TYPE structs.
|
|
// // The format itself is of type FORMAT_WaveFormatEx for audio and FORMAT_MFVideoFormat
|
|
// // for video
|
|
// //
|
|
// } TSMF_SUPPORT_NODEDATA_IN, *PTSMF_SUPPORT_NODEDATA_IN;
|
|
//
|
|
//
|
|
// //
|
|
// // Structures used to format data output from RCM. This is the format expected from protocol extension
|
|
// //
|
|
// typedef struct tagTSMF_SUPPORT_DATA_OUT {
|
|
// GUID guidMfSession; // must match the MF session guid in input data
|
|
// UINT32 numEntries; // must match the number of entries in input data
|
|
//
|
|
// //
|
|
// // variable length data. The data is of type TSMF_SUPPORT_NODEDATA_OUT
|
|
// // for each entry corresponding to numEntries
|
|
// //
|
|
// } TSMF_SUPPORT_DATA_OUT, *PTSMF_SUPPORT_DATA_OUT;
|
|
//
|
|
// typedef struct tagTSMF_SUPPORT_NODEDATA_OUT {
|
|
// INT64 nodeId;
|
|
// //
|
|
// // Status of 0 means not supported, 1 means supported.
|
|
// // Other values reserved for future use
|
|
// // If supported, the sink given by clsidNewSink will be used
|
|
// //
|
|
// HRESULT hrSupportStatus;
|
|
// CLSID clsidNewSink;
|
|
// // 0 based index of the media type for which support is being expressed.
|
|
// UINT32 supportedMediaTypeIndex;
|
|
// } TSMF_SUPPORT_NODEDATA_OUT, *PTSMF_SUPPORT_NODEDATA_OUT;
|
|
//
|
|
//
|
|
// // The following struct is used to express the media type. The fields in this struct have the same meaning as AM_MEDIA_TYPE
|
|
// // This struct is used to ensure consistency between 32-bit and 64-bit callers
|
|
// //
|
|
// typedef struct tagTS_AM_MEDIA_TYPE {
|
|
// GUID majortype;
|
|
// GUID subtype;
|
|
// UINT32 bFixedSizeSamples;
|
|
// UINT32 bTemporalCompression;
|
|
// UINT32 lSampleSize;
|
|
// GUID formattype;
|
|
// UINT32 cbFormat;
|
|
// // Variable size data appened at the end
|
|
// } TS_AM_MEDIA_TYPE, *PTS_AM_MEDIA_TYPE;
|
|
//
|
|
//
|
|
EXTERN_C const __declspec(selectany) GUID WTS_QUERY_MF_FORMAT_SUPPORT = /*41869ad0-6332-4dc8-95d5-db749e2f1d94*/
|
|
{ 0x41869ad0, 0x6332, 0x4dc8, {0x95, 0xd5, 0xdb, 0x74, 0x9e, 0x2f, 0x1d, 0x94} };
|
|
|
|
// ************************************************************************
|
|
|
|
#endif
|
|
|
|
|
|
/* -------------------------------------------------------------------
|
|
* Licensing structures
|
|
*
|
|
* For more informtion on the licensing structures and sequence
|
|
* please refer to [MS-RDPBCGR] -
|
|
* http://msdn.microsoft.com/en-us/library/cc241880(PROT.10).aspx
|
|
*
|
|
* -------------------------------------------------------------------*/
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Key exchange algorithms
|
|
//
|
|
|
|
#define WTS_KEY_EXCHANGE_ALG_RSA 1
|
|
#define WTS_KEY_EXCHANGE_ALG_DH 2
|
|
|
|
#define WTS_LICENSE_PROTOCOL_VERSION 0x00010000
|
|
#define WTS_LICENSE_PREAMBLE_VERSION 0x03
|
|
#define WTS_LICENSE_CURRENT_PROTOCOL_VERSION WTS_LICENSE_PROTOCOL_VERSION | WTS_LICENSE_PREAMBLE_VERSION
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Types of certificate used by the server to authenticate itself to the clients
|
|
//
|
|
// CERT_TYPE_PROPRIETORY
|
|
// Proprietory format certificate
|
|
//
|
|
// CERT_TYPE_X509
|
|
// X509 format certificate
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
typedef enum
|
|
{
|
|
WTS_CERT_TYPE_INVALID = 0,
|
|
WTS_CERT_TYPE_PROPRIETORY = 1,
|
|
WTS_CERT_TYPE_X509 = 2
|
|
} WTS_CERT_TYPE;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// WTS_LICENSE_CAPABILITIES
|
|
//
|
|
// Data structure used in RequestLicensingCapabilities.
|
|
//
|
|
// KeyExchangeAlg - The key exchange algorithm: RSA or Diffie Helman (see defines above)
|
|
// ProtocolVer - The supported licensing protocol.
|
|
// Always set it to WTS_LICENSE_CURRENT_PROTOCOL_VERSION.
|
|
// fAuthenticateServer - Whether the client is going to authenticate the server
|
|
// CertType - Indicate the type of certificate that has already been transmitted
|
|
// to the client.
|
|
// cbClientName - Size of the client name in bytes
|
|
// rgbClientName - Name of the client
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#define WTS_LICENSE_CLIENT_NAME_BYTE_LENGTH (WTS_CLIENTNAME_LENGTH + 1) * sizeof( WCHAR )
|
|
|
|
typedef struct _WTS_LICENSE_CAPABILITIES
|
|
{
|
|
DWORD KeyExchangeAlg;
|
|
DWORD ProtocolVer;
|
|
BOOL fAuthenticateServer;
|
|
WTS_CERT_TYPE CertType;
|
|
DWORD cbClientName;
|
|
BYTE rgbClientName[WTS_LICENSE_CLIENT_NAME_BYTE_LENGTH];
|
|
|
|
} WTS_LICENSE_CAPABILITIES, *PWTS_LICENSE_CAPABILITIES;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* !_INC_WTSDEFS */
|
|
|