25#include <winpr/winpr.h>
26#include <winpr/wtypes.h>
28#include <winpr/file.h>
30#define CHANNEL_CHUNK_MAX_LENGTH 16256
33WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
37#define CurrentTime _CurrentTime
41#if defined(_WIN32) && !defined(_UWP)
51#define CHANNEL_CHUNK_LENGTH 1600
53#define CHANNEL_PDU_LENGTH (CHANNEL_CHUNK_LENGTH + sizeof(CHANNEL_PDU_HEADER))
55#define CHANNEL_FLAG_FIRST 0x01
56#define CHANNEL_FLAG_LAST 0x02
57#define CHANNEL_FLAG_ONLY (CHANNEL_FLAG_FIRST | CHANNEL_FLAG_LAST)
58#define CHANNEL_FLAG_MIDDLE 0
59#define CHANNEL_FLAG_FAIL 0x100
61#define CHANNEL_OPTION_INITIALIZED 0x80000000
63#define CHANNEL_OPTION_ENCRYPT_RDP 0x40000000
64#define CHANNEL_OPTION_ENCRYPT_SC 0x20000000
65#define CHANNEL_OPTION_ENCRYPT_CS 0x10000000
66#define CHANNEL_OPTION_PRI_HIGH 0x08000000
67#define CHANNEL_OPTION_PRI_MED 0x04000000
68#define CHANNEL_OPTION_PRI_LOW 0x02000000
69#define CHANNEL_OPTION_COMPRESS_RDP 0x00800000
70#define CHANNEL_OPTION_COMPRESS 0x00400000
71#define CHANNEL_OPTION_SHOW_PROTOCOL 0x00200000
72#define CHANNEL_OPTION_REMOTE_CONTROL_PERSISTENT 0x00100000
74#define CHANNEL_MAX_COUNT 31
75#define CHANNEL_NAME_LEN 7
77typedef struct tagCHANNEL_DEF
79 char name[CHANNEL_NAME_LEN + 1];
85typedef struct tagCHANNEL_PDU_HEADER
97#ifndef CHANNEL_FLAG_SHOW_PROTOCOL
98#define CHANNEL_FLAG_SHOW_PROTOCOL 0x10
100#ifndef CHANNEL_FLAG_SUSPEND
101#define CHANNEL_FLAG_SUSPEND 0x20
103#ifndef CHANNEL_FLAG_RESUME
104#define CHANNEL_FLAG_RESUME 0x40
106#ifndef CHANNEL_FLAG_SHADOW_PERSISTENT
107#define CHANNEL_FLAG_SHADOW_PERSISTENT 0x80
110#if !defined(_WIN32) || !defined(H_CCHANNEL)
117#define VCAPITYPE __stdcall
120#define VCAPITYPE CALLBACK
121#define VCEXPORT __export
124typedef VOID VCAPITYPE CHANNEL_INIT_EVENT_FN(LPVOID pInitHandle, UINT event, LPVOID pData,
127typedef CHANNEL_INIT_EVENT_FN* PCHANNEL_INIT_EVENT_FN;
129typedef VOID VCAPITYPE CHANNEL_INIT_EVENT_EX_FN(LPVOID lpUserParam, LPVOID pInitHandle, UINT event,
130 LPVOID pData, UINT dataLength);
132typedef CHANNEL_INIT_EVENT_EX_FN* PCHANNEL_INIT_EVENT_EX_FN;
134#define CHANNEL_EVENT_INITIALIZED 0
135#define CHANNEL_EVENT_CONNECTED 1
136#define CHANNEL_EVENT_V1_CONNECTED 2
137#define CHANNEL_EVENT_DISCONNECTED 3
138#define CHANNEL_EVENT_TERMINATED 4
139#define CHANNEL_EVENT_REMOTE_CONTROL_START 5
140#define CHANNEL_EVENT_REMOTE_CONTROL_STOP 6
141#define CHANNEL_EVENT_ATTACHED 7
142#define CHANNEL_EVENT_DETACHED 8
143#define CHANNEL_EVENT_DATA_RECEIVED 10
144#define CHANNEL_EVENT_WRITE_COMPLETE 11
145#define CHANNEL_EVENT_WRITE_CANCELLED 12
147typedef VOID VCAPITYPE CHANNEL_OPEN_EVENT_FN(DWORD openHandle, UINT event, LPVOID pData,
148 UINT32 dataLength, UINT32 totalLength,
151typedef CHANNEL_OPEN_EVENT_FN* PCHANNEL_OPEN_EVENT_FN;
153typedef VOID VCAPITYPE CHANNEL_OPEN_EVENT_EX_FN(LPVOID lpUserParam, DWORD openHandle, UINT event,
154 LPVOID pData, UINT32 dataLength, UINT32 totalLength,
157typedef CHANNEL_OPEN_EVENT_EX_FN* PCHANNEL_OPEN_EVENT_EX_FN;
159#define CHANNEL_RC_OK 0
160#define CHANNEL_RC_ALREADY_INITIALIZED 1
161#define CHANNEL_RC_NOT_INITIALIZED 2
162#define CHANNEL_RC_ALREADY_CONNECTED 3
163#define CHANNEL_RC_NOT_CONNECTED 4
164#define CHANNEL_RC_TOO_MANY_CHANNELS 5
165#define CHANNEL_RC_BAD_CHANNEL 6
166#define CHANNEL_RC_BAD_CHANNEL_HANDLE 7
167#define CHANNEL_RC_NO_BUFFER 8
168#define CHANNEL_RC_BAD_INIT_HANDLE 9
169#define CHANNEL_RC_NOT_OPEN 10
170#define CHANNEL_RC_BAD_PROC 11
171#define CHANNEL_RC_NO_MEMORY 12
172#define CHANNEL_RC_UNKNOWN_CHANNEL_NAME 13
173#define CHANNEL_RC_ALREADY_OPEN 14
174#define CHANNEL_RC_NOT_IN_VIRTUALCHANNELENTRY 15
175#define CHANNEL_RC_NULL_DATA 16
176#define CHANNEL_RC_ZERO_LENGTH 17
177#define CHANNEL_RC_INVALID_INSTANCE 18
178#define CHANNEL_RC_UNSUPPORTED_VERSION 19
179#define CHANNEL_RC_INITIALIZATION_ERROR 20
181#define VIRTUAL_CHANNEL_VERSION_WIN2000 1
183typedef UINT VCAPITYPE VIRTUALCHANNELINIT(LPVOID* ppInitHandle,
PCHANNEL_DEF pChannel,
184 INT channelCount, ULONG versionRequested,
185 PCHANNEL_INIT_EVENT_FN pChannelInitEventProc);
187typedef VIRTUALCHANNELINIT* PVIRTUALCHANNELINIT;
189typedef UINT VCAPITYPE VIRTUALCHANNELINITEX(LPVOID lpUserParam, LPVOID clientContext,
191 INT channelCount, ULONG versionRequested,
192 PCHANNEL_INIT_EVENT_EX_FN pChannelInitEventProcEx);
194typedef VIRTUALCHANNELINITEX* PVIRTUALCHANNELINITEX;
196typedef UINT VCAPITYPE VIRTUALCHANNELOPEN(LPVOID pInitHandle, LPDWORD pOpenHandle,
198 PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc);
200typedef VIRTUALCHANNELOPEN* PVIRTUALCHANNELOPEN;
202typedef UINT VCAPITYPE VIRTUALCHANNELOPENEX(LPVOID pInitHandle, LPDWORD pOpenHandle,
204 PCHANNEL_OPEN_EVENT_EX_FN pChannelOpenEventProcEx);
206typedef VIRTUALCHANNELOPENEX* PVIRTUALCHANNELOPENEX;
208typedef UINT VCAPITYPE VIRTUALCHANNELCLOSE(DWORD openHandle);
210typedef VIRTUALCHANNELCLOSE* PVIRTUALCHANNELCLOSE;
212typedef UINT VCAPITYPE VIRTUALCHANNELCLOSEEX(LPVOID pInitHandle, DWORD openHandle);
214typedef VIRTUALCHANNELCLOSEEX* PVIRTUALCHANNELCLOSEEX;
216typedef UINT VCAPITYPE VIRTUALCHANNELWRITE(DWORD openHandle, LPVOID pData, ULONG dataLength,
219typedef VIRTUALCHANNELWRITE* PVIRTUALCHANNELWRITE;
221typedef UINT VCAPITYPE VIRTUALCHANNELWRITEEX(LPVOID pInitHandle, DWORD openHandle, LPVOID pData,
222 ULONG dataLength, LPVOID pUserData);
224typedef VIRTUALCHANNELWRITEEX* PVIRTUALCHANNELWRITEEX;
226typedef struct tagCHANNEL_ENTRY_POINTS
229 DWORD protocolVersion;
230 PVIRTUALCHANNELINIT pVirtualChannelInit;
231 PVIRTUALCHANNELOPEN pVirtualChannelOpen;
232 PVIRTUALCHANNELCLOSE pVirtualChannelClose;
233 PVIRTUALCHANNELWRITE pVirtualChannelWrite;
236typedef struct tagCHANNEL_ENTRY_POINTS_EX
239 DWORD protocolVersion;
240 PVIRTUALCHANNELINITEX pVirtualChannelInitEx;
241 PVIRTUALCHANNELOPENEX pVirtualChannelOpenEx;
242 PVIRTUALCHANNELCLOSEEX pVirtualChannelCloseEx;
243 PVIRTUALCHANNELWRITEEX pVirtualChannelWriteEx;
246typedef BOOL VCAPITYPE VIRTUALCHANNELENTRY(PCHANNEL_ENTRY_POINTS pEntryPoints);
248typedef VIRTUALCHANNELENTRY* PVIRTUALCHANNELENTRY;
250typedef BOOL VCAPITYPE VIRTUALCHANNELENTRYEX(PCHANNEL_ENTRY_POINTS_EX pEntryPointsEx,
253typedef VIRTUALCHANNELENTRYEX* PVIRTUALCHANNELENTRYEX;
255typedef HRESULT(VCAPITYPE* PFNVCAPIGETINSTANCE)(REFIID refiid, PULONG pNumObjs, PVOID* ppObjArray);
259#if !defined(_WIN32) || !defined(_INC_WTSAPI)
265#define WTS_CURRENT_SERVER ((HANDLE)NULL)
266#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)
267#define WTS_CURRENT_SERVER_NAME (NULL)
269#define WTS_CURRENT_SESSION ((DWORD)-1)
271#define WTS_ANY_SESSION ((DWORD)-2)
273#define IDTIMEOUT 32000
276#define USERNAME_LENGTH 20
277#define CLIENTNAME_LENGTH 20
278#define CLIENTADDRESS_LENGTH 30
280#define WTS_WSD_LOGOFF 0x00000001
281#define WTS_WSD_SHUTDOWN 0x00000002
282#define WTS_WSD_REBOOT 0x00000004
283#define WTS_WSD_POWEROFF 0x00000008
284#define WTS_WSD_FASTREBOOT 0x00000010
286#define MAX_ELAPSED_TIME_LENGTH 15
287#define MAX_DATE_TIME_LENGTH 56
288#define WINSTATIONNAME_LENGTH 32
289#define DOMAIN_LENGTH 17
291#define WTS_DRIVE_LENGTH 3
292#define WTS_LISTENER_NAME_LENGTH 32
293#define WTS_COMMENT_LENGTH 60
295#define WTS_LISTENER_CREATE 0x00000001
296#define WTS_LISTENER_UPDATE 0x00000010
298#define WTS_SECURITY_QUERY_INFORMATION 0x00000001
299#define WTS_SECURITY_SET_INFORMATION 0x00000002
300#define WTS_SECURITY_RESET 0x00000004
301#define WTS_SECURITY_VIRTUAL_CHANNELS 0x00000008
302#define WTS_SECURITY_REMOTE_CONTROL 0x00000010
303#define WTS_SECURITY_LOGON 0x00000020
304#define WTS_SECURITY_LOGOFF 0x00000040
305#define WTS_SECURITY_MESSAGE 0x00000080
306#define WTS_SECURITY_CONNECT 0x00000100
307#define WTS_SECURITY_DISCONNECT 0x00000200
309#define WTS_SECURITY_GUEST_ACCESS (WTS_SECURITY_LOGON)
311#define WTS_SECURITY_CURRENT_GUEST_ACCESS (WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_LOGOFF)
313#define WTS_SECURITY_USER_ACCESS \
314 (WTS_SECURITY_CURRENT_GUEST_ACCESS | WTS_SECURITY_QUERY_INFORMATION | WTS_SECURITY_CONNECT)
316#define WTS_SECURITY_CURRENT_USER_ACCESS \
317 (WTS_SECURITY_SET_INFORMATION | WTS_SECURITY_RESET WTS_SECURITY_VIRTUAL_CHANNELS | \
318 WTS_SECURITY_LOGOFF WTS_SECURITY_DISCONNECT)
320#define WTS_SECURITY_ALL_ACCESS \
321 (STANDARD_RIGHTS_REQUIRED | WTS_SECURITY_QUERY_INFORMATION | WTS_SECURITY_SET_INFORMATION | \
322 WTS_SECURITY_RESET | WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_REMOTE_CONTROL | \
323 WTS_SECURITY_LOGON | WTS_SECURITY_MESSAGE | WTS_SECURITY_CONNECT | WTS_SECURITY_DISCONNECT)
337} WTS_CONNECTSTATE_CLASS;
352 LPWSTR pWinStationName;
353 WTS_CONNECTSTATE_CLASS State;
359 LPSTR pWinStationName;
360 WTS_CONNECTSTATE_CLASS State;
366 WTS_CONNECTSTATE_CLASS State;
378 WTS_CONNECTSTATE_CLASS State;
403#define WTS_PROTOCOL_TYPE_CONSOLE 0
404#define WTS_PROTOCOL_TYPE_ICA 1
405#define WTS_PROTOCOL_TYPE_RDP 2
418 WTSClientBuildNumber,
425 WTSClientProtocolType,
444 ULONG fConnectClientDrivesAtLogon;
445 ULONG fConnectPrinterAtLogon;
446 ULONG fDisablePrinterRedirection;
447 ULONG fDisableDefaultMainClientPrinter;
448 ULONG ShadowSettings;
449 WCHAR LogonUserName[USERNAME_LENGTH + 1];
450 WCHAR LogonDomain[DOMAIN_LENGTH + 1];
451 WCHAR WorkDirectory[MAX_PATH + 1];
452 WCHAR InitialProgram[MAX_PATH + 1];
453 WCHAR ApplicationName[MAX_PATH + 1];
459 ULONG fConnectClientDrivesAtLogon;
460 ULONG fConnectPrinterAtLogon;
461 ULONG fDisablePrinterRedirection;
462 ULONG fDisableDefaultMainClientPrinter;
463 ULONG ShadowSettings;
464 CHAR LogonUserName[USERNAME_LENGTH + 1];
465 CHAR LogonDomain[DOMAIN_LENGTH + 1];
466 CHAR WorkDirectory[MAX_PATH + 1];
467 CHAR InitialProgram[MAX_PATH + 1];
468 CHAR ApplicationName[MAX_PATH + 1];
473 WTS_CONNECTSTATE_CLASS State;
477 DWORD IncomingFrames;
478 DWORD OutgoingFrames;
479 DWORD IncomingCompressedBytes;
480 DWORD OutgoingCompressedBytes;
481 WCHAR WinStationName[WINSTATIONNAME_LENGTH];
482 WCHAR Domain[DOMAIN_LENGTH];
483 WCHAR UserName[USERNAME_LENGTH + 1];
494 WTS_CONNECTSTATE_CLASS State;
498 DWORD IncomingFrames;
499 DWORD OutgoingFrames;
500 DWORD IncomingCompressedBytes;
501 DWORD OutgoingCompressedBy;
502 CHAR WinStationName[WINSTATIONNAME_LENGTH];
503 CHAR Domain[DOMAIN_LENGTH];
504 CHAR UserName[USERNAME_LENGTH + 1];
513#define WTS_SESSIONSTATE_UNKNOWN 0xFFFFFFFF
514#define WTS_SESSIONSTATE_LOCK 0x00000000
515#define WTS_SESSIONSTATE_UNLOCK 0x00000001
520 WTS_CONNECTSTATE_CLASS SessionState;
522 WCHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
523 WCHAR UserName[USERNAME_LENGTH + 1];
524 WCHAR DomainName[DOMAIN_LENGTH + 1];
533 DWORD IncomingFrames;
534 DWORD OutgoingFrames;
535 DWORD IncomingCompressedBytes;
536 DWORD OutgoingCompressedBytes;
542 WTS_CONNECTSTATE_CLASS SessionState;
544 CHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
545 CHAR UserName[USERNAME_LENGTH + 1];
546 CHAR DomainName[DOMAIN_LENGTH + 1];
555 DWORD IncomingFrames;
556 DWORD OutgoingFrames;
557 DWORD IncomingCompressedBytes;
558 DWORD OutgoingCompressedBytes;
585 WCHAR ClientName[CLIENTNAME_LENGTH + 1];
586 WCHAR Domain[DOMAIN_LENGTH + 1];
587 WCHAR UserName[USERNAME_LENGTH + 1];
588 WCHAR WorkDirectory[MAX_PATH + 1];
589 WCHAR InitialProgram[MAX_PATH + 1];
590 BYTE EncryptionLevel;
591 ULONG ClientAddressFamily;
592 USHORT ClientAddress[CLIENTADDRESS_LENGTH + 1];
596 WCHAR ClientDirectory[MAX_PATH + 1];
597 ULONG ClientBuildNumber;
598 ULONG ClientHardwareId;
599 USHORT ClientProductId;
600 USHORT OutBufCountHost;
601 USHORT OutBufCountClient;
603 WCHAR DeviceId[MAX_PATH + 1];
608 CHAR ClientName[CLIENTNAME_LENGTH + 1];
609 CHAR Domain[DOMAIN_LENGTH + 1];
610 CHAR UserName[USERNAME_LENGTH + 1];
611 CHAR WorkDirectory[MAX_PATH + 1];
612 CHAR InitialProgram[MAX_PATH + 1];
613 BYTE EncryptionLevel;
614 ULONG ClientAddressFamily;
615 USHORT ClientAddress[CLIENTADDRESS_LENGTH + 1];
619 CHAR ClientDirectory[MAX_PATH + 1];
620 ULONG ClientBuildNumber;
621 ULONG ClientHardwareId;
622 USHORT ClientProductId;
623 USHORT OutBufCountHost;
624 USHORT OutBufCountClient;
626 CHAR DeviceId[MAX_PATH + 1];
629#define PRODUCTINFO_COMPANYNAME_LENGTH 256
630#define PRODUCTINFO_PRODUCTID_LENGTH 4
634 CHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
635 CHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
640 WCHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
641 WCHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
644#define VALIDATIONINFORMATION_LICENSE_LENGTH 16384
645#define VALIDATIONINFORMATION_HARDWAREID_LENGTH 20
650 BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
652 BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
653 DWORD HardwareIDLength;
659 BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
661 BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
662 DWORD HardwareIDLength;
673 DWORD HorizontalResolution;
674 DWORD VerticalResolution;
680 WTSUserConfigInitialProgram,
681 WTSUserConfigWorkingDirectory,
682 WTSUserConfigfInheritInitialProgram,
683 WTSUserConfigfAllowLogonTerminalServer,
684 WTSUserConfigTimeoutSettingsConnections,
685 WTSUserConfigTimeoutSettingsDisconnections,
686 WTSUserConfigTimeoutSettingsIdle,
687 WTSUserConfigfDeviceClientDrives,
688 WTSUserConfigfDeviceClientPrinters,
689 WTSUserConfigfDeviceClientDefaultPrinter,
690 WTSUserConfigBrokenTimeoutSettings,
691 WTSUserConfigReconnectSettings,
692 WTSUserConfigModemCallbackSettings,
693 WTSUserConfigModemCallbackPhoneNumber,
694 WTSUserConfigShadowingSettings,
695 WTSUserConfigTerminalServerProfilePath,
696 WTSUserConfigTerminalServerHomeDir,
697 WTSUserConfigTerminalServerHomeDirDrive,
698 WTSUserConfigfTerminalServerRemoteHomeDir,
704 WTSUserConfigSourceSAM
710 DWORD InheritInitialProgram;
711 DWORD AllowLogonTerminalServer;
712 DWORD TimeoutSettingsConnections;
713 DWORD TimeoutSettingsDisconnections;
714 DWORD TimeoutSettingsIdle;
715 DWORD DeviceClientDrives;
716 DWORD DeviceClientPrinters;
717 DWORD ClientDefaultPrinter;
718 DWORD BrokenTimeoutSettings;
719 DWORD ReconnectSettings;
720 DWORD ShadowingSettings;
721 DWORD TerminalServerRemoteHomeDir;
722 CHAR InitialProgram[MAX_PATH + 1];
723 CHAR WorkDirectory[MAX_PATH + 1];
724 CHAR TerminalServerProfilePath[MAX_PATH + 1];
725 CHAR TerminalServerHomeDir[MAX_PATH + 1];
726 CHAR TerminalServerHomeDirDrive[WTS_DRIVE_LENGTH + 1];
732 DWORD InheritInitialProgram;
733 DWORD AllowLogonTerminalServer;
734 DWORD TimeoutSettingsConnections;
735 DWORD TimeoutSettingsDisconnections;
736 DWORD TimeoutSettingsIdle;
737 DWORD DeviceClientDrives;
738 DWORD DeviceClientPrinters;
739 DWORD ClientDefaultPrinter;
740 DWORD BrokenTimeoutSettings;
741 DWORD ReconnectSettings;
742 DWORD ShadowingSettings;
743 DWORD TerminalServerRemoteHomeDir;
744 WCHAR InitialProgram[MAX_PATH + 1];
745 WCHAR WorkDirectory[MAX_PATH + 1];
746 WCHAR TerminalServerProfilePath[MAX_PATH + 1];
747 WCHAR TerminalServerHomeDir[MAX_PATH + 1];
748 WCHAR TerminalServerHomeDirDrive[WTS_DRIVE_LENGTH + 1];
751#define WTS_EVENT_NONE 0x00000000
752#define WTS_EVENT_CREATE 0x00000001
753#define WTS_EVENT_DELETE 0x00000002
754#define WTS_EVENT_RENAME 0x00000004
755#define WTS_EVENT_CONNECT 0x00000008
756#define WTS_EVENT_DISCONNECT 0x00000010
757#define WTS_EVENT_LOGON 0x00000020
758#define WTS_EVENT_LOGOFF 0x00000040
759#define WTS_EVENT_STATECHANGE 0x00000080
760#define WTS_EVENT_LICENSE 0x00000100
761#define WTS_EVENT_ALL 0x7FFFFFFF
762#define WTS_EVENT_FLUSH 0x80000000
764#define REMOTECONTROL_KBDSHIFT_HOTKEY 0x1
765#define REMOTECONTROL_KBDCTRL_HOTKEY 0x2
766#define REMOTECONTROL_KBDALT_HOTKEY 0x4
770 WTSVirtualClientData,
771 WTSVirtualFileHandle,
772 WTSVirtualEventHandle,
773 WTSVirtualChannelReady,
774 WTSVirtualChannelOpenStatus
783#define WTS_CHANNEL_OPTION_DYNAMIC 0x00000001
784#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_LOW 0x00000000
785#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_MED 0x00000002
786#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_HIGH 0x00000004
787#define WTS_CHANNEL_OPTION_DYNAMIC_PRI_REAL 0x00000006
788#define WTS_CHANNEL_OPTION_DYNAMIC_NO_COMPRESS 0x00000008
790#define NOTIFY_FOR_ALL_SESSIONS 1
791#define NOTIFY_FOR_THIS_SESSION 0
793#define WTS_PROCESS_INFO_LEVEL_0 0
794#define WTS_PROCESS_INFO_LEVEL_1 1
802 DWORD NumberOfThreads;
805 DWORD PeakPagefileUsage;
806 DWORD WorkingSetSize;
807 DWORD PeakWorkingSetSize;
818 DWORD NumberOfThreads;
821 DWORD PeakPagefileUsage;
822 DWORD WorkingSetSize;
823 DWORD PeakWorkingSetSize;
830 WTSTypeProcessInfoLevel0,
831 WTSTypeProcessInfoLevel1,
832 WTSTypeSessionInfoLevel1
835typedef WCHAR WTSLISTENERNAMEW[WTS_LISTENER_NAME_LENGTH + 1];
836typedef WTSLISTENERNAMEW* PWTSLISTENERNAMEW;
837typedef CHAR WTSLISTENERNAMEA[WTS_LISTENER_NAME_LENGTH + 1];
838typedef WTSLISTENERNAMEA* PWTSLISTENERNAMEA;
843 ULONG fEnableListener;
844 ULONG MaxConnectionCount;
845 ULONG fPromptForPassword;
846 ULONG fInheritColorDepth;
848 ULONG fInheritBrokenTimeoutSettings;
849 ULONG BrokenTimeoutSettings;
850 ULONG fDisablePrinterRedirection;
851 ULONG fDisableDriveRedirection;
852 ULONG fDisableComPortRedirection;
853 ULONG fDisableLPTPortRedirection;
854 ULONG fDisableClipboardRedirection;
855 ULONG fDisableAudioRedirection;
856 ULONG fDisablePNPRedirection;
857 ULONG fDisableDefaultMainClientPrinter;
860 ULONG fInheritShadowSettings;
861 ULONG ShadowSettings;
862 ULONG TimeoutSettingsConnection;
863 ULONG TimeoutSettingsDisconnection;
864 ULONG TimeoutSettingsIdle;
866 ULONG MinEncryptionLevel;
867 ULONG UserAuthentication;
868 WCHAR Comment[WTS_COMMENT_LENGTH + 1];
869 WCHAR LogonUserName[USERNAME_LENGTH + 1];
870 WCHAR LogonDomain[DOMAIN_LENGTH + 1];
871 WCHAR WorkDirectory[MAX_PATH + 1];
872 WCHAR InitialProgram[MAX_PATH + 1];
878 ULONG fEnableListener;
879 ULONG MaxConnectionCount;
880 ULONG fPromptForPassword;
881 ULONG fInheritColorDepth;
883 ULONG fInheritBrokenTimeoutSettings;
884 ULONG BrokenTimeoutSettings;
885 ULONG fDisablePrinterRedirection;
886 ULONG fDisableDriveRedirection;
887 ULONG fDisableComPortRedirection;
888 ULONG fDisableLPTPortRedirection;
889 ULONG fDisableClipboardRedirection;
890 ULONG fDisableAudioRedirection;
891 ULONG fDisablePNPRedirection;
892 ULONG fDisableDefaultMainClientPrinter;
895 ULONG fInheritShadowSettings;
896 ULONG ShadowSettings;
897 ULONG TimeoutSettingsConnection;
898 ULONG TimeoutSettingsDisconnection;
899 ULONG TimeoutSettingsIdle;
901 ULONG MinEncryptionLevel;
902 ULONG UserAuthentication;
903 CHAR Comment[WTS_COMMENT_LENGTH + 1];
904 CHAR LogonUserName[USERNAME_LENGTH + 1];
905 CHAR LogonDomain[DOMAIN_LENGTH + 1];
906 CHAR WorkDirectory[MAX_PATH + 1];
907 CHAR InitialProgram[MAX_PATH + 1];
911#define WTS_SERVER_INFO WTS_SERVER_INFOW
912#define PWTS_SERVER_INFO PWTS_SERVER_INFOW
913#define WTS_SESSION_INFO WTS_SESSION_INFOW
914#define PWTS_SESSION_INFO PWTS_SESSION_INFOW
915#define WTS_SESSION_INFO_1 WTS_SESSION_INFO_1W
916#define PWTS_SESSION_INFO_1 PWTS_SESSION_INFO_1W
917#define WTS_PROCESS_INFO WTS_PROCESS_INFOW
918#define PWTS_PROCESS_INFO PWTS_PROCESS_INFOW
919#define WTSCONFIGINFO WTSCONFIGINFOW
920#define PWTSCONFIGINFO PWTSCONFIGINFOW
921#define WTSINFO WTSINFOW
922#define PWTSINFO PWTSINFOW
923#define WTSINFOEX WTSINFOEXW
924#define PWTSINFOEX PWTSINFOEXW
925#define WTSINFOEX_LEVEL WTSINFOEX_LEVEL_W
926#define PWTSINFOEX_LEVEL PWTSINFOEX_LEVEL_W
927#define WTSINFOEX_LEVEL1 WTSINFOEX_LEVEL1_W
928#define PWTSINFOEX_LEVEL1 PWTSINFOEX_LEVEL1_W
929#define WTSCLIENT WTSCLIENTW
930#define PWTSCLIENT PWTSCLIENTW
931#define PRODUCT_INFO PRODUCT_INFOW
932#define WTS_VALIDATION_INFORMATION WTS_VALIDATION_INFORMATIONW
933#define PWTS_VALIDATION_INFORMATION PWTS_VALIDATION_INFORMATIONW
934#define WTSUSERCONFIG WTSUSERCONFIGW
935#define PWTSUSERCONFIG PWTSUSERCONFIGW
936#define WTS_PROCESS_INFO_EX WTS_PROCESS_INFO_EXW
937#define PWTS_PROCESS_INFO_EX PWTS_PROCESS_INFO_EXW
938#define WTSLISTENERNAME WTSLISTENERNAMEW
939#define PWTSLISTENERNAME PWTSLISTENERNAMEW
940#define WTSLISTENERCONFIG WTSLISTENERCONFIGW
941#define PWTSLISTENERCONFIG PWTSLISTENERCONFIGW
943#define WTS_SERVER_INFO WTS_SERVER_INFOA
944#define PWTS_SERVER_INFO PWTS_SERVER_INFOA
945#define WTS_SESSION_INFO WTS_SESSION_INFOA
946#define PWTS_SESSION_INFO PWTS_SESSION_INFOA
947#define WTS_SESSION_INFO_1 WTS_SESSION_INFO_1A
948#define PWTS_SESSION_INFO_1 PWTS_SESSION_INFO_1A
949#define WTS_PROCESS_INFO WTS_PROCESS_INFOA
950#define PWTS_PROCESS_INFO PWTS_PROCESS_INFOA
951#define WTSCONFIGINFO WTSCONFIGINFOA
952#define PWTSCONFIGINFO PWTSCONFIGINFOA
953#define WTSINFO WTSINFOA
954#define PWTSINFO PWTSINFOA
955#define WTSINFOEX WTSINFOEXA
956#define PWTSINFOEX PWTSINFOEXA
957#define WTSINFOEX_LEVEL WTSINFOEX_LEVEL_A
958#define PWTSINFOEX_LEVEL PWTSINFOEX_LEVEL_A
959#define WTSINFOEX_LEVEL1 WTSINFOEX_LEVEL1_A
960#define PWTSINFOEX_LEVEL1 PWTSINFOEX_LEVEL1_A
961#define WTSCLIENT WTSCLIENTA
962#define PWTSCLIENT PWTSCLIENTA
963#define PRODUCT_INFO PRODUCT_INFOA
964#define WTS_VALIDATION_INFORMATION WTS_VALIDATION_INFORMATIONA
965#define PWTS_VALIDATION_INFORMATION PWTS_VALIDATION_INFORMATIONA
966#define WTSUSERCONFIG WTSUSERCONFIGA
967#define PWTSUSERCONFIG PWTSUSERCONFIGA
968#define WTS_PROCESS_INFO_EX WTS_PROCESS_INFO_EXA
969#define PWTS_PROCESS_INFO_EX PWTS_PROCESS_INFO_EXA
970#define WTSLISTENERNAME WTSLISTENERNAMEA
971#define PWTSLISTENERNAME PWTSLISTENERNAMEA
972#define WTSLISTENERCONFIG WTSLISTENERCONFIGA
973#define PWTSLISTENERCONFIG PWTSLISTENERCONFIGA
976#define REMOTECONTROL_FLAG_DISABLE_KEYBOARD 0x00000001
977#define REMOTECONTROL_FLAG_DISABLE_MOUSE 0x00000002
978#define REMOTECONTROL_FLAG_DISABLE_INPUT \
979 REMOTECONTROL_FLAG_DISABLE_KEYBOARD | REMOTECONTROL_FLAG_DISABLE_MOUSE
986 WINPR_API BOOL WINAPI WTSStopRemoteControlSession(ULONG LogonId);
988 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionW(LPWSTR pTargetServerName,
989 ULONG TargetLogonId, BYTE HotkeyVk,
990 USHORT HotkeyModifiers);
991 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionA(LPSTR pTargetServerName,
992 ULONG TargetLogonId, BYTE HotkeyVk,
993 USHORT HotkeyModifiers);
995 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionExW(LPWSTR pTargetServerName,
996 ULONG TargetLogonId, BYTE HotkeyVk,
997 USHORT HotkeyModifiers, DWORD flags);
998 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionExA(LPSTR pTargetServerName,
999 ULONG TargetLogonId, BYTE HotkeyVk,
1000 USHORT HotkeyModifiers, DWORD flags);
1002 WINPR_API BOOL WINAPI WTSConnectSessionW(ULONG LogonId, ULONG TargetLogonId, PWSTR pPassword,
1004 WINPR_API BOOL WINAPI WTSConnectSessionA(ULONG LogonId, ULONG TargetLogonId, PSTR pPassword,
1007 WINPR_API BOOL WINAPI WTSEnumerateServersW(LPWSTR pDomainName, DWORD Reserved, DWORD Version,
1009 WINPR_API BOOL WINAPI WTSEnumerateServersA(LPSTR pDomainName, DWORD Reserved, DWORD Version,
1012 WINPR_API VOID WINAPI WTSCloseServer(HANDLE hServer);
1014 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1015 WINPR_ATTR_NODISCARD
1016 WINPR_API HANDLE WINAPI WTSOpenServerW(LPWSTR pServerName);
1018 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1019 WINPR_ATTR_NODISCARD
1020 WINPR_API HANDLE WINAPI WTSOpenServerA(LPSTR pServerName);
1022 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1023 WINPR_ATTR_NODISCARD
1024 WINPR_API HANDLE WINAPI WTSOpenServerExW(LPWSTR pServerName);
1026 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1027 WINPR_ATTR_NODISCARD
1028 WINPR_API HANDLE WINAPI WTSOpenServerExA(LPSTR pServerName);
1030 WINPR_API BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version,
1032 WINPR_API BOOL WINAPI WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved, DWORD Version,
1035 WINPR_API BOOL WINAPI WTSEnumerateSessionsExW(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1038 WINPR_API BOOL WINAPI WTSEnumerateSessionsExA(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1042 WINPR_API BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version,
1044 WINPR_API BOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version,
1047 WINPR_API BOOL WINAPI WTSTerminateProcess(HANDLE hServer, DWORD ProcessId, DWORD ExitCode);
1049 WINPR_API BOOL WINAPI WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId,
1050 WTS_INFO_CLASS WTSInfoClass, LPWSTR* ppBuffer,
1051 DWORD* pBytesReturned);
1052 WINPR_API BOOL WINAPI WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId,
1053 WTS_INFO_CLASS WTSInfoClass, LPSTR* ppBuffer,
1054 DWORD* pBytesReturned);
1056 WINPR_API BOOL WINAPI WTSQueryUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
1057 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer,
1058 DWORD* pBytesReturned);
1059 WINPR_API BOOL WINAPI WTSQueryUserConfigA(LPSTR pServerName, LPSTR pUserName,
1060 WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer,
1061 DWORD* pBytesReturned);
1063 WINPR_API BOOL WINAPI WTSSetUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
1064 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
1066 WINPR_API BOOL WINAPI WTSSetUserConfigA(LPSTR pServerName, LPSTR pUserName,
1067 WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
1070 WINPR_API BOOL WINAPI WTSSendMessageW(HANDLE hServer, DWORD SessionId, LPWSTR pTitle,
1071 DWORD TitleLength, LPWSTR pMessage, DWORD MessageLength,
1072 DWORD Style, DWORD Timeout, DWORD* pResponse, BOOL bWait);
1073 WINPR_API BOOL WINAPI WTSSendMessageA(HANDLE hServer, DWORD SessionId, LPSTR pTitle,
1074 DWORD TitleLength, LPSTR pMessage, DWORD MessageLength,
1075 DWORD Style, DWORD Timeout, DWORD* pResponse, BOOL bWait);
1077 WINPR_API BOOL WINAPI WTSDisconnectSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
1079 WINPR_API BOOL WINAPI WTSLogoffSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
1081 WINPR_API BOOL WINAPI WTSShutdownSystem(HANDLE hServer, DWORD ShutdownFlag);
1083 WINPR_API BOOL WINAPI WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags);
1085 WINPR_API BOOL WINAPI WTSVirtualChannelClose(HANDLE hChannelHandle);
1087 WINPR_ATTR_MALLOC(WTSVirtualChannelClose, 1)
1088 WINPR_ATTR_NODISCARD
1089 WINPR_API HANDLE WINAPI WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId,
1090 LPSTR pVirtualName);
1092 WINPR_ATTR_MALLOC(WTSVirtualChannelClose, 1)
1093 WINPR_ATTR_NODISCARD
1094 WINPR_API HANDLE WINAPI WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName,
1097 WINPR_API BOOL WINAPI WTSVirtualChannelRead(HANDLE hChannelHandle, ULONG TimeOut, PCHAR Buffer,
1098 ULONG BufferSize, PULONG pBytesRead);
1100 WINPR_API BOOL WINAPI WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer, ULONG Length,
1101 PULONG pBytesWritten);
1103 WINPR_API BOOL WINAPI WTSVirtualChannelPurgeInput(HANDLE hChannelHandle);
1105 WINPR_API BOOL WINAPI WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle);
1107 WINPR_API BOOL WINAPI WTSVirtualChannelQuery(HANDLE hChannelHandle,
1108 WTS_VIRTUAL_CLASS WtsVirtualClass, PVOID* ppBuffer,
1109 DWORD* pBytesReturned);
1111 WINPR_API VOID WINAPI WTSFreeMemory(PVOID pMemory);
1113 WINPR_API BOOL WINAPI WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);
1115 WINPR_API BOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd);
1117 WINPR_API BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd,
1120 WINPR_API BOOL WINAPI WTSUnRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd);
1122 WINPR_API BOOL WINAPI WTSQueryUserToken(ULONG SessionId, PHANDLE phToken);
1124 WINPR_API BOOL WINAPI WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1125 ULONG NumberOfEntries);
1126 WINPR_API BOOL WINAPI WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1127 ULONG NumberOfEntries);
1129 WINPR_API BOOL WINAPI WTSEnumerateProcessesExW(HANDLE hServer, DWORD* pLevel, DWORD SessionId,
1130 LPWSTR* ppProcessInfo, DWORD* pCount);
1131 WINPR_API BOOL WINAPI WTSEnumerateProcessesExA(HANDLE hServer, DWORD* pLevel, DWORD SessionId,
1132 LPSTR* ppProcessInfo, DWORD* pCount);
1134 WINPR_API BOOL WINAPI WTSEnumerateListenersW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1135 PWTSLISTENERNAMEW pListeners, DWORD* pCount);
1136 WINPR_API BOOL WINAPI WTSEnumerateListenersA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1137 PWTSLISTENERNAMEA pListeners, DWORD* pCount);
1139 WINPR_API BOOL WINAPI WTSQueryListenerConfigW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1140 LPWSTR pListenerName,
1142 WINPR_API BOOL WINAPI WTSQueryListenerConfigA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1145 WINPR_API BOOL WINAPI WTSCreateListenerW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1148 WINPR_API BOOL WINAPI WTSCreateListenerA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1152 WINPR_API BOOL WINAPI WTSSetListenerSecurityW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1153 LPWSTR pListenerName,
1154 SECURITY_INFORMATION SecurityInformation,
1155 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1156 WINPR_API BOOL WINAPI WTSSetListenerSecurityA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1157 LPSTR pListenerName,
1158 SECURITY_INFORMATION SecurityInformation,
1159 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1161 WINPR_API BOOL WINAPI WTSGetListenerSecurityW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1162 LPWSTR pListenerName,
1163 SECURITY_INFORMATION SecurityInformation,
1164 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1165 DWORD nLength, LPDWORD lpnLengthNeeded);
1166 WINPR_API BOOL WINAPI WTSGetListenerSecurityA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1167 LPSTR pListenerName,
1168 SECURITY_INFORMATION SecurityInformation,
1169 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1170 DWORD nLength, LPDWORD lpnLengthNeeded);
1178 WINPR_API BOOL CDECL WTSEnableChildSessions(BOOL bEnable);
1180 WINPR_API BOOL CDECL WTSIsChildSessionsEnabled(PBOOL pbEnabled);
1182 WINPR_API BOOL CDECL WTSGetChildSessionId(PULONG pSessionId);
1184 WINPR_API BOOL CDECL WTSLogonUser(HANDLE hServer, LPCSTR username, LPCSTR password,
1187 WINPR_API BOOL CDECL WTSLogoffUser(HANDLE hServer);
1194#define WTSStartRemoteControlSession WTSStartRemoteControlSessionW
1195#define WTSStartRemoteControlSessionEx WTSStartRemoteControlSessionExW
1196#define WTSConnectSession WTSConnectSessionW
1197#define WTSEnumerateServers WTSEnumerateServersW
1198#define WTSOpenServer WTSOpenServerW
1199#define WTSOpenServerEx WTSOpenServerExW
1200#define WTSEnumerateSessions WTSEnumerateSessionsW
1201#define WTSEnumerateSessionsEx WTSEnumerateSessionsExW
1202#define WTSEnumerateProcesses WTSEnumerateProcessesW
1203#define WTSQuerySessionInformation WTSQuerySessionInformationW
1204#define WTSQueryUserConfig WTSQueryUserConfigW
1205#define WTSSetUserConfig WTSSetUserConfigW
1206#define WTSSendMessage WTSSendMessageW
1207#define WTSFreeMemoryEx WTSFreeMemoryExW
1208#define WTSEnumerateProcessesEx WTSEnumerateProcessesExW
1209#define WTSEnumerateListeners WTSEnumerateListenersW
1210#define WTSQueryListenerConfig WTSQueryListenerConfigW
1211#define WTSCreateListener WTSCreateListenerW
1212#define WTSSetListenerSecurity WTSSetListenerSecurityW
1213#define WTSGetListenerSecurity WTSGetListenerSecurityW
1215#define WTSStartRemoteControlSession WTSStartRemoteControlSessionA
1216#define WTSStartRemoteControlSessionEx WTSStartRemoteControlSessionExA
1217#define WTSConnectSession WTSConnectSessionA
1218#define WTSEnumerateServers WTSEnumerateServersA
1219#define WTSOpenServer WTSOpenServerA
1220#define WTSOpenServerEx WTSOpenServerExA
1221#define WTSEnumerateSessions WTSEnumerateSessionsA
1222#define WTSEnumerateSessionsEx WTSEnumerateSessionsExA
1223#define WTSEnumerateProcesses WTSEnumerateProcessesA
1224#define WTSQuerySessionInformation WTSQuerySessionInformationA
1225#define WTSQueryUserConfig WTSQueryUserConfigA
1226#define WTSSetUserConfig WTSSetUserConfigA
1227#define WTSSendMessage WTSSendMessageA
1228#define WTSFreeMemoryEx WTSFreeMemoryExA
1229#define WTSEnumerateProcessesEx WTSEnumerateProcessesExA
1230#define WTSEnumerateListeners WTSEnumerateListenersA
1231#define WTSQueryListenerConfig WTSQueryListenerConfigA
1232#define WTSCreateListener WTSCreateListenerA
1233#define WTSSetListenerSecurity WTSSetListenerSecurityA
1234#define WTSGetListenerSecurity WTSGetListenerSecurityA
1246WINPR_API DWORD WINAPI WTSGetActiveConsoleSessionId(
void);
1250typedef BOOL(WINAPI* WTS_STOP_REMOTE_CONTROL_SESSION_FN)(ULONG LogonId);
1252typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_FN_W)(LPWSTR pTargetServerName,
1253 ULONG TargetLogonId, BYTE HotkeyVk,
1254 USHORT HotkeyModifiers);
1255typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_FN_A)(LPSTR pTargetServerName,
1256 ULONG TargetLogonId, BYTE HotkeyVk,
1257 USHORT HotkeyModifiers);
1259typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_EX_FN_W)(LPWSTR pTargetServerName,
1260 ULONG TargetLogonId, BYTE HotkeyVk,
1261 USHORT HotkeyModifiers, DWORD flags);
1262typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_EX_FN_A)(LPSTR pTargetServerName,
1263 ULONG TargetLogonId, BYTE HotkeyVk,
1264 USHORT HotkeyModifiers, DWORD flags);
1266typedef BOOL(WINAPI* WTS_CONNECT_SESSION_FN_W)(ULONG LogonId, ULONG TargetLogonId, PWSTR pPassword,
1268typedef BOOL(WINAPI* WTS_CONNECT_SESSION_FN_A)(ULONG LogonId, ULONG TargetLogonId, PSTR pPassword,
1271typedef BOOL(WINAPI* WTS_ENUMERATE_SERVERS_FN_W)(LPWSTR pDomainName, DWORD Reserved, DWORD Version,
1273typedef BOOL(WINAPI* WTS_ENUMERATE_SERVERS_FN_A)(LPSTR pDomainName, DWORD Reserved, DWORD Version,
1276typedef HANDLE(WINAPI* WTS_OPEN_SERVER_FN_W)(LPWSTR pServerName);
1277typedef HANDLE(WINAPI* WTS_OPEN_SERVER_FN_A)(LPSTR pServerName);
1279typedef HANDLE(WINAPI* WTS_OPEN_SERVER_EX_FN_W)(LPWSTR pServerName);
1280typedef HANDLE(WINAPI* WTS_OPEN_SERVER_EX_FN_A)(LPSTR pServerName);
1282typedef VOID(WINAPI* WTS_CLOSE_SERVER_FN)(HANDLE hServer);
1284typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_FN_W)(HANDLE hServer, DWORD Reserved, DWORD Version,
1286typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_FN_A)(HANDLE hServer, DWORD Reserved, DWORD Version,
1289typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_EX_FN_W)(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1292typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_EX_FN_A)(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1296typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_FN_W)(HANDLE hServer, DWORD Reserved, DWORD Version,
1299typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_FN_A)(HANDLE hServer, DWORD Reserved, DWORD Version,
1303typedef BOOL(WINAPI* WTS_TERMINATE_PROCESS_FN)(HANDLE hServer, DWORD ProcessId, DWORD ExitCode);
1305typedef BOOL(WINAPI* WTS_QUERY_SESSION_INFORMATION_FN_W)(HANDLE hServer, DWORD SessionId,
1306 WTS_INFO_CLASS WTSInfoClass,
1307 LPWSTR* ppBuffer, DWORD* pBytesReturned);
1308typedef BOOL(WINAPI* WTS_QUERY_SESSION_INFORMATION_FN_A)(HANDLE hServer, DWORD SessionId,
1309 WTS_INFO_CLASS WTSInfoClass,
1310 LPSTR* ppBuffer, DWORD* pBytesReturned);
1312typedef BOOL(WINAPI* WTS_QUERY_USER_CONFIG_FN_W)(LPWSTR pServerName, LPWSTR pUserName,
1313 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer,
1314 DWORD* pBytesReturned);
1315typedef BOOL(WINAPI* WTS_QUERY_USER_CONFIG_FN_A)(LPSTR pServerName, LPSTR pUserName,
1316 WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer,
1317 DWORD* pBytesReturned);
1319typedef BOOL(WINAPI* WTS_SET_USER_CONFIG_FN_W)(LPWSTR pServerName, LPWSTR pUserName,
1320 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
1322typedef BOOL(WINAPI* WTS_SET_USER_CONFIG_FN_A)(LPSTR pServerName, LPSTR pUserName,
1323 WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
1326typedef BOOL(WINAPI* WTS_SEND_MESSAGE_FN_W)(HANDLE hServer, DWORD SessionId, LPWSTR pTitle,
1327 DWORD TitleLength, LPWSTR pMessage, DWORD MessageLength,
1328 DWORD Style, DWORD Timeout, DWORD* pResponse,
1330typedef BOOL(WINAPI* WTS_SEND_MESSAGE_FN_A)(HANDLE hServer, DWORD SessionId, LPSTR pTitle,
1331 DWORD TitleLength, LPSTR pMessage, DWORD MessageLength,
1332 DWORD Style, DWORD Timeout, DWORD* pResponse,
1335typedef BOOL(WINAPI* WTS_DISCONNECT_SESSION_FN)(HANDLE hServer, DWORD SessionId, BOOL bWait);
1337typedef BOOL(WINAPI* WTS_LOGOFF_SESSION_FN)(HANDLE hServer, DWORD SessionId, BOOL bWait);
1339typedef BOOL(WINAPI* WTS_SHUTDOWN_SYSTEM_FN)(HANDLE hServer, DWORD ShutdownFlag);
1341typedef BOOL(WINAPI* WTS_WAIT_SYSTEM_EVENT_FN)(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags);
1343typedef HANDLE(WINAPI* WTS_VIRTUAL_CHANNEL_OPEN_FN)(HANDLE hServer, DWORD SessionId,
1344 LPSTR pVirtualName);
1346typedef HANDLE(WINAPI* WTS_VIRTUAL_CHANNEL_OPEN_EX_FN)(DWORD SessionId, LPSTR pVirtualName,
1349typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_CLOSE_FN)(HANDLE hChannelHandle);
1351typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_READ_FN)(HANDLE hChannelHandle, ULONG TimeOut,
1352 PCHAR Buffer, ULONG BufferSize,
1355typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_WRITE_FN)(HANDLE hChannelHandle, PCHAR Buffer,
1356 ULONG Length, PULONG pBytesWritten);
1358typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_PURGE_INPUT_FN)(HANDLE hChannelHandle);
1360typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_PURGE_OUTPUT_FN)(HANDLE hChannelHandle);
1362typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_QUERY_FN)(HANDLE hChannelHandle,
1363 WTS_VIRTUAL_CLASS WtsVirtualClass,
1364 PVOID* ppBuffer, DWORD* pBytesReturned);
1366typedef VOID(WINAPI* WTS_FREE_MEMORY_FN)(PVOID pMemory);
1368typedef BOOL(WINAPI* WTS_REGISTER_SESSION_NOTIFICATION_FN)(HWND hWnd, DWORD dwFlags);
1370typedef BOOL(WINAPI* WTS_UNREGISTER_SESSION_NOTIFICATION_FN)(HWND hWnd);
1372typedef BOOL(WINAPI* WTS_REGISTER_SESSION_NOTIFICATION_EX_FN)(HANDLE hServer, HWND hWnd,
1375typedef BOOL(WINAPI* WTS_UNREGISTER_SESSION_NOTIFICATION_EX_FN)(HANDLE hServer, HWND hWnd);
1377typedef BOOL(WINAPI* WTS_QUERY_USER_TOKEN_FN)(ULONG SessionId, PHANDLE phToken);
1379typedef BOOL(WINAPI* WTS_FREE_MEMORY_EX_FN_W)(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1380 ULONG NumberOfEntries);
1381typedef BOOL(WINAPI* WTS_FREE_MEMORY_EX_FN_A)(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1382 ULONG NumberOfEntries);
1384typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_EX_FN_W)(HANDLE hServer, DWORD* pLevel,
1385 DWORD SessionId, LPWSTR* ppProcessInfo,
1387typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_EX_FN_A)(HANDLE hServer, DWORD* pLevel,
1388 DWORD SessionId, LPSTR* ppProcessInfo,
1391typedef BOOL(WINAPI* WTS_ENUMERATE_LISTENERS_FN_W)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1392 PWTSLISTENERNAMEW pListeners, DWORD* pCount);
1393typedef BOOL(WINAPI* WTS_ENUMERATE_LISTENERS_FN_A)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1394 PWTSLISTENERNAMEA pListeners, DWORD* pCount);
1396typedef BOOL(WINAPI* WTS_QUERY_LISTENER_CONFIG_FN_W)(HANDLE hServer, PVOID pReserved,
1397 DWORD Reserved, LPWSTR pListenerName,
1399typedef BOOL(WINAPI* WTS_QUERY_LISTENER_CONFIG_FN_A)(HANDLE hServer, PVOID pReserved,
1400 DWORD Reserved, LPSTR pListenerName,
1403typedef BOOL(WINAPI* WTS_CREATE_LISTENER_FN_W)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1406typedef BOOL(WINAPI* WTS_CREATE_LISTENER_FN_A)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1410typedef BOOL(WINAPI* WTS_SET_LISTENER_SECURITY_FN_W)(HANDLE hServer, PVOID pReserved,
1411 DWORD Reserved, LPWSTR pListenerName,
1412 SECURITY_INFORMATION SecurityInformation,
1413 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1414typedef BOOL(WINAPI* WTS_SET_LISTENER_SECURITY_FN_A)(HANDLE hServer, PVOID pReserved,
1415 DWORD Reserved, LPSTR pListenerName,
1416 SECURITY_INFORMATION SecurityInformation,
1417 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1419typedef BOOL(WINAPI* WTS_GET_LISTENER_SECURITY_FN_W)(HANDLE hServer, PVOID pReserved,
1420 DWORD Reserved, LPWSTR pListenerName,
1421 SECURITY_INFORMATION SecurityInformation,
1422 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1423 DWORD nLength, LPDWORD lpnLengthNeeded);
1424typedef BOOL(WINAPI* WTS_GET_LISTENER_SECURITY_FN_A)(HANDLE hServer, PVOID pReserved,
1425 DWORD Reserved, LPSTR pListenerName,
1426 SECURITY_INFORMATION SecurityInformation,
1427 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1428 DWORD nLength, LPDWORD lpnLengthNeeded);
1430typedef BOOL(CDECL* WTS_ENABLE_CHILD_SESSIONS_FN)(BOOL bEnable);
1432typedef BOOL(CDECL* WTS_IS_CHILD_SESSIONS_ENABLED_FN)(PBOOL pbEnabled);
1434typedef BOOL(CDECL* WTS_GET_CHILD_SESSION_ID_FN)(PULONG pSessionId);
1436typedef DWORD(WINAPI* WTS_GET_ACTIVE_CONSOLE_SESSION_ID_FN)(void);
1438typedef BOOL(WINAPI* WTS_LOGON_USER_FN)(HANDLE hServer, LPCSTR username, LPCSTR password,
1441typedef BOOL(WINAPI* WTS_LOGOFF_USER_FN)(HANDLE hServer);
1448 WTS_STOP_REMOTE_CONTROL_SESSION_FN pStopRemoteControlSession;
1449 WTS_START_REMOTE_CONTROL_SESSION_FN_W pStartRemoteControlSessionW;
1450 WTS_START_REMOTE_CONTROL_SESSION_FN_A pStartRemoteControlSessionA;
1451 WTS_CONNECT_SESSION_FN_W pConnectSessionW;
1452 WTS_CONNECT_SESSION_FN_A pConnectSessionA;
1453 WTS_ENUMERATE_SERVERS_FN_W pEnumerateServersW;
1454 WTS_ENUMERATE_SERVERS_FN_A pEnumerateServersA;
1455 WTS_OPEN_SERVER_FN_W pOpenServerW;
1456 WTS_OPEN_SERVER_FN_A pOpenServerA;
1457 WTS_OPEN_SERVER_EX_FN_W pOpenServerExW;
1458 WTS_OPEN_SERVER_EX_FN_A pOpenServerExA;
1459 WTS_CLOSE_SERVER_FN pCloseServer;
1460 WTS_ENUMERATE_SESSIONS_FN_W pEnumerateSessionsW;
1461 WTS_ENUMERATE_SESSIONS_FN_A pEnumerateSessionsA;
1462 WTS_ENUMERATE_SESSIONS_EX_FN_W pEnumerateSessionsExW;
1463 WTS_ENUMERATE_SESSIONS_EX_FN_A pEnumerateSessionsExA;
1464 WTS_ENUMERATE_PROCESSES_FN_W pEnumerateProcessesW;
1465 WTS_ENUMERATE_PROCESSES_FN_A pEnumerateProcessesA;
1466 WTS_TERMINATE_PROCESS_FN pTerminateProcess;
1467 WTS_QUERY_SESSION_INFORMATION_FN_W pQuerySessionInformationW;
1468 WTS_QUERY_SESSION_INFORMATION_FN_A pQuerySessionInformationA;
1469 WTS_QUERY_USER_CONFIG_FN_W pQueryUserConfigW;
1470 WTS_QUERY_USER_CONFIG_FN_A pQueryUserConfigA;
1471 WTS_SET_USER_CONFIG_FN_W pSetUserConfigW;
1472 WTS_SET_USER_CONFIG_FN_A pSetUserConfigA;
1473 WTS_SEND_MESSAGE_FN_W pSendMessageW;
1474 WTS_SEND_MESSAGE_FN_A pSendMessageA;
1475 WTS_DISCONNECT_SESSION_FN pDisconnectSession;
1476 WTS_LOGOFF_SESSION_FN pLogoffSession;
1477 WTS_SHUTDOWN_SYSTEM_FN pShutdownSystem;
1478 WTS_WAIT_SYSTEM_EVENT_FN pWaitSystemEvent;
1479 WTS_VIRTUAL_CHANNEL_OPEN_FN pVirtualChannelOpen;
1480 WTS_VIRTUAL_CHANNEL_OPEN_EX_FN pVirtualChannelOpenEx;
1481 WTS_VIRTUAL_CHANNEL_CLOSE_FN pVirtualChannelClose;
1482 WTS_VIRTUAL_CHANNEL_READ_FN pVirtualChannelRead;
1483 WTS_VIRTUAL_CHANNEL_WRITE_FN pVirtualChannelWrite;
1484 WTS_VIRTUAL_CHANNEL_PURGE_INPUT_FN pVirtualChannelPurgeInput;
1485 WTS_VIRTUAL_CHANNEL_PURGE_OUTPUT_FN pVirtualChannelPurgeOutput;
1486 WTS_VIRTUAL_CHANNEL_QUERY_FN pVirtualChannelQuery;
1487 WTS_FREE_MEMORY_FN pFreeMemory;
1488 WTS_REGISTER_SESSION_NOTIFICATION_FN pRegisterSessionNotification;
1489 WTS_UNREGISTER_SESSION_NOTIFICATION_FN pUnRegisterSessionNotification;
1490 WTS_REGISTER_SESSION_NOTIFICATION_EX_FN pRegisterSessionNotificationEx;
1491 WTS_UNREGISTER_SESSION_NOTIFICATION_EX_FN pUnRegisterSessionNotificationEx;
1492 WTS_QUERY_USER_TOKEN_FN pQueryUserToken;
1493 WTS_FREE_MEMORY_EX_FN_W pFreeMemoryExW;
1494 WTS_FREE_MEMORY_EX_FN_A pFreeMemoryExA;
1495 WTS_ENUMERATE_PROCESSES_EX_FN_W pEnumerateProcessesExW;
1496 WTS_ENUMERATE_PROCESSES_EX_FN_A pEnumerateProcessesExA;
1497 WTS_ENUMERATE_LISTENERS_FN_W pEnumerateListenersW;
1498 WTS_ENUMERATE_LISTENERS_FN_A pEnumerateListenersA;
1499 WTS_QUERY_LISTENER_CONFIG_FN_W pQueryListenerConfigW;
1500 WTS_QUERY_LISTENER_CONFIG_FN_A pQueryListenerConfigA;
1501 WTS_CREATE_LISTENER_FN_W pCreateListenerW;
1502 WTS_CREATE_LISTENER_FN_A pCreateListenerA;
1503 WTS_SET_LISTENER_SECURITY_FN_W pSetListenerSecurityW;
1504 WTS_SET_LISTENER_SECURITY_FN_A pSetListenerSecurityA;
1505 WTS_GET_LISTENER_SECURITY_FN_W pGetListenerSecurityW;
1506 WTS_GET_LISTENER_SECURITY_FN_A pGetListenerSecurityA;
1507 WTS_ENABLE_CHILD_SESSIONS_FN pEnableChildSessions;
1508 WTS_IS_CHILD_SESSIONS_ENABLED_FN pIsChildSessionsEnabled;
1509 WTS_GET_CHILD_SESSION_ID_FN pGetChildSessionId;
1510 WTS_GET_ACTIVE_CONSOLE_SESSION_ID_FN pGetActiveConsoleSessionId;
1511 WTS_LOGON_USER_FN pLogonUser;
1512 WTS_LOGOFF_USER_FN pLogoffUser;
1513 WTS_START_REMOTE_CONTROL_SESSION_EX_FN_W pStartRemoteControlSessionExW;
1514 WTS_START_REMOTE_CONTROL_SESSION_EX_FN_A pStartRemoteControlSessionExA;
1526 WINPR_API
const CHAR* WTSErrorToString(UINT error);
1527 WINPR_API
const CHAR* WTSSessionStateToString(WTS_CONNECTSTATE_CLASS state);
1533WINPR_PRAGMA_DIAG_POP