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