|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  | #ifndef _INC_WTSAPI | 
|  | #define _INC_WTSAPI | 
|  |  | 
|  | #include <_mingw_unicode.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | #define WTS_CURRENT_SERVER ((HANDLE)NULL) | 
|  | #define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL) | 
|  | #define WTS_CURRENT_SERVER_NAME (NULL) | 
|  |  | 
|  | #define WTS_CURRENT_SESSION ((DWORD)-1) | 
|  | #define WTS_ANY_SESSION ((DWORD)-2) | 
|  |  | 
|  | #ifndef IDTIMEOUT | 
|  | #define IDTIMEOUT 32000 | 
|  | #endif | 
|  | #ifndef IDASYNC | 
|  | #define IDASYNC 32001 | 
|  | #endif | 
|  |  | 
|  | #define USERNAME_LENGTH         20 | 
|  | #define CLIENTNAME_LENGTH       20 | 
|  | #define CLIENTADDRESS_LENGTH    30 | 
|  | #define WINSTATIONNAME_LENGTH   32 | 
|  | #define DOMAIN_LENGTH           17 | 
|  |  | 
|  | #define WTS_WSD_LOGOFF 0x1 | 
|  | #define WTS_WSD_SHUTDOWN 0x2 | 
|  | #define WTS_WSD_REBOOT 0x4 | 
|  | #define WTS_WSD_POWEROFF 0x8 | 
|  |  | 
|  | #define WTS_WSD_FASTREBOOT 0x10 | 
|  |  | 
|  | #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 | 
|  |  | 
|  | #define WTS_LISTENER_CREATE 0x00000001 | 
|  | #define WTS_LISTENER_UPDATE 0x00000010 | 
|  |  | 
|  | #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) | 
|  |  | 
|  | typedef enum _WTS_CONNECTSTATE_CLASS { | 
|  | WTSActive,WTSConnected,WTSConnectQuery,WTSShadow,WTSDisconnected,WTSIdle,WTSListen,WTSReset,WTSDown,WTSInit | 
|  | } WTS_CONNECTSTATE_CLASS; | 
|  |  | 
|  | typedef struct _WTS_SERVER_INFOW { | 
|  | LPWSTR pServerName; | 
|  | } WTS_SERVER_INFOW,*PWTS_SERVER_INFOW; | 
|  |  | 
|  | typedef struct _WTS_SERVER_INFOA { | 
|  | LPSTR pServerName; | 
|  | } WTS_SERVER_INFOA,*PWTS_SERVER_INFOA; | 
|  |  | 
|  | #define WTS_SERVER_INFO __MINGW_NAME_AW(WTS_SERVER_INFO) | 
|  | #define PWTS_SERVER_INFO __MINGW_NAME_AW(PWTS_SERVER_INFO) | 
|  |  | 
|  | typedef struct _WTS_SESSION_INFOW { | 
|  | DWORD SessionId; | 
|  | LPWSTR pWinStationName; | 
|  | WTS_CONNECTSTATE_CLASS State; | 
|  | } WTS_SESSION_INFOW,*PWTS_SESSION_INFOW; | 
|  |  | 
|  | typedef struct _WTS_SESSION_INFOA { | 
|  | DWORD SessionId; | 
|  | LPSTR pWinStationName; | 
|  | WTS_CONNECTSTATE_CLASS State; | 
|  | } WTS_SESSION_INFOA,*PWTS_SESSION_INFOA; | 
|  |  | 
|  | #define WTS_SESSION_INFO __MINGW_NAME_AW(WTS_SESSION_INFO) | 
|  | #define PWTS_SESSION_INFO __MINGW_NAME_AW(PWTS_SESSION_INFO) | 
|  |  | 
|  | typedef struct _WTS_PROCESS_INFOW { | 
|  | DWORD SessionId; | 
|  | DWORD ProcessId; | 
|  | LPWSTR pProcessName; | 
|  | PSID pUserSid; | 
|  | } WTS_PROCESS_INFOW,*PWTS_PROCESS_INFOW; | 
|  |  | 
|  | typedef struct _WTS_PROCESS_INFOA { | 
|  | DWORD SessionId; | 
|  | DWORD ProcessId; | 
|  | LPSTR pProcessName; | 
|  | PSID pUserSid; | 
|  | } WTS_PROCESS_INFOA,*PWTS_PROCESS_INFOA; | 
|  |  | 
|  | #define WTS_PROCESS_INFO __MINGW_NAME_AW(WTS_PROCESS_INFO) | 
|  | #define PWTS_PROCESS_INFO __MINGW_NAME_AW(PWTS_PROCESS_INFO) | 
|  |  | 
|  | #define WTS_PROTOCOL_TYPE_CONSOLE 0 | 
|  | #define WTS_PROTOCOL_TYPE_ICA 1 | 
|  | #define WTS_PROTOCOL_TYPE_RDP 2 | 
|  |  | 
|  | typedef enum _WTS_INFO_CLASS { | 
|  | WTSInitialProgram       = 0, | 
|  | WTSApplicationName      = 1, | 
|  | WTSWorkingDirectory     = 2, | 
|  | WTSOEMId                = 3, | 
|  | WTSSessionId            = 4, | 
|  | WTSUserName             = 5, | 
|  | WTSWinStationName       = 6, | 
|  | WTSDomainName           = 7, | 
|  | WTSConnectState         = 8, | 
|  | WTSClientBuildNumber    = 9, | 
|  | WTSClientName           = 10, | 
|  | WTSClientDirectory      = 11, | 
|  | WTSClientProductId      = 12, | 
|  | WTSClientHardwareId     = 13, | 
|  | WTSClientAddress        = 14, | 
|  | WTSClientDisplay        = 15, | 
|  | WTSClientProtocolType   = 16, | 
|  | WTSIdleTime             = 17, | 
|  | WTSLogonTime            = 18, | 
|  | WTSIncomingBytes        = 19, | 
|  | WTSOutgoingBytes        = 20, | 
|  | WTSIncomingFrames       = 21, | 
|  | WTSOutgoingFrames       = 22, | 
|  | WTSClientInfo           = 23, | 
|  | WTSSessionInfo          = 24, | 
|  | WTSSessionInfoEx        = 25, | 
|  | WTSConfigInfo           = 26, | 
|  | WTSValidationInfo       = 27, | 
|  | WTSSessionAddressV4     = 28, | 
|  | WTSIsRemoteSession      = 29 | 
|  | } WTS_INFO_CLASS; | 
|  |  | 
|  | 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; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(WTSCONFIGINFO) | 
|  | __MINGW_TYPEDEF_AW(PWTSCONFIGINFO) | 
|  |  | 
|  | typedef struct _WTS_CLIENT_ADDRESS { | 
|  | DWORD AddressFamily; | 
|  | BYTE Address[20]; | 
|  | } WTS_CLIENT_ADDRESS,*PWTS_CLIENT_ADDRESS; | 
|  |  | 
|  | typedef struct _WTS_CLIENT_DISPLAY { | 
|  | DWORD HorizontalResolution; | 
|  | DWORD VerticalResolution; | 
|  | DWORD ColorDepth; | 
|  | } WTS_CLIENT_DISPLAY,*PWTS_CLIENT_DISPLAY; | 
|  |  | 
|  | typedef enum _WTS_CONFIG_CLASS { | 
|  | WTSUserConfigInitialProgram,WTSUserConfigWorkingDirectory,WTSUserConfigfInheritInitialProgram,WTSUserConfigfAllowLogonTerminalServer, | 
|  | WTSUserConfigTimeoutSettingsConnections,WTSUserConfigTimeoutSettingsDisconnections,WTSUserConfigTimeoutSettingsIdle, | 
|  | WTSUserConfigfDeviceClientDrives,WTSUserConfigfDeviceClientPrinters,WTSUserConfigfDeviceClientDefaultPrinter,WTSUserConfigBrokenTimeoutSettings, | 
|  | WTSUserConfigReconnectSettings,WTSUserConfigModemCallbackSettings,WTSUserConfigModemCallbackPhoneNumber,WTSUserConfigShadowingSettings, | 
|  | WTSUserConfigTerminalServerProfilePath,WTSUserConfigTerminalServerHomeDir,WTSUserConfigTerminalServerHomeDirDrive, | 
|  | WTSUserConfigfTerminalServerRemoteHomeDir,WTSUserConfigUser | 
|  | } 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; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(WTSUSERCONFIG) | 
|  | __MINGW_TYPEDEF_AW(PWTSUSERCONFIG) | 
|  |  | 
|  | #define WTS_EVENT_NONE 0x0 | 
|  | #define WTS_EVENT_CREATE 0x1 | 
|  | #define WTS_EVENT_DELETE 0x2 | 
|  | #define WTS_EVENT_RENAME 0x4 | 
|  | #define WTS_EVENT_CONNECT 0x8 | 
|  | #define WTS_EVENT_DISCONNECT 0x10 | 
|  | #define WTS_EVENT_LOGON 0x20 | 
|  | #define WTS_EVENT_LOGOFF 0x40 | 
|  | #define WTS_EVENT_STATECHANGE 0x80 | 
|  | #define WTS_EVENT_LICENSE 0x100 | 
|  | #define WTS_EVENT_ALL 0x7fffffff | 
|  | #define WTS_EVENT_FLUSH 0x80000000 | 
|  |  | 
|  | #define REMOTECONTROL_KBDSHIFT_HOTKEY 0x1 | 
|  | #define REMOTECONTROL_KBDCTRL_HOTKEY 0x2 | 
|  | #define REMOTECONTROL_KBDALT_HOTKEY 0x4 | 
|  |  | 
|  | typedef enum _WTS_VIRTUAL_CLASS { | 
|  | WTSVirtualClientData,WTSVirtualFileHandle | 
|  | } WTS_VIRTUAL_CLASS; | 
|  |  | 
|  | typedef struct _WTS_SESSION_ADDRESS { | 
|  | DWORD AddressFamily; | 
|  | BYTE Address[20]; | 
|  | } WTS_SESSION_ADDRESS, *PWTS_SESSION_ADDRESS; | 
|  |  | 
|  | #define WTSEnumerateServers __MINGW_NAME_AW(WTSEnumerateServers) | 
|  | #define WTSOpenServer __MINGW_NAME_AW(WTSOpenServer) | 
|  | #define WTSOpenServerEx __MINGW_NAME_AW(WTSOpenServerEx) | 
|  | #define WTSEnumerateSessions __MINGW_NAME_AW(WTSEnumerateSessions) | 
|  | #define WTSEnumerateProcesses __MINGW_NAME_AW(WTSEnumerateProcesses) | 
|  | #define WTSQuerySessionInformation __MINGW_NAME_AW(WTSQuerySessionInformation) | 
|  | #define WTSQueryUserConfig __MINGW_NAME_AW(WTSQueryUserConfig) | 
|  | #define WTSSetUserConfig __MINGW_NAME_AW(WTSSetUserConfig) | 
|  | #define WTSSendMessage __MINGW_NAME_AW(WTSSendMessage) | 
|  |  | 
|  | WINBOOL WINAPI WTSEnumerateServersW(LPWSTR pDomainName,DWORD Reserved,DWORD Version,PWTS_SERVER_INFOW *ppServerInfo,DWORD *pCount); | 
|  | WINBOOL WINAPI WTSEnumerateServersA(LPSTR pDomainName,DWORD Reserved,DWORD Version,PWTS_SERVER_INFOA *ppServerInfo,DWORD *pCount); | 
|  | HANDLE WINAPI WTSOpenServerW(LPWSTR pServerName); | 
|  | HANDLE WINAPI WTSOpenServerA(LPSTR pServerName); | 
|  | HANDLE WINAPI WTSOpenServerExW(LPWSTR pServerName); | 
|  | HANDLE WINAPI WTSOpenServerExA(LPSTR pServerName); | 
|  | VOID WINAPI WTSCloseServer(HANDLE hServer); | 
|  | WINBOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_SESSION_INFOW *ppSessionInfo,DWORD *pCount); | 
|  | WINBOOL WINAPI WTSEnumerateSessionsA(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_SESSION_INFOA *ppSessionInfo,DWORD *pCount); | 
|  | WINBOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_PROCESS_INFOW *ppProcessInfo,DWORD *pCount); | 
|  | WINBOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_PROCESS_INFOA *ppProcessInfo,DWORD *pCount); | 
|  | WINBOOL WINAPI WTSTerminateProcess(HANDLE hServer,DWORD ProcessId,DWORD ExitCode); | 
|  | WINBOOL WINAPI WTSQuerySessionInformationW(HANDLE hServer,DWORD SessionId,WTS_INFO_CLASS WTSInfoClass,LPWSTR *ppBuffer,DWORD *pBytesReturned); | 
|  | WINBOOL WINAPI WTSQuerySessionInformationA(HANDLE hServer,DWORD SessionId,WTS_INFO_CLASS WTSInfoClass,LPSTR *ppBuffer,DWORD *pBytesReturned); | 
|  | WINBOOL WINAPI WTSQueryUserConfigW(LPWSTR pServerName,LPWSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPWSTR *ppBuffer,DWORD *pBytesReturned); | 
|  | WINBOOL WINAPI WTSQueryUserConfigA(LPSTR pServerName,LPSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPSTR *ppBuffer,DWORD *pBytesReturned); | 
|  | WINBOOL WINAPI WTSSetUserConfigW(LPWSTR pServerName,LPWSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPWSTR pBuffer,DWORD DataLength); | 
|  | WINBOOL WINAPI WTSSetUserConfigA(LPSTR pServerName,LPSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPSTR pBuffer,DWORD DataLength); | 
|  | WINBOOL WINAPI WTSSendMessageW(HANDLE hServer,DWORD SessionId,LPWSTR pTitle,DWORD TitleLength,LPWSTR pMessage,DWORD MessageLength,DWORD Style,DWORD Timeout,DWORD *pResponse,WINBOOL bWait); | 
|  | WINBOOL WINAPI WTSSendMessageA(HANDLE hServer,DWORD SessionId,LPSTR pTitle,DWORD TitleLength,LPSTR pMessage,DWORD MessageLength,DWORD Style,DWORD Timeout,DWORD *pResponse,WINBOOL bWait); | 
|  | WINBOOL WINAPI WTSDisconnectSession(HANDLE hServer,DWORD SessionId,WINBOOL bWait); | 
|  | WINBOOL WINAPI WTSLogoffSession(HANDLE hServer,DWORD SessionId,WINBOOL bWait); | 
|  | WINBOOL WINAPI WTSShutdownSystem(HANDLE hServer,DWORD ShutdownFlag); | 
|  | WINBOOL WINAPI WTSWaitSystemEvent(HANDLE hServer,DWORD EventMask,DWORD *pEventFlags); | 
|  | HANDLE WINAPI WTSVirtualChannelOpen(HANDLE hServer,DWORD SessionId,LPSTR pVirtualName); | 
|  | WINBOOL WINAPI WTSVirtualChannelClose(HANDLE hChannelHandle); | 
|  | WINBOOL WINAPI WTSVirtualChannelRead(HANDLE hChannelHandle,ULONG TimeOut,PCHAR Buffer,ULONG BufferSize,PULONG pBytesRead); | 
|  | WINBOOL WINAPI WTSVirtualChannelWrite(HANDLE hChannelHandle,PCHAR Buffer,ULONG Length,PULONG pBytesWritten); | 
|  | WINBOOL WINAPI WTSVirtualChannelPurgeInput(HANDLE hChannelHandle); | 
|  | WINBOOL WINAPI WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle); | 
|  | WINBOOL WINAPI WTSVirtualChannelQuery(HANDLE hChannelHandle,WTS_VIRTUAL_CLASS,PVOID *ppBuffer,DWORD *pBytesReturned); | 
|  | VOID WINAPI WTSFreeMemory(PVOID pMemory); | 
|  |  | 
|  | #define NOTIFY_FOR_ALL_SESSIONS 1 | 
|  | #define NOTIFY_FOR_THIS_SESSION 0 | 
|  |  | 
|  | WINBOOL WINAPI WTSRegisterSessionNotification(HWND hWnd,DWORD dwFlags); | 
|  | WINBOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd); | 
|  | WINBOOL WINAPI WTSQueryUserToken(ULONG SessionId,PHANDLE phToken); | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0600) | 
|  | 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; | 
|  | ULONG   ClientAddressFamily; | 
|  | USHORT  ClientAddress[CLIENTADDRESS_LENGTH + 1]; | 
|  | USHORT  HRes; | 
|  | USHORT  VRes; | 
|  | USHORT  ColorDepth; | 
|  | WCHAR   ClientDirectory[MAX_PATH + 1]; | 
|  | ULONG   ClientBuildNumber; | 
|  | ULONG   ClientHardwareId; | 
|  | USHORT  ClientProductId; | 
|  | USHORT  OutBufCountHost; | 
|  | USHORT  OutBufCountClient; | 
|  | USHORT  OutBufLength; | 
|  | WCHAR     DeviceId[MAX_PATH + 1]; | 
|  | } WTSCLIENTW, *PWTSCLIENTW; | 
|  |  | 
|  | 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; | 
|  | ULONG   ClientAddressFamily; | 
|  | USHORT  ClientAddress[CLIENTADDRESS_LENGTH + 1]; | 
|  | USHORT  HRes; | 
|  | USHORT  VRes; | 
|  | USHORT  ColorDepth; | 
|  | CHAR   ClientDirectory[MAX_PATH + 1]; | 
|  | ULONG   ClientBuildNumber; | 
|  | ULONG   ClientHardwareId; | 
|  | USHORT  ClientProductId; | 
|  | USHORT  OutBufCountHost; | 
|  | USHORT  OutBufCountClient; | 
|  | USHORT  OutBufLength; | 
|  | CHAR     DeviceId[MAX_PATH + 1]; | 
|  | } WTSCLIENTA, *PWTSCLIENTA; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(WTSCLIENT) | 
|  | __MINGW_TYPEDEF_AW(PWTSCLIENT) | 
|  |  | 
|  | #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; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(PRODUCT_INFO) | 
|  |  | 
|  | #define VALIDATIONINFORMATION_LICENSE_LENGTH 16384 | 
|  | #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; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(WTS_VALIDATION_INFORMATION) | 
|  | __MINGW_TYPEDEF_AW(PWTS_VALIDATION_INFORMATION) | 
|  |  | 
|  | typedef struct _WTSINFOW { | 
|  | WTS_CONNECTSTATE_CLASS State; | 
|  | DWORD                  SessionId; | 
|  | 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]; | 
|  | LARGE_INTEGER          ConnectTime; | 
|  | LARGE_INTEGER          DisconnectTime; | 
|  | LARGE_INTEGER          LastInputTime; | 
|  | LARGE_INTEGER          LogonTime; | 
|  | LARGE_INTEGER          CurrentTime; | 
|  | } WTSINFOW, *PWTSINFOW; | 
|  |  | 
|  | typedef struct _WTSINFOA { | 
|  | WTS_CONNECTSTATE_CLASS State; | 
|  | DWORD                  SessionId; | 
|  | DWORD                  IncomingBytes; | 
|  | DWORD                  OutgoingBytes; | 
|  | DWORD                  IncomingFrames; | 
|  | DWORD                  OutgoingFrames; | 
|  | DWORD                  IncomingCompressedBytes; | 
|  | DWORD                  OutgoingCompressedBytes; | 
|  | CHAR                   WinStationName[WINSTATIONNAME_LENGTH]; | 
|  | CHAR                   Domain[DOMAIN_LENGTH]; | 
|  | CHAR                   UserName[USERNAME_LENGTH+1]; | 
|  | LARGE_INTEGER          ConnectTime; | 
|  | LARGE_INTEGER          DisconnectTime; | 
|  | LARGE_INTEGER          LastInputTime; | 
|  | LARGE_INTEGER          LogonTime; | 
|  | LARGE_INTEGER          CurrentTime; | 
|  | } WTSINFOA, *PWTSINFOA; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(WTSINFO) | 
|  | __MINGW_TYPEDEF_AW(PWTSINFO) | 
|  |  | 
|  | #define WTS_SESSIONSTATE_UNKNOWN 0xffffffff | 
|  | #define WTS_SESSIONSTATE_LOCK 0x00000000 | 
|  | #define WTS_SESSIONSTATE_UNLOCK 0x00000001 | 
|  |  | 
|  | 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; | 
|  |  | 
|  | __MINGW_TYPEDEF_UAW(WTSINFOEX_LEVEL1) | 
|  | __MINGW_TYPEDEF_UAW(PWTSINFOEX_LEVEL1) | 
|  |  | 
|  | 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; | 
|  |  | 
|  | __MINGW_TYPEDEF_UAW(WTSINFOEX_LEVEL) | 
|  | __MINGW_TYPEDEF_UAW(PWTSINFOEX_LEVEL) | 
|  |  | 
|  | typedef struct _WTSINFOEXW { | 
|  | DWORD Level; | 
|  | WTSINFOEX_LEVEL_W Data; | 
|  | } WTSINFOEXW, *PWTSINFOEXW; | 
|  |  | 
|  | typedef struct _WTSINFOEXA { | 
|  | DWORD Level; | 
|  | WTSINFOEX_LEVEL_A Data; | 
|  | } WTSINFOEXA, *PWTSINFOEXA; | 
|  |  | 
|  | __MINGW_TYPEDEF_AW(WTSINFOEX) | 
|  | __MINGW_TYPEDEF_AW(PWTSINFOEX) | 
|  |  | 
|  | WINBOOL WINAPI WTSConnectSessionA( | 
|  | ULONG LogonId, | 
|  | ULONG TargetLogonId, | 
|  | PSTR   pPassword, | 
|  | WINBOOL bWait | 
|  | ); | 
|  |  | 
|  | WINBOOL WINAPI WTSConnectSessionW( | 
|  | ULONG LogonId, | 
|  | ULONG TargetLogonId, | 
|  | PWSTR  pPassword, | 
|  | WINBOOL bWait | 
|  | ); | 
|  |  | 
|  | WINBOOL WTSRegisterSessionNotificationEx( | 
|  | HANDLE hServer, | 
|  | HWND hWnd, | 
|  | DWORD dwFlags | 
|  | ); | 
|  |  | 
|  | WINBOOL WINAPI WTSStartRemoteControlSessionA( | 
|  | LPSTR pTargetServerName, | 
|  | ULONG TargetLogonId, | 
|  | BYTE HotkeyVk, | 
|  | USHORT HotkeyModifiers | 
|  | ); | 
|  |  | 
|  | WINBOOL WINAPI WTSStartRemoteControlSessionW( | 
|  | LPWSTR pTargetServerName, | 
|  | ULONG TargetLogonId, | 
|  | BYTE HotkeyVk, | 
|  | USHORT HotkeyModifiers | 
|  | ); | 
|  |  | 
|  | #define WTSStartRemoteControlSession __MINGW_NAME_AW(WTSStartRemoteControlSession) | 
|  | #define WTSConnectSession __MINGW_NAME_AW(WTSConnectSession) | 
|  |  | 
|  | WINBOOL WINAPI WTSStopRemoteControlSession( | 
|  | ULONG LogonId | 
|  | ); | 
|  |  | 
|  | WINBOOL WINAPI WTSUnRegisterSessionNotificationEx( | 
|  | HANDLE hServer, | 
|  | HWND hWnd | 
|  | ); | 
|  |  | 
|  | #define WTS_CHANNEL_OPTION_DYNAMIC 0x00000001 | 
|  | #define WTS_CHANNEL_OPTION_DYNAMIC_PRI_LOW 0x00000000 | 
|  | #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( | 
|  | DWORD SessionId, | 
|  | LPSTR pVirtualName, | 
|  | DWORD flags | 
|  | ); | 
|  |  | 
|  | #endif /*(_WIN32_WINNT >= 0x0600)*/ | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0601) | 
|  |  | 
|  | 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; | 
|  |  | 
|  | 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; | 
|  |  | 
|  | #define WTS_SESSION_INFO_1 __MINGW_NAME_AW(WTS_SESSION_INFO_1) | 
|  | #define PWTS_SESSION_INFO_1 __MINGW_NAME_AW(PWTS_SESSION_INFO_1) | 
|  |  | 
|  | WINBOOL WINAPI WTSEnumerateSessionsExA(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1A* ppSessionInfo,DWORD* pCount); | 
|  | WINBOOL WINAPI WTSEnumerateSessionsExW(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1W* ppSessionInfo,DWORD* pCount); | 
|  | #define WTSEnumerateSessionsEx __MINGW_NAME_AW(WTSEnumerateSessionsEx) | 
|  |  | 
|  | typedef enum _WTS_TYPE_CLASS { | 
|  | WTSTypeProcessInfoLevel0, | 
|  | WTSTypeProcessInfoLevel1, | 
|  | WTSTypeSessionInfoLevel1 | 
|  | } WTS_TYPE_CLASS; | 
|  | WINBOOL WINAPI WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries); | 
|  | WINBOOL WINAPI WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries); | 
|  | #define WTSFreeMemoryEx __MINGW_NAME_AW(WTSFreeMemoryEx) | 
|  |  | 
|  | #endif /*(_WIN32_WINNT >= 0x0601)*/ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  | #endif |