| /** |
| * 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) |
| |
| #ifndef IDTIMEOUT |
| #define IDTIMEOUT 32000 |
| #endif |
| #ifndef IDASYNC |
| #define IDASYNC 32001 |
| #endif |
| |
| #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 |
| |
| 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 |
| } WTS_INFO_CLASS; |
| |
| 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 |
| } WTS_CONFIG_CLASS; |
| |
| #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 |
| |
| typedef enum _WTS_VIRTUAL_CLASS { |
| WTSVirtualClientData,WTSVirtualFileHandle |
| } WTS_VIRTUAL_CLASS; |
| |
| #define WTSEnumerateServers __MINGW_NAME_AW(WTSEnumerateServers) |
| #define WTSOpenServer __MINGW_NAME_AW(WTSOpenServer) |
| #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); |
| 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); |
| |
| |
| #define USERNAME_LENGTH 20 |
| #define CLIENTNAME_LENGTH 20 |
| #define CLIENTADDRESS_LENGTH 30 |
| #define WINSTATIONNAME_LENGTH 32 |
| #define DOMAIN_LENGTH 17 |
| |
| #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) |
| |
| 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) |
| |
| 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 |
| ); |
| |
| HANDLE WINAPI WTSVirtualChannelOpenEx( |
| DWORD SessionId, |
| LPSTR pVirtualName, |
| DWORD flags |
| ); |
| |
| #endif /*(_WIN32_WINNT >= 0x0600)*/ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif |