zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

wtsapi32.h (22876B) - Raw


      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
     12 extern "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)
    336 typedef 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 
    358 typedef 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 
    420 typedef 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 
    439 typedef 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 
    532 WINBOOL WINAPI WTSConnectSessionA(
    533   ULONG LogonId,
    534   ULONG TargetLogonId,
    535   PSTR   pPassword,
    536   WINBOOL bWait
    537 );
    538 
    539 WINBOOL WINAPI WTSConnectSessionW(
    540   ULONG LogonId,
    541   ULONG TargetLogonId,
    542   PWSTR  pPassword,
    543   WINBOOL bWait
    544 );
    545 
    546 WINBOOL WTSRegisterSessionNotificationEx(
    547   HANDLE hServer,
    548   HWND hWnd,
    549   DWORD dwFlags
    550 );
    551 
    552 WINBOOL WINAPI WTSStartRemoteControlSessionA(
    553   LPSTR pTargetServerName,
    554   ULONG TargetLogonId,
    555   BYTE HotkeyVk,
    556   USHORT HotkeyModifiers
    557 );
    558 
    559 WINBOOL 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 
    569 WINBOOL WINAPI WTSStopRemoteControlSession(
    570   ULONG LogonId
    571 );
    572 
    573 WINBOOL 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 
    585 HANDLE 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 
    595 typedef 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 
    606 typedef 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 
    620 WINBOOL WINAPI WTSEnumerateSessionsExA(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1A* ppSessionInfo,DWORD* pCount);
    621 WINBOOL WINAPI WTSEnumerateSessionsExW(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1W* ppSessionInfo,DWORD* pCount);
    622 #define WTSEnumerateSessionsEx __MINGW_NAME_AW(WTSEnumerateSessionsEx)
    623 
    624 typedef enum _WTS_TYPE_CLASS {
    625   WTSTypeProcessInfoLevel0,
    626   WTSTypeProcessInfoLevel1,
    627   WTSTypeSessionInfoLevel1
    628 } WTS_TYPE_CLASS;
    629 WINBOOL WINAPI WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries);
    630 WINBOOL 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