1 /** 2 * Windows API header module 3 * 4 * Translated from MinGW-w64 API 5 * 6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 7 * Source: $(DRUNTIMESRC core/sys/windows/_wtsapi32.d) 8 */ 9 module core.sys.windows.wtsapi32; 10 version (Windows): 11 12 version (ANSI) {} else version = Unicode; 13 pragma(lib, "wtsapi32"); 14 import core.sys.windows.w32api; 15 import core.sys.windows.windef; 16 17 enum { 18 WTS_CURRENT_SERVER = null, 19 WTS_CURRENT_SERVER_HANDLE = null, 20 WTS_CURRENT_SERVER_NAME = null 21 } 22 23 enum DWORD WTS_CURRENT_SESSION = cast(DWORD) -1; 24 25 enum { 26 IDTIMEOUT = 32000, 27 IDASYNC = 32001 28 } 29 30 enum { 31 WTS_WSD_LOGOFF = 0x01, 32 WTS_WSD_SHUTDOWN = 0x02, 33 WTS_WSD_REBOOT = 0x04, 34 WTS_WSD_POWEROFF = 0x08, 35 WTS_WSD_FASTREBOOT = 0x10 36 } 37 38 enum WTS_CONNECTSTATE_CLASS { 39 WTSActive, 40 WTSConnected, 41 WTSConnectQuery, 42 WTSShadow, 43 WTSDisconnected, 44 WTSIdle, 45 WTSListen, 46 WTSReset, 47 WTSDown, 48 WTSInit 49 } 50 51 struct WTS_SERVER_INFOW { 52 LPWSTR pServerName; 53 } 54 alias WTS_SERVER_INFOW* PWTS_SERVER_INFOW; 55 56 struct WTS_SERVER_INFOA { 57 LPSTR pServerName; 58 } 59 alias WTS_SERVER_INFOA* PWTS_SERVER_INFOA; 60 61 version (Unicode) { 62 alias WTS_SERVER_INFOW WTS_SERVER_INFO; 63 alias PWTS_SERVER_INFOW PWTS_SERVER_INFO; 64 } else { 65 alias WTS_SERVER_INFOA WTS_SERVER_INFO; 66 alias PWTS_SERVER_INFOA PWTS_SERVER_INFO; 67 } 68 69 struct WTS_SESSION_INFOW { 70 DWORD SessionId; 71 LPWSTR pWinStationName; 72 WTS_CONNECTSTATE_CLASS State; 73 } 74 alias WTS_SESSION_INFOW* PWTS_SESSION_INFOW; 75 76 struct WTS_SESSION_INFOA { 77 DWORD SessionId; 78 LPSTR pWinStationName; 79 WTS_CONNECTSTATE_CLASS State; 80 } 81 alias WTS_SESSION_INFOA* PWTS_SESSION_INFOA; 82 83 version (Unicode) { 84 alias WTS_SESSION_INFOW WTS_SESSION_INFO; 85 alias PWTS_SESSION_INFOW PWTS_SESSION_INFO; 86 } else { 87 alias WTS_SESSION_INFOA WTS_SESSION_INFO; 88 alias PWTS_SESSION_INFOA PWTS_SESSION_INFO; 89 } 90 91 struct WTS_PROCESS_INFOW { 92 DWORD SessionId; 93 DWORD ProcessId; 94 LPWSTR pProcessName; 95 PSID pUserSid; 96 } 97 alias WTS_PROCESS_INFOW* PWTS_PROCESS_INFOW; 98 99 struct WTS_PROCESS_INFOA { 100 DWORD SessionId; 101 DWORD ProcessId; 102 LPSTR pProcessName; 103 PSID pUserSid; 104 } 105 alias WTS_PROCESS_INFOA* PWTS_PROCESS_INFOA; 106 107 version (Unicode) { 108 alias WTS_PROCESS_INFOW WTS_PROCESS_INFO; 109 alias PWTS_PROCESS_INFOW PWTS_PROCESS_INFO; 110 } else { 111 alias WTS_PROCESS_INFOA WTS_PROCESS_INFO; 112 alias PWTS_PROCESS_INFOA PWTS_PROCESS_INFO; 113 } 114 115 enum { 116 WTS_PROTOCOL_TYPE_CONSOLE, 117 WTS_PROTOCOL_TYPE_ICA, 118 WTS_PROTOCOL_TYPE_RDP 119 } 120 121 enum WTS_INFO_CLASS { 122 WTSInitialProgram, 123 WTSApplicationName, 124 WTSWorkingDirectory, 125 WTSOEMId, 126 WTSSessionId, 127 WTSUserName, 128 WTSWinStationName, 129 WTSDomainName, 130 WTSConnectState, 131 WTSClientBuildNumber, 132 WTSClientName, 133 WTSClientDirectory, 134 WTSClientProductId, 135 WTSClientHardwareId, 136 WTSClientAddress, 137 WTSClientDisplay, 138 WTSClientProtocolType, 139 WTSIdleTime, 140 WTSLogonTime, 141 WTSIncomingBytes, 142 WTSOutgoingBytes, 143 WTSIncomingFrames, 144 WTSOutgoingFrames, 145 WTSClientInfo, 146 WTSSessionInfo, // = 24 147 } 148 149 struct WTS_CLIENT_ADDRESS { 150 DWORD AddressFamily; 151 BYTE[20] Address; 152 } 153 alias WTS_CLIENT_ADDRESS* PWTS_CLIENT_ADDRESS; 154 155 struct WTS_CLIENT_DISPLAY { 156 DWORD HorizontalResolution; 157 DWORD VerticalResolution; 158 DWORD ColorDepth; 159 } 160 alias WTS_CLIENT_DISPLAY* PWTS_CLIENT_DISPLAY; 161 162 enum WTS_CONFIG_CLASS { 163 WTSUserConfigInitialProgram, 164 WTSUserConfigWorkingDirectory, 165 WTSUserConfigfInheritInitialProgram, 166 WTSUserConfigfAllowLogonTerminalServer, 167 WTSUserConfigTimeoutSettingsConnections, 168 WTSUserConfigTimeoutSettingsDisconnections, 169 WTSUserConfigTimeoutSettingsIdle, 170 WTSUserConfigfDeviceClientDrives, 171 WTSUserConfigfDeviceClientPrinters, 172 WTSUserConfigfDeviceClientDefaultPrinter, 173 WTSUserConfigBrokenTimeoutSettings, 174 WTSUserConfigReconnectSettings, 175 WTSUserConfigModemCallbackSettings, 176 WTSUserConfigModemCallbackPhoneNumber, 177 WTSUserConfigShadowingSettings, 178 WTSUserConfigTerminalServerProfilePath, 179 WTSUserConfigTerminalServerHomeDir, 180 WTSUserConfigTerminalServerHomeDirDrive, 181 WTSUserConfigfTerminalServerRemoteHomeDir 182 } 183 184 enum { 185 WTS_EVENT_NONE = 0x0, 186 WTS_EVENT_CREATE = 0x1, 187 WTS_EVENT_DELETE = 0x2, 188 WTS_EVENT_RENAME = 0x4, 189 WTS_EVENT_CONNECT = 0x8, 190 WTS_EVENT_DISCONNECT = 0x10, 191 WTS_EVENT_LOGON = 0x20, 192 WTS_EVENT_LOGOFF = 0x40, 193 WTS_EVENT_STATECHANGE = 0x80, 194 WTS_EVENT_LICENSE = 0x100, 195 WTS_EVENT_ALL = 0x7fffffff, 196 WTS_EVENT_FLUSH = 0x80000000 197 } 198 199 enum WTS_VIRTUAL_CLASS { 200 WTSVirtualClientData, 201 WTSVirtualFileHandle 202 } 203 204 version (Unicode) { 205 alias WTSEnumerateServersW WTSEnumerateServers; 206 alias WTSOpenServerW WTSOpenServer; 207 alias WTSEnumerateSessionsW WTSEnumerateSessions; 208 alias WTSEnumerateProcessesW WTSEnumerateProcesses; 209 alias WTSQuerySessionInformationW WTSQuerySessionInformation; 210 alias WTSQueryUserConfigW WTSQueryUserConfig; 211 alias WTSSetUserConfigW WTSSetUserConfig; 212 alias WTSSendMessageW WTSSendMessage; 213 } else { 214 alias WTSEnumerateServersA WTSEnumerateServers; 215 alias WTSOpenServerA WTSOpenServer; 216 alias WTSEnumerateSessionsA WTSEnumerateSessions; 217 alias WTSEnumerateProcessesA WTSEnumerateProcesses; 218 alias WTSQuerySessionInformationA WTSQuerySessionInformation; 219 alias WTSQueryUserConfigA WTSQueryUserConfig; 220 alias WTSSetUserConfigA WTSSetUserConfig; 221 alias WTSSendMessageA WTSSendMessage; 222 } 223 224 extern(Windows) { 225 WINBOOL WTSEnumerateServersW(LPWSTR pDomainName, DWORD Reserved, DWORD Version, PWTS_SERVER_INFOW* ppServerInfo, DWORD* pCount); 226 WINBOOL WTSEnumerateServersA(LPSTR pDomainName, DWORD Reserved, DWORD Version, PWTS_SERVER_INFOA* ppServerInfo, DWORD* pCount); 227 HANDLE WTSOpenServerW(LPWSTR pServerName); 228 HANDLE WTSOpenServerA(LPSTR pServerName); 229 VOID WTSCloseServer(HANDLE hServer); 230 WINBOOL WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_SESSION_INFOW* ppSessionInfo, DWORD* pCount); 231 WINBOOL WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_SESSION_INFOA* ppSessionInfo, DWORD* pCount); 232 WINBOOL WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOW* ppProcessInfo, DWORD* pCount); 233 WINBOOL WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_PROCESS_INFOA* ppProcessInfo, DWORD* pCount); 234 WINBOOL WTSTerminateProcess(HANDLE hServer, DWORD ProcessId, DWORD ExitCode); 235 WINBOOL WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPWSTR* ppBuffer, DWORD* pBytesReturned); 236 WINBOOL WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass, LPSTR* ppBuffer, DWORD* pBytesReturned); 237 WINBOOL WTSQueryUserConfigW(LPWSTR pServerName, LPWSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer, DWORD* pBytesReturned); 238 WINBOOL WTSQueryUserConfigA(LPSTR pServerName, LPSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer, DWORD* pBytesReturned); 239 WINBOOL WTSSetUserConfigW(LPWSTR pServerName, LPWSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer, DWORD DataLength); 240 WINBOOL WTSSetUserConfigA(LPSTR pServerName, LPSTR pUserName, WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer, DWORD DataLength); 241 WINBOOL WTSSendMessageW(HANDLE hServer, DWORD SessionId, LPWSTR pTitle, DWORD TitleLength, LPWSTR pMessage, DWORD MessageLength, DWORD Style, DWORD Timeout, DWORD* pResponse, WINBOOL bWait); 242 WINBOOL WTSSendMessageA(HANDLE hServer, DWORD SessionId, LPSTR pTitle, DWORD TitleLength, LPSTR pMessage, DWORD MessageLength, DWORD Style, DWORD Timeout, DWORD* pResponse, WINBOOL bWait); 243 WINBOOL WTSDisconnectSession(HANDLE hServer, DWORD SessionId, WINBOOL bWait); 244 WINBOOL WTSLogoffSession(HANDLE hServer, DWORD SessionId, WINBOOL bWait); 245 WINBOOL WTSShutdownSystem(HANDLE hServer, DWORD ShutdownFlag); 246 WINBOOL WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags); 247 HANDLE WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId, LPSTR pVirtualName); 248 WINBOOL WTSVirtualChannelClose(HANDLE hChannelHandle); 249 WINBOOL WTSVirtualChannelRead(HANDLE hChannelHandle, ULONG TimeOut, PCHAR Buffer, ULONG BufferSize, PULONG pBytesRead); 250 WINBOOL WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer, ULONG Length, PULONG pBytesWritten); 251 WINBOOL WTSVirtualChannelPurgeInput(HANDLE hChannelHandle); 252 WINBOOL WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle); 253 WINBOOL WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CLASS, PVOID* ppBuffer, DWORD* pBytesReturned); 254 VOID WTSFreeMemory(PVOID pMemory); 255 256 WINBOOL WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags); 257 WINBOOL WTSUnRegisterSessionNotification(HWND hWnd); 258 WINBOOL WTSQueryUserToken(ULONG SessionId, PHANDLE phToken); 259 } 260 261 enum { 262 NOTIFY_FOR_ALL_SESSIONS = 1, 263 NOTIFY_FOR_THIS_SESSION = 0 264 } 265 266 enum { 267 USERNAME_LENGTH = 20, 268 CLIENTNAME_LENGTH = 20, 269 CLIENTADDRESS_LENGTH = 30, 270 WINSTATIONNAME_LENGTH = 32, 271 DOMAIN_LENGTH = 17 272 } 273 274 static if (_WIN32_WINNT >= 0x600) { 275 struct WTSCLIENTW { 276 WCHAR[CLIENTNAME_LENGTH + 1] ClientName = 0; 277 WCHAR[DOMAIN_LENGTH + 1] Domain = 0; 278 WCHAR[USERNAME_LENGTH + 1] UserName = 0; 279 WCHAR[MAX_PATH + 1] WorkDirectory = 0; 280 WCHAR[MAX_PATH + 1] InitialProgram = 0; 281 BYTE EncryptionLevel; 282 ULONG ClientAddressFamily; 283 USHORT[CLIENTADDRESS_LENGTH + 1] ClientAddress; 284 USHORT HRes; 285 USHORT VRes; 286 USHORT ColorDepth; 287 WCHAR[MAX_PATH + 1] ClientDirectory = 0; 288 ULONG ClientBuildNumber; 289 ULONG ClientHardwareId; 290 USHORT ClientProductId; 291 USHORT OutBufCountHost; 292 USHORT OutBufCountClient; 293 USHORT OutBufLength; 294 WCHAR[MAX_PATH + 1] DeviceId = 0; 295 } 296 alias WTSCLIENTW* PWTSCLIENTW; 297 298 struct WTSCLIENTA { 299 CHAR[CLIENTNAME_LENGTH + 1] ClientName = 0; 300 CHAR[DOMAIN_LENGTH + 1 ] Domain = 0; 301 CHAR[USERNAME_LENGTH + 1] UserName = 0; 302 CHAR[MAX_PATH + 1] WorkDirectory = 0; 303 CHAR[MAX_PATH + 1] InitialProgram = 0; 304 BYTE EncryptionLevel; 305 ULONG ClientAddressFamily; 306 USHORT[CLIENTADDRESS_LENGTH + 1] ClientAddress; 307 USHORT HRes; 308 USHORT VRes; 309 USHORT ColorDepth; 310 CHAR[MAX_PATH + 1] ClientDirectory = 0; 311 ULONG ClientBuildNumber; 312 ULONG ClientHardwareId; 313 USHORT ClientProductId; 314 USHORT OutBufCountHost; 315 USHORT OutBufCountClient; 316 USHORT OutBufLength; 317 CHAR[MAX_PATH + 1] DeviceId = 0; 318 } 319 alias WTSCLIENTA* PWTSCLIENTA; 320 321 version (Unicode) { 322 alias WTSCLIENTW WTSCLIENT; 323 alias PWTSCLIENTW PWTSCLIENT; 324 } else { 325 alias WTSCLIENTA WTSCLIENT; 326 alias PWTSCLIENTA PWTSCLIENT; 327 } 328 329 struct WTSINFOW { 330 WTS_CONNECTSTATE_CLASS State; 331 DWORD SessionId; 332 DWORD IncomingBytes; 333 DWORD OutgoingBytes; 334 DWORD IncomingFrames; 335 DWORD OutgoingFrames; 336 DWORD IncomingCompressedBytes; 337 DWORD OutgoingCompressedBytes; 338 WCHAR[WINSTATIONNAME_LENGTH] WinStationName = 0; 339 WCHAR[DOMAIN_LENGTH] Domain = 0; 340 WCHAR[USERNAME_LENGTH+1] UserName = 0; 341 LARGE_INTEGER ConnectTime; 342 LARGE_INTEGER DisconnectTime; 343 LARGE_INTEGER LastInputTime; 344 LARGE_INTEGER LogonTime; 345 LARGE_INTEGER CurrentTime; 346 } 347 alias WTSINFOW* PWTSINFOW; 348 349 struct WTSINFOA { 350 WTS_CONNECTSTATE_CLASS State; 351 DWORD SessionId; 352 DWORD IncomingBytes; 353 DWORD OutgoingBytes; 354 DWORD IncomingFrames; 355 DWORD OutgoingFrames; 356 DWORD IncomingCompressedBytes; 357 DWORD OutgoingCompressedBytes; 358 CHAR[WINSTATIONNAME_LENGTH] WinStationName = 0; 359 CHAR[DOMAIN_LENGTH] Domain = 0; 360 CHAR[USERNAME_LENGTH+1] UserName = 0; 361 LARGE_INTEGER ConnectTime; 362 LARGE_INTEGER DisconnectTime; 363 LARGE_INTEGER LastInputTime; 364 LARGE_INTEGER LogonTime; 365 LARGE_INTEGER CurrentTime; 366 } 367 alias WTSINFOA* PWTSINFOA; 368 369 version (Unicode) { 370 alias WTSINFOW WTSINFO; 371 alias PWTSINFOW PWTSINFO; 372 } else { 373 alias WTSINFOA WTSINFO; 374 alias PWTSINFOA PWTSINFO; 375 } 376 377 extern(Windows) { 378 WINBOOL WTSConnectSessionA( 379 ULONG LogonId, 380 ULONG TargetLogonId, 381 PSTR pPassword, 382 WINBOOL bWait 383 ); 384 385 WINBOOL WTSConnectSessionW( 386 ULONG LogonId, 387 ULONG TargetLogonId, 388 PWSTR pPassword, 389 WINBOOL bWait 390 ); 391 392 WINBOOL WTSRegisterSessionNotificationEx( 393 HANDLE hServer, 394 HWND hWnd, 395 DWORD dwFlags 396 ); 397 398 WINBOOL WTSStartRemoteControlSessionA( 399 LPSTR pTargetServerName, 400 ULONG TargetLogonId, 401 BYTE HotkeyVk, 402 USHORT HotkeyModifiers 403 ); 404 405 WINBOOL WTSStartRemoteControlSessionW( 406 LPWSTR pTargetServerName, 407 ULONG TargetLogonId, 408 BYTE HotkeyVk, 409 USHORT HotkeyModifiers 410 ); 411 412 version (Unicode) { 413 alias WTSStartRemoteControlSessionW WTSStartRemoteControlSession; 414 alias WTSConnectSessionW WTSConnectSession; 415 } else { 416 alias WTSStartRemoteControlSessionA WTSStartRemoteControlSession; 417 alias WTSConnectSessionA WTSConnectSession; 418 } 419 420 WINBOOL WTSStopRemoteControlSession( 421 ULONG LogonId 422 ); 423 424 WINBOOL WTSUnRegisterSessionNotificationEx( 425 HANDLE hServer, 426 HWND hWnd 427 ); 428 429 HANDLE WTSVirtualChannelOpenEx( 430 DWORD SessionId, 431 LPSTR pVirtualName, 432 DWORD flags 433 ); 434 } /* extern(Windows) */ 435 } /* static if (_WIN32_WINNT >= 0x600) */