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