/** * Windows API header module * * Translated from MinGW-w64 API * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) * Source: $(DRUNTIMESRC core/sys/windows/_wtsapi32.d) */ module core.sys.windows.wtsapi32; version (Windows): @system: version (ANSI) {} else version = Unicode; pragma(lib, "wtsapi32"); import core.sys.windows.w32api; import core.sys.windows.windef; enum { WTS_CURRENT_SERVER = null, WTS_CURRENT_SERVER_HANDLE = null, WTS_CURRENT_SERVER_NAME = null } enum DWORD WTS_CURRENT_SESSION = cast(DWORD) -1; enum { IDTIMEOUT = 32000, IDASYNC = 32001 } enum { WTS_WSD_LOGOFF = 0x01, WTS_WSD_SHUTDOWN = 0x02, WTS_WSD_REBOOT = 0x04, WTS_WSD_POWEROFF = 0x08, WTS_WSD_FASTREBOOT = 0x10 } enum WTS_CONNECTSTATE_CLASS { WTSActive, WTSConnected, WTSConnectQuery, WTSShadow, WTSDisconnected, WTSIdle, WTSListen, WTSReset, WTSDown, WTSInit } struct WTS_SERVER_INFOW { LPWSTR pServerName; } alias WTS_SERVER_INFOW* PWTS_SERVER_INFOW; struct WTS_SERVER_INFOA { LPSTR pServerName; } alias WTS_SERVER_INFOA* PWTS_SERVER_INFOA; version (Unicode) { alias WTS_SERVER_INFOW WTS_SERVER_INFO; alias PWTS_SERVER_INFOW PWTS_SERVER_INFO; } else { alias WTS_SERVER_INFOA WTS_SERVER_INFO; alias PWTS_SERVER_INFOA PWTS_SERVER_INFO; } struct WTS_SESSION_INFOW { DWORD SessionId; LPWSTR pWinStationName; WTS_CONNECTSTATE_CLASS State; } alias WTS_SESSION_INFOW* PWTS_SESSION_INFOW; struct WTS_SESSION_INFOA { DWORD SessionId; LPSTR pWinStationName; WTS_CONNECTSTATE_CLASS State; } alias WTS_SESSION_INFOA* PWTS_SESSION_INFOA; version (Unicode) { alias WTS_SESSION_INFOW WTS_SESSION_INFO; alias PWTS_SESSION_INFOW PWTS_SESSION_INFO; } else { alias WTS_SESSION_INFOA WTS_SESSION_INFO; alias PWTS_SESSION_INFOA PWTS_SESSION_INFO; } struct WTS_PROCESS_INFOW { DWORD SessionId; DWORD ProcessId; LPWSTR pProcessName; PSID pUserSid; } alias WTS_PROCESS_INFOW* PWTS_PROCESS_INFOW; struct WTS_PROCESS_INFOA { DWORD SessionId; DWORD ProcessId; LPSTR pProcessName; PSID pUserSid; } alias WTS_PROCESS_INFOA* PWTS_PROCESS_INFOA; version (Unicode) { alias WTS_PROCESS_INFOW WTS_PROCESS_INFO; alias PWTS_PROCESS_INFOW PWTS_PROCESS_INFO; } else { alias WTS_PROCESS_INFOA WTS_PROCESS_INFO; alias PWTS_PROCESS_INFOA PWTS_PROCESS_INFO; } enum { WTS_PROTOCOL_TYPE_CONSOLE, WTS_PROTOCOL_TYPE_ICA, WTS_PROTOCOL_TYPE_RDP } 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, // = 24 } struct WTS_CLIENT_ADDRESS { DWORD AddressFamily; BYTE[20] Address; } alias WTS_CLIENT_ADDRESS* PWTS_CLIENT_ADDRESS; struct WTS_CLIENT_DISPLAY { DWORD HorizontalResolution; DWORD VerticalResolution; DWORD ColorDepth; } alias WTS_CLIENT_DISPLAY* PWTS_CLIENT_DISPLAY; enum WTS_CONFIG_CLASS { WTSUserConfigInitialProgram, WTSUserConfigWorkingDirectory, WTSUserConfigfInheritInitialProgram, WTSUserConfigfAllowLogonTerminalServer, WTSUserConfigTimeoutSettingsConnections, WTSUserConfigTimeoutSettingsDisconnections, WTSUserConfigTimeoutSettingsIdle, WTSUserConfigfDeviceClientDrives, WTSUserConfigfDeviceClientPrinters, WTSUserConfigfDeviceClientDefaultPrinter, WTSUserConfigBrokenTimeoutSettings, WTSUserConfigReconnectSettings, WTSUserConfigModemCallbackSettings, WTSUserConfigModemCallbackPhoneNumber, WTSUserConfigShadowingSettings, WTSUserConfigTerminalServerProfilePath, WTSUserConfigTerminalServerHomeDir, WTSUserConfigTerminalServerHomeDirDrive, WTSUserConfigfTerminalServerRemoteHomeDir } enum { WTS_EVENT_NONE = 0x0, WTS_EVENT_CREATE = 0x1, WTS_EVENT_DELETE = 0x2, WTS_EVENT_RENAME = 0x4, WTS_EVENT_CONNECT = 0x8, WTS_EVENT_DISCONNECT = 0x10, WTS_EVENT_LOGON = 0x20, WTS_EVENT_LOGOFF = 0x40, WTS_EVENT_STATECHANGE = 0x80, WTS_EVENT_LICENSE = 0x100, WTS_EVENT_ALL = 0x7fffffff, WTS_EVENT_FLUSH = 0x80000000 } enum WTS_VIRTUAL_CLASS { WTSVirtualClientData, WTSVirtualFileHandle } version (Unicode) { alias WTSEnumerateServersW WTSEnumerateServers; alias WTSOpenServerW WTSOpenServer; alias WTSEnumerateSessionsW WTSEnumerateSessions; alias WTSEnumerateProcessesW WTSEnumerateProcesses; alias WTSQuerySessionInformationW WTSQuerySessionInformation; alias WTSQueryUserConfigW WTSQueryUserConfig; alias WTSSetUserConfigW WTSSetUserConfig; alias WTSSendMessageW WTSSendMessage; } else { alias WTSEnumerateServersA WTSEnumerateServers; alias WTSOpenServerA WTSOpenServer; alias WTSEnumerateSessionsA WTSEnumerateSessions; alias WTSEnumerateProcessesA WTSEnumerateProcesses; alias WTSQuerySessionInformationA WTSQuerySessionInformation; alias WTSQueryUserConfigA WTSQueryUserConfig; alias WTSSetUserConfigA WTSSetUserConfig; alias WTSSendMessageA WTSSendMessage; } extern(Windows) { WINBOOL WTSEnumerateServersW(LPWSTR pDomainName, DWORD Reserved, DWORD Version, PWTS_SERVER_INFOW* ppServerInfo, DWORD* pCount); WINBOOL WTSEnumerateServersA(LPSTR pDomainName, DWORD Reserved, DWORD Version, PWTS_SERVER_INFOA* ppServerInfo, DWORD* pCount); HANDLE WTSOpenServerW(LPWSTR pServerName); HANDLE WTSOpenServerA(LPSTR pServerName); VOID WTSCloseServer(HANDLE hServer); WINBOOL WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_SESSION_INFOW* ppSessionInfo, DWORD* pCount); WINBOOL WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_SESSION_INFOA* ppSessionInfo, DWORD* pCount); WINBOOL WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOW* ppProcessInfo, DWORD* pCount); WINBOOL WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOA* ppProcessInfo, DWORD* pCount); WINBOOL WTSTerminateProcess(HANDLE hServer, DWORD ProcessId, DWORD ExitCode); WINBOOL WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPWSTR* ppBuffer, DWORD* pBytesReturned); WINBOOL WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPSTR* ppBuffer, DWORD* pBytesReturned); WINBOOL WTSQueryUserConfigW(LPWSTR pServerName, LPWSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer, DWORD* pBytesReturned); WINBOOL WTSQueryUserConfigA(LPSTR pServerName, LPSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer, DWORD* pBytesReturned); WINBOOL WTSSetUserConfigW(LPWSTR pServerName, LPWSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer, DWORD DataLength); WINBOOL WTSSetUserConfigA(LPSTR pServerName, LPSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer, DWORD DataLength); WINBOOL WTSSendMessageW(HANDLE hServer, DWORD SessionId, LPWSTR pTitle, DWORD TitleLength, LPWSTR pMessage, DWORD MessageLength, DWORD Style, DWORD Timeout, DWORD* pResponse, WINBOOL bWait); WINBOOL WTSSendMessageA(HANDLE hServer, DWORD SessionId, LPSTR pTitle, DWORD TitleLength, LPSTR pMessage, DWORD MessageLength, DWORD Style, DWORD Timeout, DWORD* pResponse, WINBOOL bWait); WINBOOL WTSDisconnectSession(HANDLE hServer, DWORD SessionId, WINBOOL bWait); WINBOOL WTSLogoffSession(HANDLE hServer, DWORD SessionId, WINBOOL bWait); WINBOOL WTSShutdownSystem(HANDLE hServer, DWORD ShutdownFlag); WINBOOL WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags); HANDLE WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId, LPSTR pVirtualName); WINBOOL WTSVirtualChannelClose(HANDLE hChannelHandle); WINBOOL WTSVirtualChannelRead(HANDLE hChannelHandle, ULONG TimeOut, PCHAR Buffer, ULONG BufferSize, PULONG pBytesRead); WINBOOL WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer, ULONG Length, PULONG pBytesWritten); WINBOOL WTSVirtualChannelPurgeInput(HANDLE hChannelHandle); WINBOOL WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle); WINBOOL WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CLASS, PVOID* ppBuffer, DWORD* pBytesReturned); VOID WTSFreeMemory(PVOID pMemory); WINBOOL WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags); WINBOOL WTSUnRegisterSessionNotification(HWND hWnd); WINBOOL WTSQueryUserToken(ULONG SessionId, PHANDLE phToken); } enum { NOTIFY_FOR_ALL_SESSIONS = 1, NOTIFY_FOR_THIS_SESSION = 0 } enum { USERNAME_LENGTH = 20, CLIENTNAME_LENGTH = 20, CLIENTADDRESS_LENGTH = 30, WINSTATIONNAME_LENGTH = 32, DOMAIN_LENGTH = 17 } static if (_WIN32_WINNT >= 0x600) { struct WTSCLIENTW { WCHAR[CLIENTNAME_LENGTH + 1] ClientName = 0; WCHAR[DOMAIN_LENGTH + 1] Domain = 0; WCHAR[USERNAME_LENGTH + 1] UserName = 0; WCHAR[MAX_PATH + 1] WorkDirectory = 0; WCHAR[MAX_PATH + 1] InitialProgram = 0; BYTE EncryptionLevel; ULONG ClientAddressFamily; USHORT[CLIENTADDRESS_LENGTH + 1] ClientAddress; USHORT HRes; USHORT VRes; USHORT ColorDepth; WCHAR[MAX_PATH + 1] ClientDirectory = 0; ULONG ClientBuildNumber; ULONG ClientHardwareId; USHORT ClientProductId; USHORT OutBufCountHost; USHORT OutBufCountClient; USHORT OutBufLength; WCHAR[MAX_PATH + 1] DeviceId = 0; } alias WTSCLIENTW* PWTSCLIENTW; struct WTSCLIENTA { CHAR[CLIENTNAME_LENGTH + 1] ClientName = 0; CHAR[DOMAIN_LENGTH + 1 ] Domain = 0; CHAR[USERNAME_LENGTH + 1] UserName = 0; CHAR[MAX_PATH + 1] WorkDirectory = 0; CHAR[MAX_PATH + 1] InitialProgram = 0; BYTE EncryptionLevel; ULONG ClientAddressFamily; USHORT[CLIENTADDRESS_LENGTH + 1] ClientAddress; USHORT HRes; USHORT VRes; USHORT ColorDepth; CHAR[MAX_PATH + 1] ClientDirectory = 0; ULONG ClientBuildNumber; ULONG ClientHardwareId; USHORT ClientProductId; USHORT OutBufCountHost; USHORT OutBufCountClient; USHORT OutBufLength; CHAR[MAX_PATH + 1] DeviceId = 0; } alias WTSCLIENTA* PWTSCLIENTA; version (Unicode) { alias WTSCLIENTW WTSCLIENT; alias PWTSCLIENTW PWTSCLIENT; } else { alias WTSCLIENTA WTSCLIENT; alias PWTSCLIENTA PWTSCLIENT; } struct WTSINFOW { WTS_CONNECTSTATE_CLASS State; DWORD SessionId; DWORD IncomingBytes; DWORD OutgoingBytes; DWORD IncomingFrames; DWORD OutgoingFrames; DWORD IncomingCompressedBytes; DWORD OutgoingCompressedBytes; WCHAR[WINSTATIONNAME_LENGTH] WinStationName = 0; WCHAR[DOMAIN_LENGTH] Domain = 0; WCHAR[USERNAME_LENGTH+1] UserName = 0; LARGE_INTEGER ConnectTime; LARGE_INTEGER DisconnectTime; LARGE_INTEGER LastInputTime; LARGE_INTEGER LogonTime; LARGE_INTEGER CurrentTime; } alias WTSINFOW* PWTSINFOW; struct WTSINFOA { WTS_CONNECTSTATE_CLASS State; DWORD SessionId; DWORD IncomingBytes; DWORD OutgoingBytes; DWORD IncomingFrames; DWORD OutgoingFrames; DWORD IncomingCompressedBytes; DWORD OutgoingCompressedBytes; CHAR[WINSTATIONNAME_LENGTH] WinStationName = 0; CHAR[DOMAIN_LENGTH] Domain = 0; CHAR[USERNAME_LENGTH+1] UserName = 0; LARGE_INTEGER ConnectTime; LARGE_INTEGER DisconnectTime; LARGE_INTEGER LastInputTime; LARGE_INTEGER LogonTime; LARGE_INTEGER CurrentTime; } alias WTSINFOA* PWTSINFOA; version (Unicode) { alias WTSINFOW WTSINFO; alias PWTSINFOW PWTSINFO; } else { alias WTSINFOA WTSINFO; alias PWTSINFOA PWTSINFO; } extern(Windows) { WINBOOL WTSConnectSessionA( ULONG LogonId, ULONG TargetLogonId, PSTR pPassword, WINBOOL bWait ); WINBOOL WTSConnectSessionW( ULONG LogonId, ULONG TargetLogonId, PWSTR pPassword, WINBOOL bWait ); WINBOOL WTSRegisterSessionNotificationEx( HANDLE hServer, HWND hWnd, DWORD dwFlags ); WINBOOL WTSStartRemoteControlSessionA( LPSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk, USHORT HotkeyModifiers ); WINBOOL WTSStartRemoteControlSessionW( LPWSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk, USHORT HotkeyModifiers ); version (Unicode) { alias WTSStartRemoteControlSessionW WTSStartRemoteControlSession; alias WTSConnectSessionW WTSConnectSession; } else { alias WTSStartRemoteControlSessionA WTSStartRemoteControlSession; alias WTSConnectSessionA WTSConnectSession; } WINBOOL WTSStopRemoteControlSession( ULONG LogonId ); WINBOOL WTSUnRegisterSessionNotificationEx( HANDLE hServer, HWND hWnd ); HANDLE WTSVirtualChannelOpenEx( DWORD SessionId, LPSTR pVirtualName, DWORD flags ); } /* extern(Windows) */ } /* static if (_WIN32_WINNT >= 0x600) */