xpmgr/BuildTools/Include/WtsApi32.h

1606 lines
47 KiB
C

/*********************************************************************
*
* WTSAPI32.H
*
* Windows Terminal Server public APIs
*
* Copyright (c) 1997-2001 Microsoft Corporation
*
**********************************************************************/
#ifndef _INC_WTSAPI
#define _INC_WTSAPI
#if _MSC_VER > 1000
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*===================================================================
== Defines
=====================================================================*/
/*
* Specifies the current server
*/
#define WTS_CURRENT_SERVER ((HANDLE)NULL)
#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)
#define WTS_CURRENT_SERVER_NAME (NULL)
/*
* Specifies the current session (SessionId)
*/
#define WTS_CURRENT_SESSION ((DWORD)-1)
/*
* Specifies any-session (SessionId)
*/
#define WTS_ANY_SESSION ((DWORD)-2)
/*
* Possible pResponse values from WTSSendMessage()
*/
#ifndef IDTIMEOUT
#define IDTIMEOUT 32000
#endif
#ifndef IDASYNC
#define IDASYNC 32001
#endif
#ifndef __HYDRIX_H__
#define USERNAME_LENGTH 20
#define CLIENTNAME_LENGTH 20
#define CLIENTADDRESS_LENGTH 30
#endif
/*
* Shutdown flags
*/
#define WTS_WSD_LOGOFF 0x00000001 // log off all users except
// current user; deletes
// WinStations (a reboot is
// required to recreate the
// WinStations)
#define WTS_WSD_SHUTDOWN 0x00000002 // shutdown system
#define WTS_WSD_REBOOT 0x00000004 // shutdown and reboot
#define WTS_WSD_POWEROFF 0x00000008 // shutdown and power off (on
// machines that support power
// off through software)
#define WTS_WSD_FASTREBOOT 0x00000010 // reboot without logging users
// off or shutting down
#define MAX_ELAPSED_TIME_LENGTH 15
#define MAX_DATE_TIME_LENGTH 56
#define WINSTATIONNAME_LENGTH 32
#define DOMAIN_LENGTH 17
#define WTS_DRIVE_LENGTH 3
#define WTS_LISTENER_NAME_LENGTH 32
#define WTS_COMMENT_LENGTH 60
/*
* Flags for WTSCreateListener
*/
#define WTS_LISTENER_CREATE 0x00000001
#define WTS_LISTENER_UPDATE 0x00000010
/*********************************
* Listener access values
*********************************/
#define WTS_SECURITY_QUERY_INFORMATION 0x00000001
#define WTS_SECURITY_SET_INFORMATION 0x00000002
#define WTS_SECURITY_RESET 0x00000004
#define WTS_SECURITY_VIRTUAL_CHANNELS 0x00000008
#define WTS_SECURITY_REMOTE_CONTROL 0x00000010
#define WTS_SECURITY_LOGON 0x00000020
#define WTS_SECURITY_LOGOFF 0x00000040
#define WTS_SECURITY_MESSAGE 0x00000080
#define WTS_SECURITY_CONNECT 0x00000100
#define WTS_SECURITY_DISCONNECT 0x00000200
#define WTS_SECURITY_GUEST_ACCESS (WTS_SECURITY_LOGON)
#define WTS_SECURITY_CURRENT_GUEST_ACCESS (WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_LOGOFF)
#define WTS_SECURITY_USER_ACCESS (WTS_SECURITY_CURRENT_GUEST_ACCESS | WTS_SECURITY_QUERY_INFORMATION | WTS_SECURITY_CONNECT )
#define WTS_SECURITY_CURRENT_USER_ACCESS (WTS_SECURITY_SET_INFORMATION | WTS_SECURITY_RESET \
WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_LOGOFF \
WTS_SECURITY_DISCONNECT)
#define WTS_SECURITY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | WTS_SECURITY_QUERY_INFORMATION | \
WTS_SECURITY_SET_INFORMATION | WTS_SECURITY_RESET | \
WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_REMOTE_CONTROL | \
WTS_SECURITY_LOGON | \
WTS_SECURITY_MESSAGE | \
WTS_SECURITY_CONNECT | WTS_SECURITY_DISCONNECT)
/*===================================================================
== WTS_CONNECTSTATE_CLASS - Session connect state
=====================================================================*/
typedef enum _WTS_CONNECTSTATE_CLASS {
WTSActive, // User logged on to WinStation
WTSConnected, // WinStation connected to client
WTSConnectQuery, // In the process of connecting to client
WTSShadow, // Shadowing another WinStation
WTSDisconnected, // WinStation logged on without client
WTSIdle, // Waiting for client to connect
WTSListen, // WinStation is listening for connection
WTSReset, // WinStation is being reset
WTSDown, // WinStation is down due to error
WTSInit, // WinStation in initialization
} WTS_CONNECTSTATE_CLASS;
/*=====================================================================
== WTS_SERVER_INFO - returned by WTSEnumerateServers (version 1)
=====================================================================*/
/*
* WTSEnumerateServers() returns two variables: pServerInfo and Count.
* The latter is the number of WTS_SERVER_INFO structures contained in
* the former. In order to read each server, iterate i from 0 to
* Count-1 and reference the server name as
* pServerInfo[i].pServerName; for example:
*
* for ( i=0; i < Count; i++ ) {
* _tprintf( TEXT("%s "), pServerInfo[i].pServerName );
* }
*
* The memory returned looks like the following. P is a pServerInfo
* pointer, and D is the string data for that pServerInfo:
*
* P1 P2 P3 P4 ... Pn D1 D2 D3 D4 ... Dn
*
* This makes it easier to iterate the servers, using code similar to
* the above.
*/
typedef struct _WTS_SERVER_INFOW {
LPWSTR pServerName; // server name
} WTS_SERVER_INFOW, * PWTS_SERVER_INFOW;
typedef struct _WTS_SERVER_INFOA {
LPSTR pServerName; // server name
} WTS_SERVER_INFOA, * PWTS_SERVER_INFOA;
#ifdef UNICODE
#define WTS_SERVER_INFO WTS_SERVER_INFOW
#define PWTS_SERVER_INFO PWTS_SERVER_INFOW
#else
#define WTS_SERVER_INFO WTS_SERVER_INFOA
#define PWTS_SERVER_INFO PWTS_SERVER_INFOA
#endif
/*=====================================================================
== WTS_SESSION_INFO - returned by WTSEnumerateSessions (version 1)
=====================================================================*/
/*
* WTSEnumerateSessions() returns data in a similar format to the above
* WTSEnumerateServers(). It returns two variables: pSessionInfo and
* Count. The latter is the number of WTS_SESSION_INFO structures
* contained in the former. Iteration is similar, except that there
* are three parts to each entry, so it would look like this:
*
* for ( i=0; i < Count; i++ ) {
* _tprintf( TEXT("%-5u %-20s %u\n"),
pSessionInfo[i].SessionId,
* pSessionInfo[i].pWinStationName,
* pSessionInfo[i].State );
* }
*
* The memory returned is also segmented as the above, with all the
* structures allocated at the start and the string data at the end.
* We'll use S for the SessionId, P for the pWinStationName pointer
* and D for the string data, and C for the connect State:
*
* S1 P1 C1 S2 P2 C2 S3 P3 C3 S4 P4 C4 ... Sn Pn Cn D1 D2 D3 D4 ... Dn
*
* As above, this makes it easier to iterate the sessions.
*/
typedef struct _WTS_SESSION_INFOW {
DWORD SessionId; // session id
LPWSTR pWinStationName; // name of WinStation this session is
// connected to
WTS_CONNECTSTATE_CLASS State; // connection state (see enum)
} WTS_SESSION_INFOW, * PWTS_SESSION_INFOW;
typedef struct _WTS_SESSION_INFOA {
DWORD SessionId; // session id
LPSTR pWinStationName; // name of WinStation this session is
// connected to
WTS_CONNECTSTATE_CLASS State; // connection state (see enum)
} WTS_SESSION_INFOA, * PWTS_SESSION_INFOA;
typedef struct _WTS_SESSION_INFO_1W {
DWORD ExecEnvId;
WTS_CONNECTSTATE_CLASS State;
DWORD SessionId;
LPWSTR pSessionName;
LPWSTR pHostName;
LPWSTR pUserName;
LPWSTR pDomainName;
LPWSTR pFarmName;
} WTS_SESSION_INFO_1W, * PWTS_SESSION_INFO_1W;
typedef struct _WTS_SESSION_INFO_1A {
DWORD ExecEnvId;
WTS_CONNECTSTATE_CLASS State;
DWORD SessionId;
LPSTR pSessionName;
LPSTR pHostName;
LPSTR pUserName;
LPSTR pDomainName;
LPSTR pFarmName;
} WTS_SESSION_INFO_1A, * PWTS_SESSION_INFO_1A;
#ifdef UNICODE
#define WTS_SESSION_INFO WTS_SESSION_INFOW
#define PWTS_SESSION_INFO PWTS_SESSION_INFOW
#define WTS_SESSION_INFO_1 WTS_SESSION_INFO_1W
#define PWTS_SESSION_INFO_1 PWTS_SESSION_INFO_1W
#else
#define WTS_SESSION_INFO WTS_SESSION_INFOA
#define PWTS_SESSION_INFO PWTS_SESSION_INFOA
#define WTS_SESSION_INFO_1 WTS_SESSION_INFO_1A
#define PWTS_SESSION_INFO_1 PWTS_SESSION_INFO_1A
#endif
/*=====================================================================
== WTS_PROCESS_INFO - returned by WTSEnumerateProcesses (version 1)
=====================================================================*/
/*
* WTSEnumerateProcesses() also returns data similar to
* WTSEnumerateServers(). It returns two variables: pProcessInfo and
* Count. The latter is the number of WTS_PROCESS_INFO structures
* contained in the former. Iteration is similar, except that there
* are four parts to each entry, so it would look like this:
*
* for ( i=0; i < Count; i++ ) {
* GetUserNameFromSid( pProcessInfo[i].pUserSid, UserName,
* sizeof(UserName) );
* _tprintf( TEXT("%-5u %-20s %-5u %s\n"),
* pProcessInfo[i].SessionId,
* UserName,
* pProcessInfo[i].ProcessId,
* pProcessInfo[i].pProcessName );
* }
*
* The memory returned is also segmented as the above, with all the
* structures allocated at the start and the string data at the end.
* We'll use S for the SessionId, R for the ProcessId, P for the
* pProcessName pointer and D for the string data, and U for pUserSid:
*
* S1 R1 P1 U1 S2 R2 P2 U2 S3 R3 P3 U3 ... Sn Rn Pn Un D1 D2 D3 ... Dn
*
* As above, this makes it easier to iterate the processes.
*/
typedef struct _WTS_PROCESS_INFOW {
DWORD SessionId; // session id
DWORD ProcessId; // process id
LPWSTR pProcessName; // name of process
PSID pUserSid; // user's SID
} WTS_PROCESS_INFOW, * PWTS_PROCESS_INFOW;
typedef struct _WTS_PROCESS_INFOA {
DWORD SessionId; // session id
DWORD ProcessId; // process id
LPSTR pProcessName; // name of process
PSID pUserSid; // user's SID
} WTS_PROCESS_INFOA, * PWTS_PROCESS_INFOA;
#ifdef UNICODE
#define WTS_PROCESS_INFO WTS_PROCESS_INFOW
#define PWTS_PROCESS_INFO PWTS_PROCESS_INFOW
#else
#define WTS_PROCESS_INFO WTS_PROCESS_INFOA
#define PWTS_PROCESS_INFO PWTS_PROCESS_INFOA
#endif
/*=====================================================================
== WTS_INFO_CLASS - WTSQuerySessionInformation
== (See additional typedefs for more info on structures)
=====================================================================*/
#define WTS_PROTOCOL_TYPE_CONSOLE 0 // Console
#define WTS_PROTOCOL_TYPE_ICA 1 // ICA Protocol
#define WTS_PROTOCOL_TYPE_RDP 2 // RDP Protocol
typedef enum _WTS_INFO_CLASS {
WTSInitialProgram,
WTSApplicationName,
WTSWorkingDirectory,
WTSOEMId,
WTSSessionId,
WTSUserName,
WTSWinStationName,
WTSDomainName,
WTSConnectState,
WTSClientBuildNumber,
WTSClientName,
WTSClientDirectory,
WTSClientProductId,
WTSClientHardwareId,
WTSClientAddress,
WTSClientDisplay,
WTSClientProtocolType,
WTSIdleTime,
WTSLogonTime,
WTSIncomingBytes,
WTSOutgoingBytes,
WTSIncomingFrames,
WTSOutgoingFrames,
WTSClientInfo,
WTSSessionInfo,
WTSSessionInfoEx,
WTSConfigInfo,
WTSValidationInfo, // Info Class value used to fetch Validation Information through the WTSQuerySessionInformation
WTSSessionAddressV4,
WTSIsRemoteSession
} WTS_INFO_CLASS;
/*=====================================================================
== WTS Config Information
=====================================================================*/
typedef struct _WTSCONFIGINFOW {
ULONG version;
ULONG fConnectClientDrivesAtLogon;
ULONG fConnectPrinterAtLogon;
ULONG fDisablePrinterRedirection;
ULONG fDisableDefaultMainClientPrinter;
ULONG ShadowSettings;
WCHAR LogonUserName[USERNAME_LENGTH + 1 ];
WCHAR LogonDomain[DOMAIN_LENGTH + 1 ];
WCHAR WorkDirectory[MAX_PATH + 1 ];
WCHAR InitialProgram[MAX_PATH + 1 ];
WCHAR ApplicationName[MAX_PATH + 1 ];
} WTSCONFIGINFOW, *PWTSCONFIGINFOW;
typedef struct _WTSCONFIGINFOA {
ULONG version;
ULONG fConnectClientDrivesAtLogon;
ULONG fConnectPrinterAtLogon;
ULONG fDisablePrinterRedirection;
ULONG fDisableDefaultMainClientPrinter;
ULONG ShadowSettings;
CHAR LogonUserName[USERNAME_LENGTH + 1 ];
CHAR LogonDomain[DOMAIN_LENGTH + 1 ];
CHAR WorkDirectory[MAX_PATH + 1 ];
CHAR InitialProgram[MAX_PATH + 1 ];
CHAR ApplicationName[MAX_PATH + 1 ];
} WTSCONFIGINFOA, *PWTSCONFIGINFOA;
/*=====================================================================
== WTS Session Information
=====================================================================*/
typedef struct _WTSINFOW {
WTS_CONNECTSTATE_CLASS State; // connection state (see enum)
DWORD SessionId; // session id
DWORD IncomingBytes;
DWORD OutgoingBytes;
DWORD IncomingFrames;
DWORD OutgoingFrames;
DWORD IncomingCompressedBytes;
DWORD OutgoingCompressedBytes;
WCHAR WinStationName[WINSTATIONNAME_LENGTH];
WCHAR Domain[DOMAIN_LENGTH];
WCHAR UserName[USERNAME_LENGTH+1];// name of WinStation this session is
// connected to
LARGE_INTEGER ConnectTime;
LARGE_INTEGER DisconnectTime;
LARGE_INTEGER LastInputTime;
LARGE_INTEGER LogonTime;
LARGE_INTEGER CurrentTime;
} WTSINFOW, * PWTSINFOW;
typedef struct _WTSINFOA {
WTS_CONNECTSTATE_CLASS State; // connection state (see enum)
DWORD SessionId; // session id
DWORD IncomingBytes;
DWORD OutgoingBytes;
DWORD IncomingFrames;
DWORD OutgoingFrames;
DWORD IncomingCompressedBytes;
DWORD OutgoingCompressedBy;
CHAR WinStationName[WINSTATIONNAME_LENGTH];
CHAR Domain[DOMAIN_LENGTH];
CHAR UserName[USERNAME_LENGTH+1];// name of WinStation this session is
// connected to
LARGE_INTEGER ConnectTime;
LARGE_INTEGER DisconnectTime;
LARGE_INTEGER LastInputTime;
LARGE_INTEGER LogonTime;
LARGE_INTEGER CurrentTime;
} WTSINFOA, * PWTSINFOA;
/*=====================================================================
== WTS Extended Session State Flags
=====================================================================*/
#define WTS_SESSIONSTATE_UNKNOWN 0xFFFFFFFF
#define WTS_SESSIONSTATE_LOCK 0x00000000
#define WTS_SESSIONSTATE_UNLOCK 0x00000001
/*=====================================================================
== WTS Extended Session Information
=====================================================================*/
typedef struct _WTSINFOEX_LEVEL1_W {
ULONG SessionId;
WTS_CONNECTSTATE_CLASS SessionState;
LONG SessionFlags;
WCHAR WinStationName[WINSTATIONNAME_LENGTH + 1] ;
WCHAR UserName[USERNAME_LENGTH + 1];
WCHAR DomainName[DOMAIN_LENGTH + 1];
LARGE_INTEGER LogonTime;
LARGE_INTEGER ConnectTime;
LARGE_INTEGER DisconnectTime;
LARGE_INTEGER LastInputTime;
LARGE_INTEGER CurrentTime;
DWORD IncomingBytes;
DWORD OutgoingBytes;
DWORD IncomingFrames;
DWORD OutgoingFrames;
DWORD IncomingCompressedBytes;
DWORD OutgoingCompressedBytes;
} WTSINFOEX_LEVEL1_W, *PWTSINFOEX_LEVEL1_W;
typedef struct _WTSINFOEX_LEVEL1_A {
ULONG SessionId;
WTS_CONNECTSTATE_CLASS SessionState;
LONG SessionFlags;
CHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
CHAR UserName[USERNAME_LENGTH + 1];
CHAR DomainName[DOMAIN_LENGTH + 1];
LARGE_INTEGER LogonTime;
LARGE_INTEGER ConnectTime;
LARGE_INTEGER DisconnectTime;
LARGE_INTEGER LastInputTime;
LARGE_INTEGER CurrentTime;
DWORD IncomingBytes;
DWORD OutgoingBytes;
DWORD IncomingFrames;
DWORD OutgoingFrames;
DWORD IncomingCompressedBytes;
DWORD OutgoingCompressedBytes;
} WTSINFOEX_LEVEL1_A, *PWTSINFOEX_LEVEL1_A;
typedef union _WTSINFOEX_LEVEL_W {
WTSINFOEX_LEVEL1_W WTSInfoExLevel1;
} WTSINFOEX_LEVEL_W, *PWTSINFOEX_LEVEL_W;
typedef union _WTSINFOEX_LEVEL_A {
WTSINFOEX_LEVEL1_A WTSInfoExLevel1;
} WTSINFOEX_LEVEL_A, *PWTSINFOEX_LEVEL_A;
typedef struct _WTSINFOEXW {
DWORD Level;
WTSINFOEX_LEVEL_W Data;
} WTSINFOEXW, *PWTSINFOEXW;
typedef struct _WTSINFOEXA {
DWORD Level;
WTSINFOEX_LEVEL_A Data;
} WTSINFOEXA, *PWTSINFOEXA;
/*=====================================================================
== WTS Client Information
=====================================================================*/
typedef struct _WTSCLIENTW {
WCHAR ClientName[ CLIENTNAME_LENGTH + 1 ];
WCHAR Domain[ DOMAIN_LENGTH + 1 ];
WCHAR UserName[ USERNAME_LENGTH + 1 ];
WCHAR WorkDirectory[ MAX_PATH + 1];
WCHAR InitialProgram[ MAX_PATH + 1];
BYTE EncryptionLevel; // security level of encryption pd
ULONG ClientAddressFamily;
USHORT ClientAddress[ CLIENTADDRESS_LENGTH + 1 ];
USHORT HRes;
USHORT VRes;
USHORT ColorDepth;
WCHAR ClientDirectory[ MAX_PATH + 1 ];
ULONG ClientBuildNumber;
ULONG ClientHardwareId; // client software serial number
USHORT ClientProductId; // client software product id
USHORT OutBufCountHost; // number of outbufs on host
USHORT OutBufCountClient; // number of outbufs on client
USHORT OutBufLength; // length of outbufs in bytes
WCHAR DeviceId[ MAX_PATH + 1];
} WTSCLIENTW, * PWTSCLIENTW;
/*=====================================================================
== WTS Client Information
=====================================================================*/
typedef struct _WTSCLIENTA {
CHAR ClientName[ CLIENTNAME_LENGTH + 1 ];
CHAR Domain[ DOMAIN_LENGTH + 1 ];
CHAR UserName[ USERNAME_LENGTH + 1 ];
CHAR WorkDirectory[ MAX_PATH + 1];
CHAR InitialProgram[ MAX_PATH + 1 ];
BYTE EncryptionLevel; // security level of encryption pd
ULONG ClientAddressFamily;
USHORT ClientAddress[ CLIENTADDRESS_LENGTH + 1 ];
USHORT HRes;
USHORT VRes;
USHORT ColorDepth;
CHAR ClientDirectory[ MAX_PATH + 1 ];
ULONG ClientBuildNumber;
ULONG ClientHardwareId; // client software serial number
USHORT ClientProductId; // client software product id
USHORT OutBufCountHost; // number of outbufs on host
USHORT OutBufCountClient; // number of outbufs on client
USHORT OutBufLength; // length of outbufs in bytes
CHAR DeviceId[ MAX_PATH + 1];
} WTSCLIENTA, * PWTSCLIENTA;
/*=====================================================================
== WTS License Validation Information - Product Information
=====================================================================*/
#define PRODUCTINFO_COMPANYNAME_LENGTH 256
#define PRODUCTINFO_PRODUCTID_LENGTH 4
typedef struct _WTS_PRODUCT_INFOA
{
CHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
CHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
} PRODUCT_INFOA;
typedef struct _WTS_PRODUCT_INFOW
{
WCHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
WCHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
} PRODUCT_INFOW;
/*=====================================================================
WTS License Validation Information
This structure will be returned from WTSQuerySessionInformation when the user
queries for license validation information.
=====================================================================*/
#define VALIDATIONINFORMATION_LICENSE_LENGTH 16384 //16 Kb
#define VALIDATIONINFORMATION_HARDWAREID_LENGTH 20
typedef struct _WTS_VALIDATION_INFORMATIONA {
PRODUCT_INFOA ProductInfo;
BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
DWORD LicenseLength;
BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
DWORD HardwareIDLength;
} WTS_VALIDATION_INFORMATIONA, * PWTS_VALIDATION_INFORMATIONA;
typedef struct _WTS_VALIDATION_INFORMATIONW {
PRODUCT_INFOW ProductInfo;
BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
DWORD LicenseLength;
BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
DWORD HardwareIDLength;
} WTS_VALIDATION_INFORMATIONW, * PWTS_VALIDATION_INFORMATIONW;
#ifdef UNICODE
#define WTSCONFIGINFO WTSCONFIGINFOW
#define PWTSCONFIGINFO PWTSCONFIGINFOW
#define PRODUCT_INFO PRODUCT_INFOW
#define WTS_VALIDATION_INFORMATION WTS_VALIDATION_INFORMATIONW
#define PWTS_VALIDATION_INFORMATION PWTS_VALIDATION_INFORMATIONW
#define WTSINFO WTSINFOW
#define PWTSINFO PWTSINFOW
#define WTSINFOEX WTSINFOEXW
#define PWTSINFOEX PWTSINFOEXW
#define WTSINFOEX_LEVEL WTSINFOEX_LEVEL_W
#define PWTSINFOEX_LEVEL PWTSINFOEX_LEVEL_W
#define WTSINFOEX_LEVEL1 WTSINFOEX_LEVEL1_W
#define PWTSINFOEX_LEVEL1 PWTSINFOEX_LEVEL1_W
#define WTSCLIENT WTSCLIENTW
#define PWTSCLIENT PWTSCLIENTW
#else
#define WTSCONFIGINFO WTSCONFIGINFOA
#define PWTSCONFIGINFO PWTSCONFIGINFOA
#define PRODUCT_INFO PRODUCT_INFOA
#define WTS_VALIDATION_INFORMATION WTS_VALIDATION_INFORMATIONA
#define PWTS_VALIDATION_INFORMATION PWTS_VALIDATION_INFORMATIONA
#define WTSINFO WTSINFOA
#define PWTSINFO PWTSINFOA
#define WTSINFOEX WTSINFOEXA
#define PWTSINFOEX PWTSINFOEXA
#define WTSINFOEX_LEVEL WTSINFOEX_LEVEL_A
#define PWTSINFOEX_LEVEL PWTSINFOEX_LEVEL_A
#define WTSINFOEX_LEVEL1 WTSINFOEX_LEVEL1_A
#define PWTSINFOEX_LEVEL1 PWTSINFOEX_LEVEL1_A
#define WTSCLIENT WTSCLIENTA
#define PWTSCLIENT PWTSCLIENTA
#endif
/*=====================================================================
== WTSQuerySessionInformation - (WTSClientAddress)
=====================================================================*/
typedef struct _WTS_CLIENT_ADDRESS {
DWORD AddressFamily; // AF_INET, AF_INET6, AF_IPX, AF_NETBIOS, AF_UNSPEC
BYTE Address[20]; // client network address
} WTS_CLIENT_ADDRESS, * PWTS_CLIENT_ADDRESS;
/*=====================================================================
== WTSQuerySessionInformation - (WTSClientDisplay)
=====================================================================*/
typedef struct _WTS_CLIENT_DISPLAY {
DWORD HorizontalResolution; // horizontal dimensions, in pixels
DWORD VerticalResolution; // vertical dimensions, in pixels
DWORD ColorDepth; // 1=16, 2=256, 4=64K, 8=16M
} WTS_CLIENT_DISPLAY, * PWTS_CLIENT_DISPLAY;
/*=====================================================================
== WTS_CONFIG_CLASS - WTSQueryUserConfig/WTSSetUserConfig
=====================================================================*/
typedef enum _WTS_CONFIG_CLASS {
//Initial program settings
WTSUserConfigInitialProgram, // string returned/expected
WTSUserConfigWorkingDirectory, // string returned/expected
WTSUserConfigfInheritInitialProgram, // DWORD returned/expected
//
WTSUserConfigfAllowLogonTerminalServer, //DWORD returned/expected
//Timeout settings
WTSUserConfigTimeoutSettingsConnections, //DWORD returned/expected
WTSUserConfigTimeoutSettingsDisconnections, //DWORD returned/expected
WTSUserConfigTimeoutSettingsIdle, //DWORD returned/expected
//Client device settings
WTSUserConfigfDeviceClientDrives, //DWORD returned/expected
WTSUserConfigfDeviceClientPrinters, //DWORD returned/expected
WTSUserConfigfDeviceClientDefaultPrinter, //DWORD returned/expected
//Connection settings
WTSUserConfigBrokenTimeoutSettings, //DWORD returned/expected
WTSUserConfigReconnectSettings, //DWORD returned/expected
//Modem settings
WTSUserConfigModemCallbackSettings, //DWORD returned/expected
WTSUserConfigModemCallbackPhoneNumber, // string returned/expected
//Shadow settings
WTSUserConfigShadowingSettings, //DWORD returned/expected
//User Profile settings
WTSUserConfigTerminalServerProfilePath, // string returned/expected
//Terminal Server home directory
WTSUserConfigTerminalServerHomeDir, // string returned/expected
WTSUserConfigTerminalServerHomeDirDrive, // string returned/expected
WTSUserConfigfTerminalServerRemoteHomeDir, // DWORD 0:LOCAL 1:REMOTE
WTSUserConfigUser, // returns WTSUSERCONFIG struct
} WTS_CONFIG_CLASS;
typedef enum _WTS_CONFIG_SOURCE {
WTSUserConfigSourceSAM
} WTS_CONFIG_SOURCE;
typedef struct _WTSUSERCONFIGA {
DWORD Source;
DWORD InheritInitialProgram;
DWORD AllowLogonTerminalServer;
DWORD TimeoutSettingsConnections;
DWORD TimeoutSettingsDisconnections;
DWORD TimeoutSettingsIdle;
DWORD DeviceClientDrives;
DWORD DeviceClientPrinters;
DWORD ClientDefaultPrinter;
DWORD BrokenTimeoutSettings;
DWORD ReconnectSettings;
DWORD ShadowingSettings;
DWORD TerminalServerRemoteHomeDir;
CHAR InitialProgram[ MAX_PATH + 1 ];
CHAR WorkDirectory[ MAX_PATH + 1 ];
CHAR TerminalServerProfilePath[ MAX_PATH + 1 ];
CHAR TerminalServerHomeDir[ MAX_PATH + 1 ];
CHAR TerminalServerHomeDirDrive[ WTS_DRIVE_LENGTH + 1 ];
} WTSUSERCONFIGA, * PWTSUSERCONFIGA;
typedef struct _WTSUSERCONFIGW {
DWORD Source;
DWORD InheritInitialProgram;
DWORD AllowLogonTerminalServer;
DWORD TimeoutSettingsConnections;
DWORD TimeoutSettingsDisconnections;
DWORD TimeoutSettingsIdle;
DWORD DeviceClientDrives;
DWORD DeviceClientPrinters;
DWORD ClientDefaultPrinter;
DWORD BrokenTimeoutSettings;
DWORD ReconnectSettings;
DWORD ShadowingSettings;
DWORD TerminalServerRemoteHomeDir;
WCHAR InitialProgram[ MAX_PATH + 1 ];
WCHAR WorkDirectory[ MAX_PATH + 1 ];
WCHAR TerminalServerProfilePath[ MAX_PATH + 1 ];
WCHAR TerminalServerHomeDir[ MAX_PATH + 1 ];
WCHAR TerminalServerHomeDirDrive[ WTS_DRIVE_LENGTH + 1 ];
} WTSUSERCONFIGW, * PWTSUSERCONFIGW;
#ifdef UNICODE
#define WTSUSERCONFIG WTSUSERCONFIGW
#define PWTSUSERCONFIG PWTSUSERCONFIGW
#else
#define WTSUSERCONFIG WTSUSERCONFIGA
#define PWTSUSERCONFIG PWTSUSERCONFIGA
#endif /* UNICODE */
/*=====================================================================
== WTS_EVENT - Event flags for WTSWaitSystemEvent
=====================================================================*/
#define WTS_EVENT_NONE 0x00000000 // return no event
#define WTS_EVENT_CREATE 0x00000001 // new WinStation created
#define WTS_EVENT_DELETE 0x00000002 // existing WinStation deleted
#define WTS_EVENT_RENAME 0x00000004 // existing WinStation renamed
#define WTS_EVENT_CONNECT 0x00000008 // WinStation connect to client
#define WTS_EVENT_DISCONNECT 0x00000010 // WinStation logged on without
// client
#define WTS_EVENT_LOGON 0x00000020 // user logged on to existing
// WinStation
#define WTS_EVENT_LOGOFF 0x00000040 // user logged off from
// existing WinStation
#define WTS_EVENT_STATECHANGE 0x00000080 // WinStation state change
#define WTS_EVENT_LICENSE 0x00000100 // license state change
#define WTS_EVENT_ALL 0x7fffffff // wait for all event types
#define WTS_EVENT_FLUSH 0x80000000 // unblock all waiters
/*=====================================================================
== Flags for HotkeyModifiers in WTSStartRemoteControlSession
=====================================================================*/
#define REMOTECONTROL_KBDSHIFT_HOTKEY 0x1 // Shift key
#define REMOTECONTROL_KBDCTRL_HOTKEY 0x2 // Ctrl key
#define REMOTECONTROL_KBDALT_HOTKEY 0x4 // Alt key
/*=====================================================================
== WTS_VIRTUAL_CLASS - WTSVirtualChannelQuery
=====================================================================*/
typedef enum _WTS_VIRTUAL_CLASS {
WTSVirtualClientData, // Virtual channel client module data
// (C2H data)
WTSVirtualFileHandle
} WTS_VIRTUAL_CLASS;
/*=====================================================================
== WTSQuerySessionInformation - (WTSSessionAddress)
=====================================================================*/
typedef struct _WTS_SESSION_ADDRESS {
DWORD AddressFamily; // AF_INET only.
BYTE Address[20]; // client network address
} WTS_SESSION_ADDRESS, * PWTS_SESSION_ADDRESS;
/*=====================================================================
== Windows Terminal Server public APIs
=====================================================================*/
BOOL WINAPI
WTSStopRemoteControlSession(
IN ULONG LogonId
);
BOOL WINAPI
WTSStartRemoteControlSessionW(
__in LPWSTR pTargetServerName,
IN ULONG TargetLogonId,
IN BYTE HotkeyVk,
IN USHORT HotkeyModifiers
);
BOOL WINAPI
WTSStartRemoteControlSessionA(
__in LPSTR pTargetServerName,
IN ULONG TargetLogonId,
IN BYTE HotkeyVk,
IN USHORT HotkeyModifiers
);
#ifdef UNICODE
#define WTSStartRemoteControlSession WTSStartRemoteControlSessionW
#else
#define WTSStartRemoteControlSession WTSStartRemoteControlSessionA
#endif /* UNICODE */
BOOL
WINAPI
WTSConnectSessionA(
IN ULONG LogonId,
IN ULONG TargetLogonId,
__in PSTR pPassword,
IN BOOL bWait
);
BOOL
WINAPI
WTSConnectSessionW(
IN ULONG LogonId,
IN ULONG TargetLogonId,
__in PWSTR pPassword,
IN BOOL bWait
);
#ifdef UNICODE
#define WTSConnectSession WTSConnectSessionW
#else
#define WTSConnectSession WTSConnectSessionA
#endif
BOOL
WINAPI
WTSEnumerateServersW(
__in LPWSTR pDomainName,
IN DWORD Reserved,
IN DWORD Version,
__deref_out_ecount(*pCount) PWTS_SERVER_INFOW * ppServerInfo,
__out DWORD * pCount
);
BOOL
WINAPI
WTSEnumerateServersA(
__in LPSTR pDomainName,
IN DWORD Reserved,
IN DWORD Version,
__deref_out_ecount(*pCount) PWTS_SERVER_INFOA * ppServerInfo,
__out DWORD * pCount
);
#ifdef UNICODE
#define WTSEnumerateServers WTSEnumerateServersW
#else
#define WTSEnumerateServers WTSEnumerateServersA
#endif
/*------------------------------------------------*/
HANDLE
WINAPI
WTSOpenServerW(
__in LPWSTR pServerName
);
HANDLE
WINAPI
WTSOpenServerA(
__in LPSTR pServerName
);
HANDLE
WINAPI
WTSOpenServerExW(
__in LPWSTR pServerName
);
HANDLE
WINAPI
WTSOpenServerExA(
__in LPSTR pServerName
);
#ifdef UNICODE
#define WTSOpenServer WTSOpenServerW
#define WTSOpenServerEx WTSOpenServerExW
#else
#define WTSOpenServer WTSOpenServerA
#define WTSOpenServerEx WTSOpenServerExA
#endif
/*------------------------------------------------*/
VOID
WINAPI
WTSCloseServer(
IN HANDLE hServer
);
/*------------------------------------------------*/
BOOL
WINAPI
WTSEnumerateSessionsW(
IN HANDLE hServer,
IN DWORD Reserved,
IN DWORD Version,
__deref_out_ecount(*pCount) PWTS_SESSION_INFOW * ppSessionInfo,
__out DWORD * pCount
);
BOOL
WINAPI
WTSEnumerateSessionsA(
IN HANDLE hServer,
IN DWORD Reserved,
IN DWORD Version,
__deref_out_ecount(*pCount) PWTS_SESSION_INFOA * ppSessionInfo,
__out DWORD * pCount
);
BOOL
WINAPI
WTSEnumerateSessionsExW(
__in HANDLE hServer,
__inout DWORD *pLevel,
__in DWORD Filter,
__deref_out_ecount(*pCount) PWTS_SESSION_INFO_1W * ppSessionInfo,
__out DWORD * pCount );
BOOL
WINAPI
WTSEnumerateSessionsExA(
__in HANDLE hServer,
__inout DWORD *pLevel,
__in DWORD Filter,
__deref_out_ecount(*pCount) PWTS_SESSION_INFO_1A * ppSessionInfo,
__out DWORD * pCount );
#ifdef UNICODE
#define WTSEnumerateSessions WTSEnumerateSessionsW
#define WTSEnumerateSessionsEx WTSEnumerateSessionsExW
#else
#define WTSEnumerateSessions WTSEnumerateSessionsA
#define WTSEnumerateSessionsEx WTSEnumerateSessionsExA
#endif
/*------------------------------------------------*/
BOOL
WINAPI
WTSEnumerateProcessesW(
IN HANDLE hServer,
IN DWORD Reserved,
IN DWORD Version,
OUT PWTS_PROCESS_INFOW * ppProcessInfo,
OUT DWORD * pCount
);
BOOL
WINAPI
WTSEnumerateProcessesA(
IN HANDLE hServer,
IN DWORD Reserved,
IN DWORD Version,
OUT PWTS_PROCESS_INFOA * ppProcessInfo,
OUT DWORD * pCount
);
#ifdef UNICODE
#define WTSEnumerateProcesses WTSEnumerateProcessesW
#else
#define WTSEnumerateProcesses WTSEnumerateProcessesA
#endif
/*------------------------------------------------*/
BOOL
WINAPI
WTSTerminateProcess(
IN HANDLE hServer,
IN DWORD ProcessId,
IN DWORD ExitCode
);
/*------------------------------------------------*/
BOOL
WINAPI
WTSQuerySessionInformationW(
IN HANDLE hServer,
IN DWORD SessionId,
IN WTS_INFO_CLASS WTSInfoClass,
__deref_out_bcount(*pBytesReturned) LPWSTR * ppBuffer,
__out DWORD * pBytesReturned
);
BOOL
WINAPI
WTSQuerySessionInformationA(
IN HANDLE hServer,
IN DWORD SessionId,
IN WTS_INFO_CLASS WTSInfoClass,
__deref_out_bcount(*pBytesReturned) LPSTR * ppBuffer,
__out DWORD * pBytesReturned
);
#ifdef UNICODE
#define WTSQuerySessionInformation WTSQuerySessionInformationW
#else
#define WTSQuerySessionInformation WTSQuerySessionInformationA
#endif
/*------------------------------------------------*/
BOOL
WINAPI
WTSQueryUserConfigW(
__in LPWSTR pServerName,
__in LPWSTR pUserName,
IN WTS_CONFIG_CLASS WTSConfigClass,
__deref_out_bcount(*pBytesReturned) LPWSTR * ppBuffer,
__out DWORD * pBytesReturned
);
BOOL
WINAPI
WTSQueryUserConfigA(
__in LPSTR pServerName,
__in LPSTR pUserName,
IN WTS_CONFIG_CLASS WTSConfigClass,
__deref_out_bcount(*pBytesReturned) LPSTR * ppBuffer,
__out DWORD * pBytesReturned
);
#ifdef UNICODE
#define WTSQueryUserConfig WTSQueryUserConfigW
#else
#define WTSQueryUserConfig WTSQueryUserConfigA
#endif
/*------------------------------------------------*/
BOOL
WINAPI
WTSSetUserConfigW(
__in LPWSTR pServerName,
__in LPWSTR pUserName,
IN WTS_CONFIG_CLASS WTSConfigClass,
__in_bcount(DataLength) LPWSTR pBuffer,
IN DWORD DataLength
);
BOOL
WINAPI
WTSSetUserConfigA(
__in LPSTR pServerName,
__in LPSTR pUserName,
IN WTS_CONFIG_CLASS WTSConfigClass,
__in_bcount(DataLength) LPSTR pBuffer,
IN DWORD DataLength
);
#ifdef UNICODE
#define WTSSetUserConfig WTSSetUserConfigW
#else
#define WTSSetUserConfig WTSSetUserConfigA
#endif
/*------------------------------------------------*/
BOOL
WINAPI
WTSSendMessageW(
IN HANDLE hServer,
IN DWORD SessionId,
__in_bcount(TitleLength) LPWSTR pTitle,
IN DWORD TitleLength,
__in_bcount(MessageLength) LPWSTR pMessage,
IN DWORD MessageLength,
IN DWORD Style,
IN DWORD Timeout,
__out DWORD * pResponse,
IN BOOL bWait
);
BOOL
WINAPI
WTSSendMessageA(
IN HANDLE hServer,
IN DWORD SessionId,
__in_bcount(TitleLength) LPSTR pTitle,
IN DWORD TitleLength,
__in_bcount(MessageLength) LPSTR pMessage,
IN DWORD MessageLength,
IN DWORD Style,
IN DWORD Timeout,
__out DWORD * pResponse,
IN BOOL bWait
);
#ifdef UNICODE
#define WTSSendMessage WTSSendMessageW
#else
#define WTSSendMessage WTSSendMessageA
#endif
/*------------------------------------------------*/
BOOL
WINAPI
WTSDisconnectSession(
IN HANDLE hServer,
IN DWORD SessionId,
IN BOOL bWait
);
/*------------------------------------------------*/
BOOL
WINAPI
WTSLogoffSession(
IN HANDLE hServer,
IN DWORD SessionId,
IN BOOL bWait
);
/*------------------------------------------------*/
BOOL
WINAPI
WTSShutdownSystem(
IN HANDLE hServer,
IN DWORD ShutdownFlag
);
/*------------------------------------------------*/
BOOL
WINAPI
WTSWaitSystemEvent(
IN HANDLE hServer,
IN DWORD EventMask,
OUT DWORD * pEventFlags
);
/*------------------------------------------------*/
HANDLE
WINAPI
WTSVirtualChannelOpen(
IN HANDLE hServer,
IN DWORD SessionId,
__in LPSTR pVirtualName /* ascii name */
);
#define WTS_CHANNEL_OPTION_DYNAMIC 0x00000001 // dynamic channel
#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_LOW 0x00000000 // priorities
#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_MED 0x00000002
#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_HIGH 0x00000004
#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_REAL 0x00000006
#define WTS_CHANNEL_OPTION_DYNAMIC_NO_COMPRESS 0x00000008
HANDLE
WINAPI
WTSVirtualChannelOpenEx(
IN DWORD SessionId,
__in LPSTR pVirtualName, /* ascii name */
IN DWORD flags
);
BOOL
WINAPI
WTSVirtualChannelClose(
IN HANDLE hChannelHandle
);
BOOL
WINAPI
WTSVirtualChannelRead(
IN HANDLE hChannelHandle,
IN ULONG TimeOut,
__out_bcount_part(BufferSize, *pBytesRead) PCHAR Buffer,
IN ULONG BufferSize,
__out PULONG pBytesRead
);
BOOL
WINAPI
WTSVirtualChannelWrite(
IN HANDLE hChannelHandle,
__in_bcount(Length) PCHAR Buffer,
IN ULONG Length,
__out PULONG pBytesWritten
);
BOOL
WINAPI
WTSVirtualChannelPurgeInput(
IN HANDLE hChannelHandle
);
BOOL
WINAPI
WTSVirtualChannelPurgeOutput(
IN HANDLE hChannelHandle
);
BOOL
WINAPI
WTSVirtualChannelQuery(
IN HANDLE hChannelHandle,
IN WTS_VIRTUAL_CLASS,
OUT PVOID *ppBuffer,
OUT DWORD *pBytesReturned
);
/*------------------------------------------------*/
VOID
WINAPI
WTSFreeMemory(
IN PVOID pMemory
);
/* Flags for Console Notification */
#define NOTIFY_FOR_ALL_SESSIONS 1
#define NOTIFY_FOR_THIS_SESSION 0
BOOL
WINAPI
WTSRegisterSessionNotification(
HWND hWnd,
DWORD dwFlags
);
BOOL
WINAPI
WTSUnRegisterSessionNotification(
HWND hWnd
);
BOOL
WINAPI
WTSRegisterSessionNotificationEx(
IN HANDLE hServer,
IN HWND hWnd,
IN DWORD dwFlags
);
BOOL
WINAPI
WTSUnRegisterSessionNotificationEx(
IN HANDLE hServer,
IN HWND hWnd
);
BOOL
WINAPI
WTSQueryUserToken(
ULONG SessionId,
PHANDLE phToken
);
#define WTS_PROCESS_INFO_LEVEL_0 0
#define WTS_PROCESS_INFO_LEVEL_1 1
/*
== WTS_PROCESS_INFO_EX - returned by WTSEnumerateProcessesEX
*/
typedef struct _WTS_PROCESS_INFO_EXW {
DWORD SessionId;
DWORD ProcessId;
LPWSTR pProcessName;
PSID pUserSid;
DWORD NumberOfThreads;
DWORD HandleCount;
DWORD PagefileUsage;
DWORD PeakPagefileUsage;
DWORD WorkingSetSize;
DWORD PeakWorkingSetSize;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
} WTS_PROCESS_INFO_EXW, * PWTS_PROCESS_INFO_EXW;
typedef struct _WTS_PROCESS_INFO_EXA {
DWORD SessionId;
DWORD ProcessId;
LPSTR pProcessName;
PSID pUserSid;
DWORD NumberOfThreads;
DWORD HandleCount;
DWORD PagefileUsage;
DWORD PeakPagefileUsage;
DWORD WorkingSetSize;
DWORD PeakWorkingSetSize;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
} WTS_PROCESS_INFO_EXA, * PWTS_PROCESS_INFO_EXA;
#ifdef UNICODE
#define WTS_PROCESS_INFO_EX WTS_PROCESS_INFO_EXW
#define PWTS_PROCESS_INFO_EX PWTS_PROCESS_INFO_EXW
#else
#define WTS_PROCESS_INFO_EX WTS_PROCESS_INFO_EXA
#define PWTS_PROCESS_INFO_EX PWTS_PROCESS_INFO_EXA
#endif
/*------------------------------------------------*/
typedef enum _WTS_TYPE_CLASS {
WTSTypeProcessInfoLevel0,
WTSTypeProcessInfoLevel1,
WTSTypeSessionInfoLevel1,
} WTS_TYPE_CLASS;
BOOL WINAPI
WTSFreeMemoryExW(
__in WTS_TYPE_CLASS WTSTypeClass,
__in PVOID pMemory,
__in ULONG NumberOfEntries
);
BOOL WINAPI
WTSFreeMemoryExA(
__in WTS_TYPE_CLASS WTSTypeClass,
__in PVOID pMemory,
__in ULONG NumberOfEntries
);
#ifdef UNICODE
#define WTSFreeMemoryEx WTSFreeMemoryExW
#else
#define WTSFreeMemoryEx WTSFreeMemoryExA
#endif
/*------------------------------------------------*/
BOOL WINAPI
WTSEnumerateProcessesExW
(
__in HANDLE hServer,
__inout DWORD *pLevel,
__in DWORD SessionId,
__out LPWSTR *ppProcessInfo,
__out DWORD * pCount
);
BOOL WINAPI
WTSEnumerateProcessesExA
(
__in HANDLE hServer,
__inout DWORD *pLevel,
__in DWORD SessionId,
__out LPSTR *ppProcessInfo,
__out DWORD * pCount
);
#ifdef UNICODE
#define WTSEnumerateProcessesEx WTSEnumerateProcessesExW
#else
#define WTSEnumerateProcessesEx WTSEnumerateProcessesExA
#endif
/*------------------------------------------------*/
// Listener management APIs
typedef WCHAR WTSLISTENERNAMEW[WTS_LISTENER_NAME_LENGTH + 1 ];
typedef WTSLISTENERNAMEW *PWTSLISTENERNAMEW;
typedef CHAR WTSLISTENERNAMEA[WTS_LISTENER_NAME_LENGTH + 1 ];
typedef WTSLISTENERNAMEA *PWTSLISTENERNAMEA;
#ifdef UNICODE
#define WTSLISTENERNAME WTSLISTENERNAMEW
#define PWTSLISTENERNAME PWTSLISTENERNAMEW
#else
#define WTSLISTENERNAME WTSLISTENERNAMEA
#define PWTSLISTENERNAME PWTSLISTENERNAMEW
#endif
BOOL WINAPI
WTSEnumerateListenersW (
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__out_ecount_opt(*pCount) PWTSLISTENERNAMEW pListeners,
__inout DWORD* pCount
);
BOOL WINAPI
WTSEnumerateListenersA (
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__out_ecount_opt(*pCount) PWTSLISTENERNAMEA pListeners,
__inout DWORD* pCount
);
#ifdef UNICODE
#define WTSEnumerateListeners WTSEnumerateListenersW
#else
#define WTSEnumerateListeners WTSEnumerateListenersA
#endif
/*------------------------------------------------*/
// Listener Config, used by WTSQueryListenerConfig and WTSCreateListener
typedef struct _WTSLISTENERCONFIGW{
ULONG version;
ULONG fEnableListener;
ULONG MaxConnectionCount;
ULONG fPromptForPassword;
ULONG fInheritColorDepth;
ULONG ColorDepth;
ULONG fInheritBrokenTimeoutSettings;
ULONG BrokenTimeoutSettings;
ULONG fDisablePrinterRedirection;
ULONG fDisableDriveRedirection;
ULONG fDisableComPortRedirection;
ULONG fDisableLPTPortRedirection;
ULONG fDisableClipboardRedirection;
ULONG fDisableAudioRedirection;
ULONG fDisablePNPRedirection;
ULONG fDisableDefaultMainClientPrinter;
ULONG LanAdapter;
ULONG PortNumber;
ULONG fInheritShadowSettings;
ULONG ShadowSettings;
ULONG TimeoutSettingsConnection;
ULONG TimeoutSettingsDisconnection;
ULONG TimeoutSettingsIdle;
ULONG SecurityLayer;
ULONG MinEncryptionLevel;
ULONG UserAuthentication;
WCHAR Comment[ WTS_COMMENT_LENGTH + 1 ];
WCHAR LogonUserName[USERNAME_LENGTH + 1 ];
WCHAR LogonDomain[DOMAIN_LENGTH + 1 ];
WCHAR WorkDirectory[ MAX_PATH + 1 ];
WCHAR InitialProgram[ MAX_PATH + 1 ];
} WTSLISTENERCONFIGW, *PWTSLISTENERCONFIGW;
typedef struct _WTSLISTENERCONFIGA{
ULONG version;
ULONG fEnableListener;
ULONG MaxConnectionCount;
ULONG fPromptForPassword;
ULONG fInheritColorDepth;
ULONG ColorDepth;
ULONG fInheritBrokenTimeoutSettings;
ULONG BrokenTimeoutSettings;
ULONG fDisablePrinterRedirection;
ULONG fDisableDriveRedirection;
ULONG fDisableComPortRedirection;
ULONG fDisableLPTPortRedirection;
ULONG fDisableClipboardRedirection;
ULONG fDisableAudioRedirection;
ULONG fDisablePNPRedirection;
ULONG fDisableDefaultMainClientPrinter;
ULONG LanAdapter;
ULONG PortNumber;
ULONG fInheritShadowSettings;
ULONG ShadowSettings;
ULONG TimeoutSettingsConnection;
ULONG TimeoutSettingsDisconnection;
ULONG TimeoutSettingsIdle;
ULONG SecurityLayer;
ULONG MinEncryptionLevel;
ULONG UserAuthentication;
CHAR Comment[ WTS_COMMENT_LENGTH + 1 ];
CHAR LogonUserName[USERNAME_LENGTH + 1 ];
CHAR LogonDomain[DOMAIN_LENGTH + 1 ];
CHAR WorkDirectory[ MAX_PATH + 1 ];
CHAR InitialProgram[ MAX_PATH + 1 ];
} WTSLISTENERCONFIGA, *PWTSLISTENERCONFIGA;
BOOL WINAPI WTSQueryListenerConfigW (
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPWSTR pListenerName,
__out PWTSLISTENERCONFIGW pBuffer
);
BOOL WINAPI WTSQueryListenerConfigA (
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPSTR pListenerName,
__out PWTSLISTENERCONFIGA pBuffer
);
BOOL WINAPI WTSCreateListenerW (
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPWSTR pListenerName,
__in PWTSLISTENERCONFIGW pBuffer,
__in DWORD flag
);
BOOL WINAPI WTSCreateListenerA (
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPSTR pListenerName,
__in PWTSLISTENERCONFIGA pBuffer,
__in DWORD flag
);
BOOL WINAPI WTSSetListenerSecurityW(
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPWSTR pListenerName,
__in SECURITY_INFORMATION SecurityInformation,
__in PSECURITY_DESCRIPTOR pSecurityDescriptor);
BOOL WINAPI WTSSetListenerSecurityA(
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPSTR pListenerName,
__in SECURITY_INFORMATION SecurityInformation,
__in PSECURITY_DESCRIPTOR pSecurityDescriptor);
BOOL WINAPI WTSGetListenerSecurityW(
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPWSTR pListenerName,
__in SECURITY_INFORMATION SecurityInformation,
__out_opt PSECURITY_DESCRIPTOR pSecurityDescriptor,
__in DWORD nLength,
__out LPDWORD lpnLengthNeeded);
BOOL WINAPI WTSGetListenerSecurityA(
__in HANDLE hServer,
__in PVOID pReserved,
__in DWORD Reserved,
__in LPSTR pListenerName,
__in SECURITY_INFORMATION SecurityInformation,
__out_opt PSECURITY_DESCRIPTOR pSecurityDescriptor,
__in DWORD nLength,
__out LPDWORD lpnLengthNeeded);
#ifdef UNICODE
#define WTSLISTENERCONFIG WTSLISTENERCONFIGW
#define PWTSLISTENERCONFIG PWTSLISTENERCONFIGW
#define WTSQueryListenerConfig WTSQueryListenerConfigW
#define WTSCreateListener WTSCreateListenerW
#define WTSSetListenerSecurity WTSSetListenerSecurityW
#define WTSGetListenerSecurity WTSGetListenerSecurityW
#else
#define WTSLISTENERCONFIG WTSLISTENERCONFIGA
#define PWTSLISTENERCONFIG PWTSLISTENERCONFIGA
#define WTSQueryListenerConfig WTSQueryListenerConfigA
#define WTSCreateListener WTSCreateListenerA
#define WTSSetListenerSecurity WTSSetListenerSecurityA
#define WTSGetListenerSecurity WTSGetListenerSecurityA
#endif
#ifdef __cplusplus
}
#endif
#endif /* !_INC_WTSAPI */