/** * 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