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