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