master
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _INC_WTSAPI
7#define _INC_WTSAPI
8
9#include <_mingw_unicode.h>
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#define WTS_CURRENT_SERVER ((HANDLE)NULL)
16#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)
17#define WTS_CURRENT_SERVER_NAME (NULL)
18
19#define WTS_CURRENT_SESSION ((DWORD)-1)
20#define WTS_ANY_SESSION ((DWORD)-2)
21
22#ifndef IDTIMEOUT
23#define IDTIMEOUT 32000
24#endif
25#ifndef IDASYNC
26#define IDASYNC 32001
27#endif
28
29#define USERNAME_LENGTH 20
30#define CLIENTNAME_LENGTH 20
31#define CLIENTADDRESS_LENGTH 30
32#define WINSTATIONNAME_LENGTH 32
33#define DOMAIN_LENGTH 17
34
35#define WTS_WSD_LOGOFF 0x1
36#define WTS_WSD_SHUTDOWN 0x2
37#define WTS_WSD_REBOOT 0x4
38#define WTS_WSD_POWEROFF 0x8
39
40#define WTS_WSD_FASTREBOOT 0x10
41
42#define MAX_ELAPSED_TIME_LENGTH 15
43#define MAX_DATE_TIME_LENGTH 56
44#define WINSTATIONNAME_LENGTH 32
45#define DOMAIN_LENGTH 17
46
47#define WTS_DRIVE_LENGTH 3
48#define WTS_LISTENER_NAME_LENGTH 32
49#define WTS_COMMENT_LENGTH 60
50
51#define WTS_LISTENER_CREATE 0x00000001
52#define WTS_LISTENER_UPDATE 0x00000010
53
54#define WTS_SECURITY_QUERY_INFORMATION 0x00000001
55#define WTS_SECURITY_SET_INFORMATION 0x00000002
56#define WTS_SECURITY_RESET 0x00000004
57#define WTS_SECURITY_VIRTUAL_CHANNELS 0x00000008
58#define WTS_SECURITY_REMOTE_CONTROL 0x00000010
59#define WTS_SECURITY_LOGON 0x00000020
60#define WTS_SECURITY_LOGOFF 0x00000040
61#define WTS_SECURITY_MESSAGE 0x00000080
62#define WTS_SECURITY_CONNECT 0x00000100
63#define WTS_SECURITY_DISCONNECT 0x00000200
64
65#define WTS_SECURITY_GUEST_ACCESS (WTS_SECURITY_LOGON)
66
67#define WTS_SECURITY_CURRENT_GUEST_ACCESS (WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_LOGOFF)
68
69#define WTS_SECURITY_USER_ACCESS (WTS_SECURITY_CURRENT_GUEST_ACCESS | WTS_SECURITY_QUERY_INFORMATION | WTS_SECURITY_CONNECT)
70
71#define WTS_SECURITY_CURRENT_USER_ACCESS (WTS_SECURITY_SET_INFORMATION | WTS_SECURITY_RESET | WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_LOGOFF | WTS_SECURITY_DISCONNECT)
72
73#define WTS_SECURITY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | WTS_SECURITY_QUERY_INFORMATION | WTS_SECURITY_SET_INFORMATION | WTS_SECURITY_RESET | WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_REMOTE_CONTROL | WTS_SECURITY_LOGON | WTS_SECURITY_MESSAGE | WTS_SECURITY_CONNECT | WTS_SECURITY_DISCONNECT)
74
75 typedef enum _WTS_CONNECTSTATE_CLASS {
76 WTSActive,WTSConnected,WTSConnectQuery,WTSShadow,WTSDisconnected,WTSIdle,WTSListen,WTSReset,WTSDown,WTSInit
77 } WTS_CONNECTSTATE_CLASS;
78
79 typedef struct _WTS_SERVER_INFOW {
80 LPWSTR pServerName;
81 } WTS_SERVER_INFOW,*PWTS_SERVER_INFOW;
82
83 typedef struct _WTS_SERVER_INFOA {
84 LPSTR pServerName;
85 } WTS_SERVER_INFOA,*PWTS_SERVER_INFOA;
86
87#define WTS_SERVER_INFO __MINGW_NAME_AW(WTS_SERVER_INFO)
88#define PWTS_SERVER_INFO __MINGW_NAME_AW(PWTS_SERVER_INFO)
89
90 typedef struct _WTS_SESSION_INFOW {
91 DWORD SessionId;
92 LPWSTR pWinStationName;
93 WTS_CONNECTSTATE_CLASS State;
94 } WTS_SESSION_INFOW,*PWTS_SESSION_INFOW;
95
96 typedef struct _WTS_SESSION_INFOA {
97 DWORD SessionId;
98 LPSTR pWinStationName;
99 WTS_CONNECTSTATE_CLASS State;
100 } WTS_SESSION_INFOA,*PWTS_SESSION_INFOA;
101
102#define WTS_SESSION_INFO __MINGW_NAME_AW(WTS_SESSION_INFO)
103#define PWTS_SESSION_INFO __MINGW_NAME_AW(PWTS_SESSION_INFO)
104
105 typedef struct _WTS_PROCESS_INFOW {
106 DWORD SessionId;
107 DWORD ProcessId;
108 LPWSTR pProcessName;
109 PSID pUserSid;
110 } WTS_PROCESS_INFOW,*PWTS_PROCESS_INFOW;
111
112 typedef struct _WTS_PROCESS_INFOA {
113 DWORD SessionId;
114 DWORD ProcessId;
115 LPSTR pProcessName;
116 PSID pUserSid;
117 } WTS_PROCESS_INFOA,*PWTS_PROCESS_INFOA;
118
119#define WTS_PROCESS_INFO __MINGW_NAME_AW(WTS_PROCESS_INFO)
120#define PWTS_PROCESS_INFO __MINGW_NAME_AW(PWTS_PROCESS_INFO)
121
122#define WTS_PROTOCOL_TYPE_CONSOLE 0
123#define WTS_PROTOCOL_TYPE_ICA 1
124#define WTS_PROTOCOL_TYPE_RDP 2
125
126 typedef enum _WTS_INFO_CLASS {
127 WTSInitialProgram = 0,
128 WTSApplicationName = 1,
129 WTSWorkingDirectory = 2,
130 WTSOEMId = 3,
131 WTSSessionId = 4,
132 WTSUserName = 5,
133 WTSWinStationName = 6,
134 WTSDomainName = 7,
135 WTSConnectState = 8,
136 WTSClientBuildNumber = 9,
137 WTSClientName = 10,
138 WTSClientDirectory = 11,
139 WTSClientProductId = 12,
140 WTSClientHardwareId = 13,
141 WTSClientAddress = 14,
142 WTSClientDisplay = 15,
143 WTSClientProtocolType = 16,
144 WTSIdleTime = 17,
145 WTSLogonTime = 18,
146 WTSIncomingBytes = 19,
147 WTSOutgoingBytes = 20,
148 WTSIncomingFrames = 21,
149 WTSOutgoingFrames = 22,
150 WTSClientInfo = 23,
151 WTSSessionInfo = 24,
152 WTSSessionInfoEx = 25,
153 WTSConfigInfo = 26,
154 WTSValidationInfo = 27,
155 WTSSessionAddressV4 = 28,
156 WTSIsRemoteSession = 29
157 } WTS_INFO_CLASS;
158
159 typedef struct _WTSCONFIGINFOW {
160 ULONG version;
161 ULONG fConnectClientDrivesAtLogon;
162 ULONG fConnectPrinterAtLogon;
163 ULONG fDisablePrinterRedirection;
164 ULONG fDisableDefaultMainClientPrinter;
165 ULONG ShadowSettings;
166 WCHAR LogonUserName[USERNAME_LENGTH + 1 ];
167 WCHAR LogonDomain[DOMAIN_LENGTH + 1 ];
168 WCHAR WorkDirectory[MAX_PATH + 1 ];
169 WCHAR InitialProgram[MAX_PATH + 1 ];
170 WCHAR ApplicationName[MAX_PATH + 1 ];
171 } WTSCONFIGINFOW, *PWTSCONFIGINFOW;
172
173 typedef struct _WTSCONFIGINFOA {
174 ULONG version;
175 ULONG fConnectClientDrivesAtLogon;
176 ULONG fConnectPrinterAtLogon;
177 ULONG fDisablePrinterRedirection;
178 ULONG fDisableDefaultMainClientPrinter;
179 ULONG ShadowSettings;
180 CHAR LogonUserName[USERNAME_LENGTH + 1 ];
181 CHAR LogonDomain[DOMAIN_LENGTH + 1 ];
182 CHAR WorkDirectory[MAX_PATH + 1 ];
183 CHAR InitialProgram[MAX_PATH + 1 ];
184 CHAR ApplicationName[MAX_PATH + 1 ];
185 } WTSCONFIGINFOA, *PWTSCONFIGINFOA;
186
187__MINGW_TYPEDEF_AW(WTSCONFIGINFO)
188__MINGW_TYPEDEF_AW(PWTSCONFIGINFO)
189
190 typedef struct _WTS_CLIENT_ADDRESS {
191 DWORD AddressFamily;
192 BYTE Address[20];
193 } WTS_CLIENT_ADDRESS,*PWTS_CLIENT_ADDRESS;
194
195 typedef struct _WTS_CLIENT_DISPLAY {
196 DWORD HorizontalResolution;
197 DWORD VerticalResolution;
198 DWORD ColorDepth;
199 } WTS_CLIENT_DISPLAY,*PWTS_CLIENT_DISPLAY;
200
201 typedef enum _WTS_CONFIG_CLASS {
202 WTSUserConfigInitialProgram,WTSUserConfigWorkingDirectory,WTSUserConfigfInheritInitialProgram,WTSUserConfigfAllowLogonTerminalServer,
203 WTSUserConfigTimeoutSettingsConnections,WTSUserConfigTimeoutSettingsDisconnections,WTSUserConfigTimeoutSettingsIdle,
204 WTSUserConfigfDeviceClientDrives,WTSUserConfigfDeviceClientPrinters,WTSUserConfigfDeviceClientDefaultPrinter,WTSUserConfigBrokenTimeoutSettings,
205 WTSUserConfigReconnectSettings,WTSUserConfigModemCallbackSettings,WTSUserConfigModemCallbackPhoneNumber,WTSUserConfigShadowingSettings,
206 WTSUserConfigTerminalServerProfilePath,WTSUserConfigTerminalServerHomeDir,WTSUserConfigTerminalServerHomeDirDrive,
207 WTSUserConfigfTerminalServerRemoteHomeDir,WTSUserConfigUser
208 } WTS_CONFIG_CLASS;
209
210 typedef enum _WTS_CONFIG_SOURCE {
211 WTSUserConfigSourceSAM
212 } WTS_CONFIG_SOURCE;
213
214 typedef struct _WTSUSERCONFIGA {
215 DWORD Source;
216 DWORD InheritInitialProgram;
217 DWORD AllowLogonTerminalServer;
218 DWORD TimeoutSettingsConnections;
219 DWORD TimeoutSettingsDisconnections;
220 DWORD TimeoutSettingsIdle;
221 DWORD DeviceClientDrives;
222 DWORD DeviceClientPrinters;
223 DWORD ClientDefaultPrinter;
224 DWORD BrokenTimeoutSettings;
225 DWORD ReconnectSettings;
226 DWORD ShadowingSettings;
227 DWORD TerminalServerRemoteHomeDir;
228 CHAR InitialProgram[ MAX_PATH + 1 ];
229 CHAR WorkDirectory[ MAX_PATH + 1 ];
230 CHAR TerminalServerProfilePath[ MAX_PATH + 1 ];
231 CHAR TerminalServerHomeDir[ MAX_PATH + 1 ];
232 CHAR TerminalServerHomeDirDrive[ WTS_DRIVE_LENGTH + 1 ];
233 } WTSUSERCONFIGA, *PWTSUSERCONFIGA;
234
235 typedef struct _WTSUSERCONFIGW {
236 DWORD Source;
237 DWORD InheritInitialProgram;
238 DWORD AllowLogonTerminalServer;
239 DWORD TimeoutSettingsConnections;
240 DWORD TimeoutSettingsDisconnections;
241 DWORD TimeoutSettingsIdle;
242 DWORD DeviceClientDrives;
243 DWORD DeviceClientPrinters;
244 DWORD ClientDefaultPrinter;
245 DWORD BrokenTimeoutSettings;
246 DWORD ReconnectSettings;
247 DWORD ShadowingSettings;
248 DWORD TerminalServerRemoteHomeDir;
249 WCHAR InitialProgram[ MAX_PATH + 1 ];
250 WCHAR WorkDirectory[ MAX_PATH + 1 ];
251 WCHAR TerminalServerProfilePath[ MAX_PATH + 1 ];
252 WCHAR TerminalServerHomeDir[ MAX_PATH + 1 ];
253 WCHAR TerminalServerHomeDirDrive[ WTS_DRIVE_LENGTH + 1 ];
254 } WTSUSERCONFIGW, *PWTSUSERCONFIGW;
255
256__MINGW_TYPEDEF_AW(WTSUSERCONFIG)
257__MINGW_TYPEDEF_AW(PWTSUSERCONFIG)
258
259#define WTS_EVENT_NONE 0x0
260#define WTS_EVENT_CREATE 0x1
261#define WTS_EVENT_DELETE 0x2
262#define WTS_EVENT_RENAME 0x4
263#define WTS_EVENT_CONNECT 0x8
264#define WTS_EVENT_DISCONNECT 0x10
265#define WTS_EVENT_LOGON 0x20
266#define WTS_EVENT_LOGOFF 0x40
267#define WTS_EVENT_STATECHANGE 0x80
268#define WTS_EVENT_LICENSE 0x100
269#define WTS_EVENT_ALL 0x7fffffff
270#define WTS_EVENT_FLUSH 0x80000000
271
272#define REMOTECONTROL_KBDSHIFT_HOTKEY 0x1
273#define REMOTECONTROL_KBDCTRL_HOTKEY 0x2
274#define REMOTECONTROL_KBDALT_HOTKEY 0x4
275
276 typedef enum _WTS_VIRTUAL_CLASS {
277 WTSVirtualClientData,WTSVirtualFileHandle
278 } WTS_VIRTUAL_CLASS;
279
280 typedef struct _WTS_SESSION_ADDRESS {
281 DWORD AddressFamily;
282 BYTE Address[20];
283 } WTS_SESSION_ADDRESS, *PWTS_SESSION_ADDRESS;
284
285#define WTSEnumerateServers __MINGW_NAME_AW(WTSEnumerateServers)
286#define WTSOpenServer __MINGW_NAME_AW(WTSOpenServer)
287#define WTSOpenServerEx __MINGW_NAME_AW(WTSOpenServerEx)
288#define WTSEnumerateSessions __MINGW_NAME_AW(WTSEnumerateSessions)
289#define WTSEnumerateProcesses __MINGW_NAME_AW(WTSEnumerateProcesses)
290#define WTSQuerySessionInformation __MINGW_NAME_AW(WTSQuerySessionInformation)
291#define WTSQueryUserConfig __MINGW_NAME_AW(WTSQueryUserConfig)
292#define WTSSetUserConfig __MINGW_NAME_AW(WTSSetUserConfig)
293#define WTSSendMessage __MINGW_NAME_AW(WTSSendMessage)
294
295 WINBOOL WINAPI WTSEnumerateServersW(LPWSTR pDomainName,DWORD Reserved,DWORD Version,PWTS_SERVER_INFOW *ppServerInfo,DWORD *pCount);
296 WINBOOL WINAPI WTSEnumerateServersA(LPSTR pDomainName,DWORD Reserved,DWORD Version,PWTS_SERVER_INFOA *ppServerInfo,DWORD *pCount);
297 HANDLE WINAPI WTSOpenServerW(LPWSTR pServerName);
298 HANDLE WINAPI WTSOpenServerA(LPSTR pServerName);
299 HANDLE WINAPI WTSOpenServerExW(LPWSTR pServerName);
300 HANDLE WINAPI WTSOpenServerExA(LPSTR pServerName);
301 VOID WINAPI WTSCloseServer(HANDLE hServer);
302 WINBOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_SESSION_INFOW *ppSessionInfo,DWORD *pCount);
303 WINBOOL WINAPI WTSEnumerateSessionsA(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_SESSION_INFOA *ppSessionInfo,DWORD *pCount);
304 WINBOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_PROCESS_INFOW *ppProcessInfo,DWORD *pCount);
305 WINBOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer,DWORD Reserved,DWORD Version,PWTS_PROCESS_INFOA *ppProcessInfo,DWORD *pCount);
306 WINBOOL WINAPI WTSTerminateProcess(HANDLE hServer,DWORD ProcessId,DWORD ExitCode);
307 WINBOOL WINAPI WTSQuerySessionInformationW(HANDLE hServer,DWORD SessionId,WTS_INFO_CLASS WTSInfoClass,LPWSTR *ppBuffer,DWORD *pBytesReturned);
308 WINBOOL WINAPI WTSQuerySessionInformationA(HANDLE hServer,DWORD SessionId,WTS_INFO_CLASS WTSInfoClass,LPSTR *ppBuffer,DWORD *pBytesReturned);
309 WINBOOL WINAPI WTSQueryUserConfigW(LPWSTR pServerName,LPWSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPWSTR *ppBuffer,DWORD *pBytesReturned);
310 WINBOOL WINAPI WTSQueryUserConfigA(LPSTR pServerName,LPSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPSTR *ppBuffer,DWORD *pBytesReturned);
311 WINBOOL WINAPI WTSSetUserConfigW(LPWSTR pServerName,LPWSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPWSTR pBuffer,DWORD DataLength);
312 WINBOOL WINAPI WTSSetUserConfigA(LPSTR pServerName,LPSTR pUserName,WTS_CONFIG_CLASS WTSConfigClass,LPSTR pBuffer,DWORD DataLength);
313 WINBOOL WINAPI WTSSendMessageW(HANDLE hServer,DWORD SessionId,LPWSTR pTitle,DWORD TitleLength,LPWSTR pMessage,DWORD MessageLength,DWORD Style,DWORD Timeout,DWORD *pResponse,WINBOOL bWait);
314 WINBOOL WINAPI WTSSendMessageA(HANDLE hServer,DWORD SessionId,LPSTR pTitle,DWORD TitleLength,LPSTR pMessage,DWORD MessageLength,DWORD Style,DWORD Timeout,DWORD *pResponse,WINBOOL bWait);
315 WINBOOL WINAPI WTSDisconnectSession(HANDLE hServer,DWORD SessionId,WINBOOL bWait);
316 WINBOOL WINAPI WTSLogoffSession(HANDLE hServer,DWORD SessionId,WINBOOL bWait);
317 WINBOOL WINAPI WTSShutdownSystem(HANDLE hServer,DWORD ShutdownFlag);
318 WINBOOL WINAPI WTSWaitSystemEvent(HANDLE hServer,DWORD EventMask,DWORD *pEventFlags);
319 HANDLE WINAPI WTSVirtualChannelOpen(HANDLE hServer,DWORD SessionId,LPSTR pVirtualName);
320 WINBOOL WINAPI WTSVirtualChannelClose(HANDLE hChannelHandle);
321 WINBOOL WINAPI WTSVirtualChannelRead(HANDLE hChannelHandle,ULONG TimeOut,PCHAR Buffer,ULONG BufferSize,PULONG pBytesRead);
322 WINBOOL WINAPI WTSVirtualChannelWrite(HANDLE hChannelHandle,PCHAR Buffer,ULONG Length,PULONG pBytesWritten);
323 WINBOOL WINAPI WTSVirtualChannelPurgeInput(HANDLE hChannelHandle);
324 WINBOOL WINAPI WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle);
325 WINBOOL WINAPI WTSVirtualChannelQuery(HANDLE hChannelHandle,WTS_VIRTUAL_CLASS,PVOID *ppBuffer,DWORD *pBytesReturned);
326 VOID WINAPI WTSFreeMemory(PVOID pMemory);
327
328#define NOTIFY_FOR_ALL_SESSIONS 1
329#define NOTIFY_FOR_THIS_SESSION 0
330
331 WINBOOL WINAPI WTSRegisterSessionNotification(HWND hWnd,DWORD dwFlags);
332 WINBOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd);
333 WINBOOL WINAPI WTSQueryUserToken(ULONG SessionId,PHANDLE phToken);
334
335#if (_WIN32_WINNT >= 0x0600)
336typedef struct _WTSCLIENTW {
337 WCHAR ClientName[CLIENTNAME_LENGTH + 1];
338 WCHAR Domain[DOMAIN_LENGTH + 1 ];
339 WCHAR UserName[USERNAME_LENGTH + 1];
340 WCHAR WorkDirectory[MAX_PATH + 1];
341 WCHAR InitialProgram[MAX_PATH + 1];
342 BYTE EncryptionLevel;
343 ULONG ClientAddressFamily;
344 USHORT ClientAddress[CLIENTADDRESS_LENGTH + 1];
345 USHORT HRes;
346 USHORT VRes;
347 USHORT ColorDepth;
348 WCHAR ClientDirectory[MAX_PATH + 1];
349 ULONG ClientBuildNumber;
350 ULONG ClientHardwareId;
351 USHORT ClientProductId;
352 USHORT OutBufCountHost;
353 USHORT OutBufCountClient;
354 USHORT OutBufLength;
355 WCHAR DeviceId[MAX_PATH + 1];
356} WTSCLIENTW, *PWTSCLIENTW;
357
358typedef struct _WTSCLIENTA {
359 CHAR ClientName[CLIENTNAME_LENGTH + 1];
360 CHAR Domain[DOMAIN_LENGTH + 1 ];
361 CHAR UserName[USERNAME_LENGTH + 1];
362 CHAR WorkDirectory[MAX_PATH + 1];
363 CHAR InitialProgram[MAX_PATH + 1];
364 BYTE EncryptionLevel;
365 ULONG ClientAddressFamily;
366 USHORT ClientAddress[CLIENTADDRESS_LENGTH + 1];
367 USHORT HRes;
368 USHORT VRes;
369 USHORT ColorDepth;
370 CHAR ClientDirectory[MAX_PATH + 1];
371 ULONG ClientBuildNumber;
372 ULONG ClientHardwareId;
373 USHORT ClientProductId;
374 USHORT OutBufCountHost;
375 USHORT OutBufCountClient;
376 USHORT OutBufLength;
377 CHAR DeviceId[MAX_PATH + 1];
378} WTSCLIENTA, *PWTSCLIENTA;
379
380__MINGW_TYPEDEF_AW(WTSCLIENT)
381__MINGW_TYPEDEF_AW(PWTSCLIENT)
382
383#define PRODUCTINFO_COMPANYNAME_LENGTH 256
384#define PRODUCTINFO_PRODUCTID_LENGTH 4
385
386 typedef struct _WTS_PRODUCT_INFOA {
387 CHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
388 CHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
389 } PRODUCT_INFOA;
390
391 typedef struct _WTS_PRODUCT_INFOW {
392 WCHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
393 WCHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
394 } PRODUCT_INFOW;
395
396__MINGW_TYPEDEF_AW(PRODUCT_INFO)
397
398#define VALIDATIONINFORMATION_LICENSE_LENGTH 16384
399#define VALIDATIONINFORMATION_HARDWAREID_LENGTH 20
400
401 typedef struct _WTS_VALIDATION_INFORMATIONA {
402 PRODUCT_INFOA ProductInfo;
403 BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
404 DWORD LicenseLength;
405 BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
406 DWORD HardwareIDLength;
407 } WTS_VALIDATION_INFORMATIONA, *PWTS_VALIDATION_INFORMATIONA;
408
409 typedef struct _WTS_VALIDATION_INFORMATIONW {
410 PRODUCT_INFOW ProductInfo;
411 BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
412 DWORD LicenseLength;
413 BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
414 DWORD HardwareIDLength;
415 } WTS_VALIDATION_INFORMATIONW, *PWTS_VALIDATION_INFORMATIONW;
416
417__MINGW_TYPEDEF_AW(WTS_VALIDATION_INFORMATION)
418__MINGW_TYPEDEF_AW(PWTS_VALIDATION_INFORMATION)
419
420typedef struct _WTSINFOW {
421 WTS_CONNECTSTATE_CLASS State;
422 DWORD SessionId;
423 DWORD IncomingBytes;
424 DWORD OutgoingBytes;
425 DWORD IncomingFrames;
426 DWORD OutgoingFrames;
427 DWORD IncomingCompressedBytes;
428 DWORD OutgoingCompressedBytes;
429 WCHAR WinStationName[WINSTATIONNAME_LENGTH];
430 WCHAR Domain[DOMAIN_LENGTH];
431 WCHAR UserName[USERNAME_LENGTH+1];
432 LARGE_INTEGER ConnectTime;
433 LARGE_INTEGER DisconnectTime;
434 LARGE_INTEGER LastInputTime;
435 LARGE_INTEGER LogonTime;
436 LARGE_INTEGER CurrentTime;
437} WTSINFOW, *PWTSINFOW;
438
439typedef struct _WTSINFOA {
440 WTS_CONNECTSTATE_CLASS State;
441 DWORD SessionId;
442 DWORD IncomingBytes;
443 DWORD OutgoingBytes;
444 DWORD IncomingFrames;
445 DWORD OutgoingFrames;
446 DWORD IncomingCompressedBytes;
447 DWORD OutgoingCompressedBytes;
448 CHAR WinStationName[WINSTATIONNAME_LENGTH];
449 CHAR Domain[DOMAIN_LENGTH];
450 CHAR UserName[USERNAME_LENGTH+1];
451 LARGE_INTEGER ConnectTime;
452 LARGE_INTEGER DisconnectTime;
453 LARGE_INTEGER LastInputTime;
454 LARGE_INTEGER LogonTime;
455 LARGE_INTEGER CurrentTime;
456} WTSINFOA, *PWTSINFOA;
457
458__MINGW_TYPEDEF_AW(WTSINFO)
459__MINGW_TYPEDEF_AW(PWTSINFO)
460
461#define WTS_SESSIONSTATE_UNKNOWN 0xffffffff
462#define WTS_SESSIONSTATE_LOCK 0x00000000
463#define WTS_SESSIONSTATE_UNLOCK 0x00000001
464
465 typedef struct _WTSINFOEX_LEVEL1_W {
466 ULONG SessionId;
467 WTS_CONNECTSTATE_CLASS SessionState;
468 LONG SessionFlags;
469 WCHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
470 WCHAR UserName[USERNAME_LENGTH + 1];
471 WCHAR DomainName[DOMAIN_LENGTH + 1];
472 LARGE_INTEGER LogonTime;
473 LARGE_INTEGER ConnectTime;
474 LARGE_INTEGER DisconnectTime;
475 LARGE_INTEGER LastInputTime;
476 LARGE_INTEGER CurrentTime;
477 DWORD IncomingBytes;
478 DWORD OutgoingBytes;
479 DWORD IncomingFrames;
480 DWORD OutgoingFrames;
481 DWORD IncomingCompressedBytes;
482 DWORD OutgoingCompressedBytes;
483 } WTSINFOEX_LEVEL1_W, *PWTSINFOEX_LEVEL1_W;
484
485 typedef struct _WTSINFOEX_LEVEL1_A {
486 ULONG SessionId;
487 WTS_CONNECTSTATE_CLASS SessionState;
488 LONG SessionFlags;
489 CHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
490 CHAR UserName[USERNAME_LENGTH + 1];
491 CHAR DomainName[DOMAIN_LENGTH + 1];
492 LARGE_INTEGER LogonTime;
493 LARGE_INTEGER ConnectTime;
494 LARGE_INTEGER DisconnectTime;
495 LARGE_INTEGER LastInputTime;
496 LARGE_INTEGER CurrentTime;
497 DWORD IncomingBytes;
498 DWORD OutgoingBytes;
499 DWORD IncomingFrames;
500 DWORD OutgoingFrames;
501 DWORD IncomingCompressedBytes;
502 DWORD OutgoingCompressedBytes;
503 } WTSINFOEX_LEVEL1_A, *PWTSINFOEX_LEVEL1_A;
504
505__MINGW_TYPEDEF_UAW(WTSINFOEX_LEVEL1)
506__MINGW_TYPEDEF_UAW(PWTSINFOEX_LEVEL1)
507
508 typedef union _WTSINFOEX_LEVEL_W {
509 WTSINFOEX_LEVEL1_W WTSInfoExLevel1;
510 } WTSINFOEX_LEVEL_W, *PWTSINFOEX_LEVEL_W;
511
512 typedef union _WTSINFOEX_LEVEL_A {
513 WTSINFOEX_LEVEL1_A WTSInfoExLevel1;
514 } WTSINFOEX_LEVEL_A, *PWTSINFOEX_LEVEL_A;
515
516__MINGW_TYPEDEF_UAW(WTSINFOEX_LEVEL)
517__MINGW_TYPEDEF_UAW(PWTSINFOEX_LEVEL)
518
519 typedef struct _WTSINFOEXW {
520 DWORD Level;
521 WTSINFOEX_LEVEL_W Data;
522 } WTSINFOEXW, *PWTSINFOEXW;
523
524 typedef struct _WTSINFOEXA {
525 DWORD Level;
526 WTSINFOEX_LEVEL_A Data;
527 } WTSINFOEXA, *PWTSINFOEXA;
528
529__MINGW_TYPEDEF_AW(WTSINFOEX)
530__MINGW_TYPEDEF_AW(PWTSINFOEX)
531
532WINBOOL WINAPI WTSConnectSessionA(
533 ULONG LogonId,
534 ULONG TargetLogonId,
535 PSTR pPassword,
536 WINBOOL bWait
537);
538
539WINBOOL WINAPI WTSConnectSessionW(
540 ULONG LogonId,
541 ULONG TargetLogonId,
542 PWSTR pPassword,
543 WINBOOL bWait
544);
545
546WINBOOL WTSRegisterSessionNotificationEx(
547 HANDLE hServer,
548 HWND hWnd,
549 DWORD dwFlags
550);
551
552WINBOOL WINAPI WTSStartRemoteControlSessionA(
553 LPSTR pTargetServerName,
554 ULONG TargetLogonId,
555 BYTE HotkeyVk,
556 USHORT HotkeyModifiers
557);
558
559WINBOOL WINAPI WTSStartRemoteControlSessionW(
560 LPWSTR pTargetServerName,
561 ULONG TargetLogonId,
562 BYTE HotkeyVk,
563 USHORT HotkeyModifiers
564);
565
566#define WTSStartRemoteControlSession __MINGW_NAME_AW(WTSStartRemoteControlSession)
567#define WTSConnectSession __MINGW_NAME_AW(WTSConnectSession)
568
569WINBOOL WINAPI WTSStopRemoteControlSession(
570 ULONG LogonId
571);
572
573WINBOOL WINAPI WTSUnRegisterSessionNotificationEx(
574 HANDLE hServer,
575 HWND hWnd
576);
577
578#define WTS_CHANNEL_OPTION_DYNAMIC 0x00000001
579#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_LOW 0x00000000
580#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_MED 0x00000002
581#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_HIGH 0x00000004
582#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_REAL 0x00000006
583#define WTS_CHANNEL_OPTION_DYNAMIC_NO_COMPRESS 0x00000008
584
585HANDLE WINAPI WTSVirtualChannelOpenEx(
586 DWORD SessionId,
587 LPSTR pVirtualName,
588 DWORD flags
589);
590
591#endif /*(_WIN32_WINNT >= 0x0600)*/
592
593#if (_WIN32_WINNT >= 0x0601)
594
595typedef struct _WTS_SESSION_INFO_1A {
596 DWORD ExecEnvId;
597 WTS_CONNECTSTATE_CLASS State;
598 DWORD SessionId;
599 LPSTR pSessionName;
600 LPSTR pHostName;
601 LPSTR pUserName;
602 LPSTR pDomainName;
603 LPSTR pFarmName;
604} WTS_SESSION_INFO_1A, *PWTS_SESSION_INFO_1A;
605
606typedef struct _WTS_SESSION_INFO_1W {
607 DWORD ExecEnvId;
608 WTS_CONNECTSTATE_CLASS State;
609 DWORD SessionId;
610 LPWSTR pSessionName;
611 LPWSTR pHostName;
612 LPWSTR pUserName;
613 LPWSTR pDomainName;
614 LPWSTR pFarmName;
615} WTS_SESSION_INFO_1W, * PWTS_SESSION_INFO_1W;
616
617#define WTS_SESSION_INFO_1 __MINGW_NAME_AW(WTS_SESSION_INFO_1)
618#define PWTS_SESSION_INFO_1 __MINGW_NAME_AW(PWTS_SESSION_INFO_1)
619
620WINBOOL WINAPI WTSEnumerateSessionsExA(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1A* ppSessionInfo,DWORD* pCount);
621WINBOOL WINAPI WTSEnumerateSessionsExW(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1W* ppSessionInfo,DWORD* pCount);
622#define WTSEnumerateSessionsEx __MINGW_NAME_AW(WTSEnumerateSessionsEx)
623
624typedef enum _WTS_TYPE_CLASS {
625 WTSTypeProcessInfoLevel0,
626 WTSTypeProcessInfoLevel1,
627 WTSTypeSessionInfoLevel1
628} WTS_TYPE_CLASS;
629WINBOOL WINAPI WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries);
630WINBOOL WINAPI WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries);
631#define WTSFreeMemoryEx __MINGW_NAME_AW(WTSFreeMemoryEx)
632
633#endif /*(_WIN32_WINNT >= 0x0601)*/
634
635#ifdef __cplusplus
636}
637#endif
638#endif