FreeRDP
Loading...
Searching...
No Matches
wtsapi.h
1
22#ifndef WINPR_WTSAPI_H
23#define WINPR_WTSAPI_H
24
25#include <winpr/winpr.h>
26#include <winpr/wtypes.h>
27
28#include <winpr/file.h>
29
30#define CHANNEL_CHUNK_MAX_LENGTH 16256
31
32WINPR_PRAGMA_DIAG_PUSH
33WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
34
35#ifdef _WIN32
36
37#define CurrentTime _CurrentTime /* Workaround for X11 "CurrentTime" header conflict */
38
39#endif
40
41#if defined(_WIN32) && !defined(_UWP)
42
43#include <pchannel.h>
44
45#else
46
51#define CHANNEL_CHUNK_LENGTH 1600
52
53#define CHANNEL_PDU_LENGTH (CHANNEL_CHUNK_LENGTH + sizeof(CHANNEL_PDU_HEADER))
54
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
60
61#define CHANNEL_OPTION_INITIALIZED 0x80000000
62
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
73
74#define CHANNEL_MAX_COUNT 31
75#define CHANNEL_NAME_LEN 7
76
77typedef struct tagCHANNEL_DEF
78{
79 char name[CHANNEL_NAME_LEN + 1];
80 ULONG options;
84
85typedef struct tagCHANNEL_PDU_HEADER
86{
87 UINT32 length;
88 UINT32 flags;
89} CHANNEL_PDU_HEADER, *PCHANNEL_PDU_HEADER;
90
91#endif /* _WIN32 */
92
97#ifndef CHANNEL_FLAG_SHOW_PROTOCOL
98#define CHANNEL_FLAG_SHOW_PROTOCOL 0x10
99#endif
100#ifndef CHANNEL_FLAG_SUSPEND
101#define CHANNEL_FLAG_SUSPEND 0x20
102#endif
103#ifndef CHANNEL_FLAG_RESUME
104#define CHANNEL_FLAG_RESUME 0x40
105#endif
106#ifndef CHANNEL_FLAG_SHADOW_PERSISTENT
107#define CHANNEL_FLAG_SHADOW_PERSISTENT 0x80
108#endif
109
110#if !defined(_WIN32) || !defined(H_CCHANNEL)
111
116#ifdef _WIN32
117#define VCAPITYPE __stdcall
118#define VCEXPORT
119#else
120#define VCAPITYPE CALLBACK
121#define VCEXPORT __export
122#endif
123
124typedef VOID VCAPITYPE CHANNEL_INIT_EVENT_FN(LPVOID pInitHandle, UINT event, LPVOID pData,
125 UINT dataLength);
126
127typedef CHANNEL_INIT_EVENT_FN* PCHANNEL_INIT_EVENT_FN;
128
129typedef VOID VCAPITYPE CHANNEL_INIT_EVENT_EX_FN(LPVOID lpUserParam, LPVOID pInitHandle, UINT event,
130 LPVOID pData, UINT dataLength);
131
132typedef CHANNEL_INIT_EVENT_EX_FN* PCHANNEL_INIT_EVENT_EX_FN;
133
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
146
147typedef VOID VCAPITYPE CHANNEL_OPEN_EVENT_FN(DWORD openHandle, UINT event, LPVOID pData,
148 UINT32 dataLength, UINT32 totalLength,
149 UINT32 dataFlags);
150
151typedef CHANNEL_OPEN_EVENT_FN* PCHANNEL_OPEN_EVENT_FN;
152
153typedef VOID VCAPITYPE CHANNEL_OPEN_EVENT_EX_FN(LPVOID lpUserParam, DWORD openHandle, UINT event,
154 LPVOID pData, UINT32 dataLength, UINT32 totalLength,
155 UINT32 dataFlags);
156
157typedef CHANNEL_OPEN_EVENT_EX_FN* PCHANNEL_OPEN_EVENT_EX_FN;
158
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
180
181#define VIRTUAL_CHANNEL_VERSION_WIN2000 1
182
183typedef UINT VCAPITYPE VIRTUALCHANNELINIT(LPVOID* ppInitHandle, PCHANNEL_DEF pChannel,
184 INT channelCount, ULONG versionRequested,
185 PCHANNEL_INIT_EVENT_FN pChannelInitEventProc);
186
187typedef VIRTUALCHANNELINIT* PVIRTUALCHANNELINIT;
188
189typedef UINT VCAPITYPE VIRTUALCHANNELINITEX(LPVOID lpUserParam, LPVOID clientContext,
190 LPVOID pInitHandle, PCHANNEL_DEF pChannel,
191 INT channelCount, ULONG versionRequested,
192 PCHANNEL_INIT_EVENT_EX_FN pChannelInitEventProcEx);
193
194typedef VIRTUALCHANNELINITEX* PVIRTUALCHANNELINITEX;
195
196typedef UINT VCAPITYPE VIRTUALCHANNELOPEN(LPVOID pInitHandle, LPDWORD pOpenHandle,
197 PCHAR pChannelName,
198 PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc);
199
200typedef VIRTUALCHANNELOPEN* PVIRTUALCHANNELOPEN;
201
202typedef UINT VCAPITYPE VIRTUALCHANNELOPENEX(LPVOID pInitHandle, LPDWORD pOpenHandle,
203 PCHAR pChannelName,
204 PCHANNEL_OPEN_EVENT_EX_FN pChannelOpenEventProcEx);
205
206typedef VIRTUALCHANNELOPENEX* PVIRTUALCHANNELOPENEX;
207
208typedef UINT VCAPITYPE VIRTUALCHANNELCLOSE(DWORD openHandle);
209
210typedef VIRTUALCHANNELCLOSE* PVIRTUALCHANNELCLOSE;
211
212typedef UINT VCAPITYPE VIRTUALCHANNELCLOSEEX(LPVOID pInitHandle, DWORD openHandle);
213
214typedef VIRTUALCHANNELCLOSEEX* PVIRTUALCHANNELCLOSEEX;
215
216typedef UINT VCAPITYPE VIRTUALCHANNELWRITE(DWORD openHandle, LPVOID pData, ULONG dataLength,
217 LPVOID pUserData);
218
219typedef VIRTUALCHANNELWRITE* PVIRTUALCHANNELWRITE;
220
221typedef UINT VCAPITYPE VIRTUALCHANNELWRITEEX(LPVOID pInitHandle, DWORD openHandle, LPVOID pData,
222 ULONG dataLength, LPVOID pUserData);
223
224typedef VIRTUALCHANNELWRITEEX* PVIRTUALCHANNELWRITEEX;
225
226typedef struct tagCHANNEL_ENTRY_POINTS
227{
228 DWORD cbSize;
229 DWORD protocolVersion;
230 WINPR_ATTR_NODISCARD PVIRTUALCHANNELINIT pVirtualChannelInit;
231 WINPR_ATTR_NODISCARD PVIRTUALCHANNELOPEN pVirtualChannelOpen;
232 WINPR_ATTR_NODISCARD PVIRTUALCHANNELCLOSE pVirtualChannelClose;
233 WINPR_ATTR_NODISCARD PVIRTUALCHANNELWRITE pVirtualChannelWrite;
234} CHANNEL_ENTRY_POINTS, *PCHANNEL_ENTRY_POINTS;
235
236typedef struct tagCHANNEL_ENTRY_POINTS_EX
237{
238 DWORD cbSize;
239 DWORD protocolVersion;
240 WINPR_ATTR_NODISCARD PVIRTUALCHANNELINITEX pVirtualChannelInitEx;
241 WINPR_ATTR_NODISCARD PVIRTUALCHANNELOPENEX pVirtualChannelOpenEx;
242 WINPR_ATTR_NODISCARD PVIRTUALCHANNELCLOSEEX pVirtualChannelCloseEx;
243 WINPR_ATTR_NODISCARD PVIRTUALCHANNELWRITEEX pVirtualChannelWriteEx;
244} CHANNEL_ENTRY_POINTS_EX, *PCHANNEL_ENTRY_POINTS_EX;
245
246typedef BOOL VCAPITYPE VIRTUALCHANNELENTRY(PCHANNEL_ENTRY_POINTS pEntryPoints);
247
248typedef VIRTUALCHANNELENTRY* PVIRTUALCHANNELENTRY;
249
250typedef BOOL VCAPITYPE VIRTUALCHANNELENTRYEX(PCHANNEL_ENTRY_POINTS_EX pEntryPointsEx,
251 PVOID pInitHandle);
252
253typedef VIRTUALCHANNELENTRYEX* PVIRTUALCHANNELENTRYEX;
254
255typedef HRESULT(VCAPITYPE* PFNVCAPIGETINSTANCE)(REFIID refiid, PULONG pNumObjs, PVOID* ppObjArray);
256
257#endif
258
259#if !defined(_WIN32) || !defined(_INC_WTSAPI)
260
265#define WTS_CURRENT_SERVER ((HANDLE) nullptr)
266#define WTS_CURRENT_SERVER_HANDLE ((HANDLE) nullptr)
267#define WTS_CURRENT_SERVER_NAME (nullptr)
268
269#define WTS_CURRENT_SESSION ((DWORD)-1)
270
271#define WTS_ANY_SESSION ((DWORD)-2)
272
273#define IDTIMEOUT 32000
274#define IDASYNC 32001
275
276#define USERNAME_LENGTH 20
277#define CLIENTNAME_LENGTH 20
278#define CLIENTADDRESS_LENGTH 30
279
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
285
286#define MAX_ELAPSED_TIME_LENGTH 15
287#define MAX_DATE_TIME_LENGTH 56
288#define WINSTATIONNAME_LENGTH 32
289#define DOMAIN_LENGTH 17
290
291#define WTS_DRIVE_LENGTH 3
292#define WTS_LISTENER_NAME_LENGTH 32
293#define WTS_COMMENT_LENGTH 60
294
295#define WTS_LISTENER_CREATE 0x00000001
296#define WTS_LISTENER_UPDATE 0x00000010
297
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
308
309#define WTS_SECURITY_GUEST_ACCESS (WTS_SECURITY_LOGON)
310
311#define WTS_SECURITY_CURRENT_GUEST_ACCESS (WTS_SECURITY_VIRTUAL_CHANNELS | WTS_SECURITY_LOGOFF)
312
313#define WTS_SECURITY_USER_ACCESS \
314 (WTS_SECURITY_CURRENT_GUEST_ACCESS | WTS_SECURITY_QUERY_INFORMATION | WTS_SECURITY_CONNECT)
315
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)
319
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)
324
325typedef enum
326{
327 WTSActive,
328 WTSConnected,
329 WTSConnectQuery,
330 WTSShadow,
331 WTSDisconnected,
332 WTSIdle,
333 WTSListen,
334 WTSReset,
335 WTSDown,
336 WTSInit
337} WTS_CONNECTSTATE_CLASS;
338
339typedef struct
340{
341 LPWSTR pServerName;
343
344typedef struct
345{
346 LPSTR pServerName;
348
349typedef struct
350{
351 DWORD SessionId;
352 LPWSTR pWinStationName;
353 WTS_CONNECTSTATE_CLASS State;
355
356typedef struct
357{
358 DWORD SessionId;
359 LPSTR pWinStationName;
360 WTS_CONNECTSTATE_CLASS State;
362
363typedef struct
364{
365 DWORD ExecEnvId;
366 WTS_CONNECTSTATE_CLASS State;
367 DWORD SessionId;
368 LPWSTR pSessionName;
369 LPWSTR pHostName;
370 LPWSTR pUserName;
371 LPWSTR pDomainName;
372 LPWSTR pFarmName;
374
375typedef struct
376{
377 DWORD ExecEnvId;
378 WTS_CONNECTSTATE_CLASS State;
379 DWORD SessionId;
380 LPSTR pSessionName;
381 LPSTR pHostName;
382 LPSTR pUserName;
383 LPSTR pDomainName;
384 LPSTR pFarmName;
386
387typedef struct
388{
389 DWORD SessionId;
390 DWORD ProcessId;
391 LPWSTR pProcessName;
392 PSID pUserSid;
394
395typedef struct
396{
397 DWORD SessionId;
398 DWORD ProcessId;
399 LPSTR pProcessName;
400 PSID pUserSid;
402
403#define WTS_PROTOCOL_TYPE_CONSOLE 0
404#define WTS_PROTOCOL_TYPE_ICA 1
405#define WTS_PROTOCOL_TYPE_RDP 2
406
407typedef enum
408{
409 WTSInitialProgram,
410 WTSApplicationName,
411 WTSWorkingDirectory,
412 WTSOEMId,
413 WTSSessionId,
414 WTSUserName,
415 WTSWinStationName,
416 WTSDomainName,
417 WTSConnectState,
418 WTSClientBuildNumber,
419 WTSClientName,
420 WTSClientDirectory,
421 WTSClientProductId,
422 WTSClientHardwareId,
423 WTSClientAddress,
424 WTSClientDisplay,
425 WTSClientProtocolType,
426 WTSIdleTime,
427 WTSLogonTime,
428 WTSIncomingBytes,
429 WTSOutgoingBytes,
430 WTSIncomingFrames,
431 WTSOutgoingFrames,
432 WTSClientInfo,
433 WTSSessionInfo,
434 WTSSessionInfoEx,
435 WTSConfigInfo,
436 WTSValidationInfo,
437 WTSSessionAddressV4,
438 WTSIsRemoteSession
439} WTS_INFO_CLASS;
440
441typedef struct
442{
443 ULONG version;
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];
455
456typedef struct
457{
458 ULONG version;
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];
470
471typedef struct
472{
473 WTS_CONNECTSTATE_CLASS State;
474 DWORD SessionId;
475 DWORD IncomingBytes;
476 DWORD OutgoingBytes;
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];
484 LARGE_INTEGER ConnectTime;
485 LARGE_INTEGER DisconnectTime;
486 LARGE_INTEGER LastInputTime;
487 LARGE_INTEGER LogonTime;
488 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
489 LARGE_INTEGER _CurrentTime; /* Conflicts with X11 headers */
491
492typedef struct
493{
494 WTS_CONNECTSTATE_CLASS State;
495 DWORD SessionId;
496 DWORD IncomingBytes;
497 DWORD OutgoingBytes;
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];
505 LARGE_INTEGER ConnectTime;
506 LARGE_INTEGER DisconnectTime;
507 LARGE_INTEGER LastInputTime;
508 LARGE_INTEGER LogonTime;
509 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
510 LARGE_INTEGER _CurrentTime; /* Conflicts with X11 headers */
512
513#define WTS_SESSIONSTATE_UNKNOWN 0xFFFFFFFF
514#define WTS_SESSIONSTATE_LOCK 0x00000000
515#define WTS_SESSIONSTATE_UNLOCK 0x00000001
516
517typedef struct
518{
519 ULONG SessionId;
520 WTS_CONNECTSTATE_CLASS SessionState;
521 LONG SessionFlags;
522 WCHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
523 WCHAR UserName[USERNAME_LENGTH + 1];
524 WCHAR DomainName[DOMAIN_LENGTH + 1];
525 LARGE_INTEGER LogonTime;
526 LARGE_INTEGER ConnectTime;
527 LARGE_INTEGER DisconnectTime;
528 LARGE_INTEGER LastInputTime;
529 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
530 LARGE_INTEGER _CurrentTime; /* Conflicts with X11 headers */
531 DWORD IncomingBytes;
532 DWORD OutgoingBytes;
533 DWORD IncomingFrames;
534 DWORD OutgoingFrames;
535 DWORD IncomingCompressedBytes;
536 DWORD OutgoingCompressedBytes;
538
539typedef struct
540{
541 ULONG SessionId;
542 WTS_CONNECTSTATE_CLASS SessionState;
543 LONG SessionFlags;
544 CHAR WinStationName[WINSTATIONNAME_LENGTH + 1];
545 CHAR UserName[USERNAME_LENGTH + 1];
546 CHAR DomainName[DOMAIN_LENGTH + 1];
547 LARGE_INTEGER LogonTime;
548 LARGE_INTEGER ConnectTime;
549 LARGE_INTEGER DisconnectTime;
550 LARGE_INTEGER LastInputTime;
551 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
552 LARGE_INTEGER _CurrentTime; /* Conflicts with X11 headers */
553 DWORD IncomingBytes;
554 DWORD OutgoingBytes;
555 DWORD IncomingFrames;
556 DWORD OutgoingFrames;
557 DWORD IncomingCompressedBytes;
558 DWORD OutgoingCompressedBytes;
560
561typedef union
562{
563 WTSINFOEX_LEVEL1_W WTSInfoExLevel1;
565
566typedef union
567{
568 WTSINFOEX_LEVEL1_A WTSInfoExLevel1;
570
571typedef struct
572{
573 DWORD Level;
576
577typedef struct
578{
579 DWORD Level;
582
583typedef struct
584{
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];
593 USHORT HRes;
594 USHORT VRes;
595 USHORT ColorDepth;
596 WCHAR ClientDirectory[MAX_PATH + 1];
597 ULONG ClientBuildNumber;
598 ULONG ClientHardwareId;
599 USHORT ClientProductId;
600 USHORT OutBufCountHost;
601 USHORT OutBufCountClient;
602 USHORT OutBufLength;
603 WCHAR DeviceId[MAX_PATH + 1];
605
606typedef struct
607{
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];
616 USHORT HRes;
617 USHORT VRes;
618 USHORT ColorDepth;
619 CHAR ClientDirectory[MAX_PATH + 1];
620 ULONG ClientBuildNumber;
621 ULONG ClientHardwareId;
622 USHORT ClientProductId;
623 USHORT OutBufCountHost;
624 USHORT OutBufCountClient;
625 USHORT OutBufLength;
626 CHAR DeviceId[MAX_PATH + 1];
628
629#define PRODUCTINFO_COMPANYNAME_LENGTH 256
630#define PRODUCTINFO_PRODUCTID_LENGTH 4
631
632typedef struct
633{
634 CHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
635 CHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
637
638typedef struct
639{
640 WCHAR CompanyName[PRODUCTINFO_COMPANYNAME_LENGTH];
641 WCHAR ProductID[PRODUCTINFO_PRODUCTID_LENGTH];
643
644#define VALIDATIONINFORMATION_LICENSE_LENGTH 16384
645#define VALIDATIONINFORMATION_HARDWAREID_LENGTH 20
646
647typedef struct
648{
649 PRODUCT_INFOA ProductInfo;
650 BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
651 DWORD LicenseLength;
652 BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
653 DWORD HardwareIDLength;
655
656typedef struct
657{
658 PRODUCT_INFOW ProductInfo;
659 BYTE License[VALIDATIONINFORMATION_LICENSE_LENGTH];
660 DWORD LicenseLength;
661 BYTE HardwareID[VALIDATIONINFORMATION_HARDWAREID_LENGTH];
662 DWORD HardwareIDLength;
664
665typedef struct
666{
667 DWORD AddressFamily;
668 BYTE Address[20];
670
671typedef struct
672{
673 DWORD HorizontalResolution;
674 DWORD VerticalResolution;
675 DWORD ColorDepth;
677
678typedef enum
679{
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,
699 WTSUserConfigUser
700} WTS_CONFIG_CLASS;
701
702typedef enum
703{
704 WTSUserConfigSourceSAM
705} WTS_CONFIG_SOURCE;
706
707typedef struct
708{
709 DWORD Source;
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];
728
729typedef struct
730{
731 DWORD Source;
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];
750
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
763
764#define REMOTECONTROL_KBDSHIFT_HOTKEY 0x1
765#define REMOTECONTROL_KBDCTRL_HOTKEY 0x2
766#define REMOTECONTROL_KBDALT_HOTKEY 0x4
767
768typedef enum
769{
770 WTSVirtualClientData,
771 WTSVirtualFileHandle,
772 WTSVirtualEventHandle, /* Extended */
773 WTSVirtualChannelReady, /* Extended */
774 WTSVirtualChannelOpenStatus /* Extended */
775} WTS_VIRTUAL_CLASS;
776
777typedef struct
778{
779 DWORD AddressFamily;
780 BYTE Address[20];
782
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
789
790#define NOTIFY_FOR_ALL_SESSIONS 1
791#define NOTIFY_FOR_THIS_SESSION 0
792
793#define WTS_PROCESS_INFO_LEVEL_0 0
794#define WTS_PROCESS_INFO_LEVEL_1 1
795
796typedef struct
797{
798 DWORD SessionId;
799 DWORD ProcessId;
800 LPWSTR pProcessName;
801 PSID pUserSid;
802 DWORD NumberOfThreads;
803 DWORD HandleCount;
804 DWORD PagefileUsage;
805 DWORD PeakPagefileUsage;
806 DWORD WorkingSetSize;
807 DWORD PeakWorkingSetSize;
808 LARGE_INTEGER UserTime;
809 LARGE_INTEGER KernelTime;
811
812typedef struct
813{
814 DWORD SessionId;
815 DWORD ProcessId;
816 LPSTR pProcessName;
817 PSID pUserSid;
818 DWORD NumberOfThreads;
819 DWORD HandleCount;
820 DWORD PagefileUsage;
821 DWORD PeakPagefileUsage;
822 DWORD WorkingSetSize;
823 DWORD PeakWorkingSetSize;
824 LARGE_INTEGER UserTime;
825 LARGE_INTEGER KernelTime;
827
828typedef enum
829{
830 WTSTypeProcessInfoLevel0,
831 WTSTypeProcessInfoLevel1,
832 WTSTypeSessionInfoLevel1
833} WTS_TYPE_CLASS;
834
835typedef WCHAR WTSLISTENERNAMEW[WTS_LISTENER_NAME_LENGTH + 1];
836typedef WTSLISTENERNAMEW* PWTSLISTENERNAMEW;
837typedef CHAR WTSLISTENERNAMEA[WTS_LISTENER_NAME_LENGTH + 1];
838typedef WTSLISTENERNAMEA* PWTSLISTENERNAMEA;
839
840typedef struct
841{
842 ULONG version;
843 ULONG fEnableListener;
844 ULONG MaxConnectionCount;
845 ULONG fPromptForPassword;
846 ULONG fInheritColorDepth;
847 ULONG ColorDepth;
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;
858 ULONG LanAdapter;
859 ULONG PortNumber;
860 ULONG fInheritShadowSettings;
861 ULONG ShadowSettings;
862 ULONG TimeoutSettingsConnection;
863 ULONG TimeoutSettingsDisconnection;
864 ULONG TimeoutSettingsIdle;
865 ULONG SecurityLayer;
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];
874
875typedef struct
876{
877 ULONG version;
878 ULONG fEnableListener;
879 ULONG MaxConnectionCount;
880 ULONG fPromptForPassword;
881 ULONG fInheritColorDepth;
882 ULONG ColorDepth;
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;
893 ULONG LanAdapter;
894 ULONG PortNumber;
895 ULONG fInheritShadowSettings;
896 ULONG ShadowSettings;
897 ULONG TimeoutSettingsConnection;
898 ULONG TimeoutSettingsDisconnection;
899 ULONG TimeoutSettingsIdle;
900 ULONG SecurityLayer;
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];
909
910#ifdef UNICODE
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
942#else
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
974#endif
975
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
980
981#ifdef __cplusplus
982extern "C"
983{
984#endif
985
986 WINPR_ATTR_NODISCARD
987 WINPR_API BOOL WINAPI WTSStopRemoteControlSession(ULONG LogonId);
988
989 WINPR_ATTR_NODISCARD
990 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionW(LPWSTR pTargetServerName,
991 ULONG TargetLogonId, BYTE HotkeyVk,
992 USHORT HotkeyModifiers);
993
994 WINPR_ATTR_NODISCARD
995 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionA(LPSTR pTargetServerName,
996 ULONG TargetLogonId, BYTE HotkeyVk,
997 USHORT HotkeyModifiers);
998
999 WINPR_ATTR_NODISCARD
1000 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionExW(LPWSTR pTargetServerName,
1001 ULONG TargetLogonId, BYTE HotkeyVk,
1002 USHORT HotkeyModifiers, DWORD flags);
1003
1004 WINPR_ATTR_NODISCARD
1005 WINPR_API BOOL WINAPI WTSStartRemoteControlSessionExA(LPSTR pTargetServerName,
1006 ULONG TargetLogonId, BYTE HotkeyVk,
1007 USHORT HotkeyModifiers, DWORD flags);
1008
1009 WINPR_ATTR_NODISCARD
1010 WINPR_API BOOL WINAPI WTSConnectSessionW(ULONG LogonId, ULONG TargetLogonId, PWSTR pPassword,
1011 BOOL bWait);
1012
1013 WINPR_ATTR_NODISCARD
1014 WINPR_API BOOL WINAPI WTSConnectSessionA(ULONG LogonId, ULONG TargetLogonId, PSTR pPassword,
1015 BOOL bWait);
1016
1017 WINPR_ATTR_NODISCARD
1018 WINPR_API BOOL WINAPI WTSEnumerateServersW(LPWSTR pDomainName, DWORD Reserved, DWORD Version,
1019 PWTS_SERVER_INFOW* ppServerInfo, DWORD* pCount);
1020
1021 WINPR_ATTR_NODISCARD
1022 WINPR_API BOOL WINAPI WTSEnumerateServersA(LPSTR pDomainName, DWORD Reserved, DWORD Version,
1023 PWTS_SERVER_INFOA* ppServerInfo, DWORD* pCount);
1024
1025 WINPR_API VOID WINAPI WTSCloseServer(HANDLE hServer);
1026
1027 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1028 WINPR_API HANDLE WINAPI WTSOpenServerW(LPWSTR pServerName);
1029
1030 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1031 WINPR_API HANDLE WINAPI WTSOpenServerA(LPSTR pServerName);
1032
1033 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1034 WINPR_API HANDLE WINAPI WTSOpenServerExW(LPWSTR pServerName);
1035
1036 WINPR_ATTR_MALLOC(WTSCloseServer, 1)
1037 WINPR_API HANDLE WINAPI WTSOpenServerExA(LPSTR pServerName);
1038
1039 WINPR_ATTR_NODISCARD
1040 WINPR_API BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version,
1041 PWTS_SESSION_INFOW* ppSessionInfo, DWORD* pCount);
1042
1043 WINPR_ATTR_NODISCARD
1044 WINPR_API BOOL WINAPI WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved, DWORD Version,
1045 PWTS_SESSION_INFOA* ppSessionInfo, DWORD* pCount);
1046
1047 WINPR_ATTR_NODISCARD
1048 WINPR_API BOOL WINAPI WTSEnumerateSessionsExW(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1049 PWTS_SESSION_INFO_1W* ppSessionInfo,
1050 DWORD* pCount);
1051
1052 WINPR_ATTR_NODISCARD
1053 WINPR_API BOOL WINAPI WTSEnumerateSessionsExA(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1054 PWTS_SESSION_INFO_1A* ppSessionInfo,
1055 DWORD* pCount);
1056
1057 WINPR_ATTR_NODISCARD
1058 WINPR_API BOOL WINAPI WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved, DWORD Version,
1059 PWTS_PROCESS_INFOW* ppProcessInfo, DWORD* pCount);
1060
1061 WINPR_ATTR_NODISCARD
1062 WINPR_API BOOL WINAPI WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved, DWORD Version,
1063 PWTS_PROCESS_INFOA* ppProcessInfo, DWORD* pCount);
1064
1065 WINPR_ATTR_NODISCARD
1066 WINPR_API BOOL WINAPI WTSTerminateProcess(HANDLE hServer, DWORD ProcessId, DWORD ExitCode);
1067
1068 WINPR_ATTR_NODISCARD
1069 WINPR_API BOOL WINAPI WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId,
1070 WTS_INFO_CLASS WTSInfoClass, LPWSTR* ppBuffer,
1071 DWORD* pBytesReturned);
1072
1073 WINPR_ATTR_NODISCARD
1074 WINPR_API BOOL WINAPI WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId,
1075 WTS_INFO_CLASS WTSInfoClass, LPSTR* ppBuffer,
1076 DWORD* pBytesReturned);
1077
1078 WINPR_ATTR_NODISCARD
1079 WINPR_API BOOL WINAPI WTSQueryUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
1080 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer,
1081 DWORD* pBytesReturned);
1082
1083 WINPR_ATTR_NODISCARD
1084 WINPR_API BOOL WINAPI WTSQueryUserConfigA(LPSTR pServerName, LPSTR pUserName,
1085 WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer,
1086 DWORD* pBytesReturned);
1087
1088 WINPR_ATTR_NODISCARD
1089 WINPR_API BOOL WINAPI WTSSetUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
1090 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
1091 DWORD DataLength);
1092
1093 WINPR_ATTR_NODISCARD
1094 WINPR_API BOOL WINAPI WTSSetUserConfigA(LPSTR pServerName, LPSTR pUserName,
1095 WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
1096 DWORD DataLength);
1097
1098 WINPR_ATTR_NODISCARD
1099 WINPR_API BOOL WINAPI WTSSendMessageW(HANDLE hServer, DWORD SessionId, LPWSTR pTitle,
1100 DWORD TitleLength, LPWSTR pMessage, DWORD MessageLength,
1101 DWORD Style, DWORD Timeout, DWORD* pResponse, BOOL bWait);
1102
1103 WINPR_ATTR_NODISCARD
1104 WINPR_API BOOL WINAPI WTSSendMessageA(HANDLE hServer, DWORD SessionId, LPSTR pTitle,
1105 DWORD TitleLength, LPSTR pMessage, DWORD MessageLength,
1106 DWORD Style, DWORD Timeout, DWORD* pResponse, BOOL bWait);
1107
1108 WINPR_ATTR_NODISCARD
1109 WINPR_API BOOL WINAPI WTSDisconnectSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
1110
1111 WINPR_ATTR_NODISCARD
1112 WINPR_API BOOL WINAPI WTSLogoffSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
1113
1114 WINPR_ATTR_NODISCARD
1115 WINPR_API BOOL WINAPI WTSShutdownSystem(HANDLE hServer, DWORD ShutdownFlag);
1116
1117 WINPR_ATTR_NODISCARD
1118 WINPR_API BOOL WINAPI WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags);
1119
1120 WINPR_API BOOL WINAPI WTSVirtualChannelClose(HANDLE hChannelHandle);
1121
1122 WINPR_ATTR_MALLOC(WTSVirtualChannelClose, 1)
1123 WINPR_API HANDLE WINAPI WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId,
1124 LPSTR pVirtualName);
1125
1126 WINPR_ATTR_MALLOC(WTSVirtualChannelClose, 1)
1127 WINPR_API HANDLE WINAPI WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName,
1128 DWORD flags);
1129
1130 WINPR_ATTR_NODISCARD
1131 WINPR_API BOOL WINAPI WTSVirtualChannelRead(HANDLE hChannelHandle, ULONG TimeOut, PCHAR Buffer,
1132 ULONG BufferSize, PULONG pBytesRead);
1133
1134 WINPR_ATTR_NODISCARD
1135 WINPR_API BOOL WINAPI WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer, ULONG Length,
1136 PULONG pBytesWritten);
1137
1138 WINPR_ATTR_NODISCARD
1139 WINPR_API BOOL WINAPI WTSVirtualChannelPurgeInput(HANDLE hChannelHandle);
1140
1141 WINPR_ATTR_NODISCARD
1142 WINPR_API BOOL WINAPI WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle);
1143
1144 WINPR_ATTR_NODISCARD
1145 WINPR_API BOOL WINAPI WTSVirtualChannelQuery(HANDLE hChannelHandle,
1146 WTS_VIRTUAL_CLASS WtsVirtualClass, PVOID* ppBuffer,
1147 DWORD* pBytesReturned);
1148
1149 WINPR_API VOID WINAPI WTSFreeMemory(PVOID pMemory);
1150
1151 WINPR_ATTR_NODISCARD
1152 WINPR_API BOOL WINAPI WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);
1153
1154 WINPR_ATTR_NODISCARD
1155 WINPR_API BOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd);
1156
1157 WINPR_ATTR_NODISCARD
1158 WINPR_API BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd,
1159 DWORD dwFlags);
1160
1161 WINPR_ATTR_NODISCARD
1162 WINPR_API BOOL WINAPI WTSUnRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd);
1163
1164 WINPR_ATTR_NODISCARD
1165 WINPR_API BOOL WINAPI WTSQueryUserToken(ULONG SessionId, PHANDLE phToken);
1166
1167 WINPR_ATTR_NODISCARD
1168 WINPR_API BOOL WINAPI WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1169 ULONG NumberOfEntries);
1170
1171 WINPR_ATTR_NODISCARD
1172 WINPR_API BOOL WINAPI WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1173 ULONG NumberOfEntries);
1174
1175 WINPR_ATTR_NODISCARD
1176 WINPR_API BOOL WINAPI WTSEnumerateProcessesExW(HANDLE hServer, DWORD* pLevel, DWORD SessionId,
1177 LPWSTR* ppProcessInfo, DWORD* pCount);
1178
1179 WINPR_ATTR_NODISCARD
1180 WINPR_API BOOL WINAPI WTSEnumerateProcessesExA(HANDLE hServer, DWORD* pLevel, DWORD SessionId,
1181 LPSTR* ppProcessInfo, DWORD* pCount);
1182
1183 WINPR_ATTR_NODISCARD
1184 WINPR_API BOOL WINAPI WTSEnumerateListenersW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1185 PWTSLISTENERNAMEW pListeners, DWORD* pCount);
1186
1187 WINPR_ATTR_NODISCARD
1188 WINPR_API BOOL WINAPI WTSEnumerateListenersA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1189 PWTSLISTENERNAMEA pListeners, DWORD* pCount);
1190
1191 WINPR_ATTR_NODISCARD
1192 WINPR_API BOOL WINAPI WTSQueryListenerConfigW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1193 LPWSTR pListenerName,
1194 PWTSLISTENERCONFIGW pBuffer);
1195
1196 WINPR_ATTR_NODISCARD
1197 WINPR_API BOOL WINAPI WTSQueryListenerConfigA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1198 LPSTR pListenerName, PWTSLISTENERCONFIGA pBuffer);
1199
1200 WINPR_ATTR_NODISCARD
1201 WINPR_API BOOL WINAPI WTSCreateListenerW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1202 LPWSTR pListenerName, PWTSLISTENERCONFIGW pBuffer,
1203 DWORD flag);
1204
1205 WINPR_ATTR_NODISCARD
1206 WINPR_API BOOL WINAPI WTSCreateListenerA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1207 LPSTR pListenerName, PWTSLISTENERCONFIGA pBuffer,
1208 DWORD flag);
1209
1210 WINPR_ATTR_NODISCARD
1211 WINPR_API BOOL WINAPI WTSSetListenerSecurityW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1212 LPWSTR pListenerName,
1213 SECURITY_INFORMATION SecurityInformation,
1214 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1215
1216 WINPR_ATTR_NODISCARD
1217 WINPR_API BOOL WINAPI WTSSetListenerSecurityA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1218 LPSTR pListenerName,
1219 SECURITY_INFORMATION SecurityInformation,
1220 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1221
1222 WINPR_ATTR_NODISCARD
1223 WINPR_API BOOL WINAPI WTSGetListenerSecurityW(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1224 LPWSTR pListenerName,
1225 SECURITY_INFORMATION SecurityInformation,
1226 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1227 DWORD nLength, LPDWORD lpnLengthNeeded);
1228
1229 WINPR_ATTR_NODISCARD
1230 WINPR_API BOOL WINAPI WTSGetListenerSecurityA(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1231 LPSTR pListenerName,
1232 SECURITY_INFORMATION SecurityInformation,
1233 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1234 DWORD nLength, LPDWORD lpnLengthNeeded);
1235
1242 WINPR_ATTR_NODISCARD
1243 WINPR_API BOOL CDECL WTSEnableChildSessions(BOOL bEnable);
1244
1245 WINPR_ATTR_NODISCARD
1246 WINPR_API BOOL CDECL WTSIsChildSessionsEnabled(PBOOL pbEnabled);
1247
1248 WINPR_ATTR_NODISCARD
1249 WINPR_API BOOL CDECL WTSGetChildSessionId(PULONG pSessionId);
1250
1251 WINPR_ATTR_NODISCARD
1252 WINPR_API BOOL CDECL WTSLogonUser(HANDLE hServer, LPCSTR username, LPCSTR password,
1253 LPCSTR domain);
1254
1255 WINPR_ATTR_NODISCARD
1256 WINPR_API BOOL CDECL WTSLogoffUser(HANDLE hServer);
1257
1258#ifdef __cplusplus
1259}
1260#endif
1261
1262#ifdef UNICODE
1263#define WTSStartRemoteControlSession WTSStartRemoteControlSessionW
1264#define WTSStartRemoteControlSessionEx WTSStartRemoteControlSessionExW
1265#define WTSConnectSession WTSConnectSessionW
1266#define WTSEnumerateServers WTSEnumerateServersW
1267#define WTSOpenServer WTSOpenServerW
1268#define WTSOpenServerEx WTSOpenServerExW
1269#define WTSEnumerateSessions WTSEnumerateSessionsW
1270#define WTSEnumerateSessionsEx WTSEnumerateSessionsExW
1271#define WTSEnumerateProcesses WTSEnumerateProcessesW
1272#define WTSQuerySessionInformation WTSQuerySessionInformationW
1273#define WTSQueryUserConfig WTSQueryUserConfigW
1274#define WTSSetUserConfig WTSSetUserConfigW
1275#define WTSSendMessage WTSSendMessageW
1276#define WTSFreeMemoryEx WTSFreeMemoryExW
1277#define WTSEnumerateProcessesEx WTSEnumerateProcessesExW
1278#define WTSEnumerateListeners WTSEnumerateListenersW
1279#define WTSQueryListenerConfig WTSQueryListenerConfigW
1280#define WTSCreateListener WTSCreateListenerW
1281#define WTSSetListenerSecurity WTSSetListenerSecurityW
1282#define WTSGetListenerSecurity WTSGetListenerSecurityW
1283#else
1284#define WTSStartRemoteControlSession WTSStartRemoteControlSessionA
1285#define WTSStartRemoteControlSessionEx WTSStartRemoteControlSessionExA
1286#define WTSConnectSession WTSConnectSessionA
1287#define WTSEnumerateServers WTSEnumerateServersA
1288#define WTSOpenServer WTSOpenServerA
1289#define WTSOpenServerEx WTSOpenServerExA
1290#define WTSEnumerateSessions WTSEnumerateSessionsA
1291#define WTSEnumerateSessionsEx WTSEnumerateSessionsExA
1292#define WTSEnumerateProcesses WTSEnumerateProcessesA
1293#define WTSQuerySessionInformation WTSQuerySessionInformationA
1294#define WTSQueryUserConfig WTSQueryUserConfigA
1295#define WTSSetUserConfig WTSSetUserConfigA
1296#define WTSSendMessage WTSSendMessageA
1297#define WTSFreeMemoryEx WTSFreeMemoryExA
1298#define WTSEnumerateProcessesEx WTSEnumerateProcessesExA
1299#define WTSEnumerateListeners WTSEnumerateListenersA
1300#define WTSQueryListenerConfig WTSQueryListenerConfigA
1301#define WTSCreateListener WTSCreateListenerA
1302#define WTSSetListenerSecurity WTSSetListenerSecurityA
1303#define WTSGetListenerSecurity WTSGetListenerSecurityA
1304#endif
1305
1306#endif
1307
1308#ifndef _WIN32
1309
1315WINPR_ATTR_NODISCARD
1316WINPR_API DWORD WINAPI WTSGetActiveConsoleSessionId(void);
1317
1318#endif
1319
1320typedef BOOL(WINAPI* WTS_STOP_REMOTE_CONTROL_SESSION_FN)(ULONG LogonId);
1321
1322typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_FN_W)(LPWSTR pTargetServerName,
1323 ULONG TargetLogonId, BYTE HotkeyVk,
1324 USHORT HotkeyModifiers);
1325typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_FN_A)(LPSTR pTargetServerName,
1326 ULONG TargetLogonId, BYTE HotkeyVk,
1327 USHORT HotkeyModifiers);
1328
1329typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_EX_FN_W)(LPWSTR pTargetServerName,
1330 ULONG TargetLogonId, BYTE HotkeyVk,
1331 USHORT HotkeyModifiers, DWORD flags);
1332typedef BOOL(WINAPI* WTS_START_REMOTE_CONTROL_SESSION_EX_FN_A)(LPSTR pTargetServerName,
1333 ULONG TargetLogonId, BYTE HotkeyVk,
1334 USHORT HotkeyModifiers, DWORD flags);
1335
1336typedef BOOL(WINAPI* WTS_CONNECT_SESSION_FN_W)(ULONG LogonId, ULONG TargetLogonId, PWSTR pPassword,
1337 BOOL bWait);
1338typedef BOOL(WINAPI* WTS_CONNECT_SESSION_FN_A)(ULONG LogonId, ULONG TargetLogonId, PSTR pPassword,
1339 BOOL bWait);
1340
1341typedef BOOL(WINAPI* WTS_ENUMERATE_SERVERS_FN_W)(LPWSTR pDomainName, DWORD Reserved, DWORD Version,
1342 PWTS_SERVER_INFOW* ppServerInfo, DWORD* pCount);
1343typedef BOOL(WINAPI* WTS_ENUMERATE_SERVERS_FN_A)(LPSTR pDomainName, DWORD Reserved, DWORD Version,
1344 PWTS_SERVER_INFOA* ppServerInfo, DWORD* pCount);
1345
1346typedef HANDLE(WINAPI* WTS_OPEN_SERVER_FN_W)(LPWSTR pServerName);
1347typedef HANDLE(WINAPI* WTS_OPEN_SERVER_FN_A)(LPSTR pServerName);
1348
1349typedef HANDLE(WINAPI* WTS_OPEN_SERVER_EX_FN_W)(LPWSTR pServerName);
1350typedef HANDLE(WINAPI* WTS_OPEN_SERVER_EX_FN_A)(LPSTR pServerName);
1351
1352typedef VOID(WINAPI* WTS_CLOSE_SERVER_FN)(HANDLE hServer);
1353
1354typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_FN_W)(HANDLE hServer, DWORD Reserved, DWORD Version,
1355 PWTS_SESSION_INFOW* ppSessionInfo, DWORD* pCount);
1356typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_FN_A)(HANDLE hServer, DWORD Reserved, DWORD Version,
1357 PWTS_SESSION_INFOA* ppSessionInfo, DWORD* pCount);
1358
1359typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_EX_FN_W)(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1360 PWTS_SESSION_INFO_1W* ppSessionInfo,
1361 DWORD* pCount);
1362typedef BOOL(WINAPI* WTS_ENUMERATE_SESSIONS_EX_FN_A)(HANDLE hServer, DWORD* pLevel, DWORD Filter,
1363 PWTS_SESSION_INFO_1A* ppSessionInfo,
1364 DWORD* pCount);
1365
1366typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_FN_W)(HANDLE hServer, DWORD Reserved, DWORD Version,
1367 PWTS_PROCESS_INFOW* ppProcessInfo,
1368 DWORD* pCount);
1369typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_FN_A)(HANDLE hServer, DWORD Reserved, DWORD Version,
1370 PWTS_PROCESS_INFOA* ppProcessInfo,
1371 DWORD* pCount);
1372
1373typedef BOOL(WINAPI* WTS_TERMINATE_PROCESS_FN)(HANDLE hServer, DWORD ProcessId, DWORD ExitCode);
1374
1375typedef BOOL(WINAPI* WTS_QUERY_SESSION_INFORMATION_FN_W)(HANDLE hServer, DWORD SessionId,
1376 WTS_INFO_CLASS WTSInfoClass,
1377 LPWSTR* ppBuffer, DWORD* pBytesReturned);
1378typedef BOOL(WINAPI* WTS_QUERY_SESSION_INFORMATION_FN_A)(HANDLE hServer, DWORD SessionId,
1379 WTS_INFO_CLASS WTSInfoClass,
1380 LPSTR* ppBuffer, DWORD* pBytesReturned);
1381
1382typedef BOOL(WINAPI* WTS_QUERY_USER_CONFIG_FN_W)(LPWSTR pServerName, LPWSTR pUserName,
1383 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR* ppBuffer,
1384 DWORD* pBytesReturned);
1385typedef BOOL(WINAPI* WTS_QUERY_USER_CONFIG_FN_A)(LPSTR pServerName, LPSTR pUserName,
1386 WTS_CONFIG_CLASS WTSConfigClass, LPSTR* ppBuffer,
1387 DWORD* pBytesReturned);
1388
1389typedef BOOL(WINAPI* WTS_SET_USER_CONFIG_FN_W)(LPWSTR pServerName, LPWSTR pUserName,
1390 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
1391 DWORD DataLength);
1392typedef BOOL(WINAPI* WTS_SET_USER_CONFIG_FN_A)(LPSTR pServerName, LPSTR pUserName,
1393 WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
1394 DWORD DataLength);
1395
1396typedef BOOL(WINAPI* WTS_SEND_MESSAGE_FN_W)(HANDLE hServer, DWORD SessionId, LPWSTR pTitle,
1397 DWORD TitleLength, LPWSTR pMessage, DWORD MessageLength,
1398 DWORD Style, DWORD Timeout, DWORD* pResponse,
1399 BOOL bWait);
1400typedef BOOL(WINAPI* WTS_SEND_MESSAGE_FN_A)(HANDLE hServer, DWORD SessionId, LPSTR pTitle,
1401 DWORD TitleLength, LPSTR pMessage, DWORD MessageLength,
1402 DWORD Style, DWORD Timeout, DWORD* pResponse,
1403 BOOL bWait);
1404
1405typedef BOOL(WINAPI* WTS_DISCONNECT_SESSION_FN)(HANDLE hServer, DWORD SessionId, BOOL bWait);
1406
1407typedef BOOL(WINAPI* WTS_LOGOFF_SESSION_FN)(HANDLE hServer, DWORD SessionId, BOOL bWait);
1408
1409typedef BOOL(WINAPI* WTS_SHUTDOWN_SYSTEM_FN)(HANDLE hServer, DWORD ShutdownFlag);
1410
1411typedef BOOL(WINAPI* WTS_WAIT_SYSTEM_EVENT_FN)(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags);
1412
1413typedef HANDLE(WINAPI* WTS_VIRTUAL_CHANNEL_OPEN_FN)(HANDLE hServer, DWORD SessionId,
1414 LPSTR pVirtualName);
1415
1416typedef HANDLE(WINAPI* WTS_VIRTUAL_CHANNEL_OPEN_EX_FN)(DWORD SessionId, LPSTR pVirtualName,
1417 DWORD flags);
1418
1419typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_CLOSE_FN)(HANDLE hChannelHandle);
1420
1421typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_READ_FN)(HANDLE hChannelHandle, ULONG TimeOut,
1422 PCHAR Buffer, ULONG BufferSize,
1423 PULONG pBytesRead);
1424
1425typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_WRITE_FN)(HANDLE hChannelHandle, PCHAR Buffer,
1426 ULONG Length, PULONG pBytesWritten);
1427
1428typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_PURGE_INPUT_FN)(HANDLE hChannelHandle);
1429
1430typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_PURGE_OUTPUT_FN)(HANDLE hChannelHandle);
1431
1432typedef BOOL(WINAPI* WTS_VIRTUAL_CHANNEL_QUERY_FN)(HANDLE hChannelHandle,
1433 WTS_VIRTUAL_CLASS WtsVirtualClass,
1434 PVOID* ppBuffer, DWORD* pBytesReturned);
1435
1436typedef VOID(WINAPI* WTS_FREE_MEMORY_FN)(PVOID pMemory);
1437
1438typedef BOOL(WINAPI* WTS_REGISTER_SESSION_NOTIFICATION_FN)(HWND hWnd, DWORD dwFlags);
1439
1440typedef BOOL(WINAPI* WTS_UNREGISTER_SESSION_NOTIFICATION_FN)(HWND hWnd);
1441
1442typedef BOOL(WINAPI* WTS_REGISTER_SESSION_NOTIFICATION_EX_FN)(HANDLE hServer, HWND hWnd,
1443 DWORD dwFlags);
1444
1445typedef BOOL(WINAPI* WTS_UNREGISTER_SESSION_NOTIFICATION_EX_FN)(HANDLE hServer, HWND hWnd);
1446
1447typedef BOOL(WINAPI* WTS_QUERY_USER_TOKEN_FN)(ULONG SessionId, PHANDLE phToken);
1448
1449typedef BOOL(WINAPI* WTS_FREE_MEMORY_EX_FN_W)(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1450 ULONG NumberOfEntries);
1451typedef BOOL(WINAPI* WTS_FREE_MEMORY_EX_FN_A)(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
1452 ULONG NumberOfEntries);
1453
1454typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_EX_FN_W)(HANDLE hServer, DWORD* pLevel,
1455 DWORD SessionId, LPWSTR* ppProcessInfo,
1456 DWORD* pCount);
1457typedef BOOL(WINAPI* WTS_ENUMERATE_PROCESSES_EX_FN_A)(HANDLE hServer, DWORD* pLevel,
1458 DWORD SessionId, LPSTR* ppProcessInfo,
1459 DWORD* pCount);
1460
1461typedef BOOL(WINAPI* WTS_ENUMERATE_LISTENERS_FN_W)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1462 PWTSLISTENERNAMEW pListeners, DWORD* pCount);
1463typedef BOOL(WINAPI* WTS_ENUMERATE_LISTENERS_FN_A)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1464 PWTSLISTENERNAMEA pListeners, DWORD* pCount);
1465
1466typedef BOOL(WINAPI* WTS_QUERY_LISTENER_CONFIG_FN_W)(HANDLE hServer, PVOID pReserved,
1467 DWORD Reserved, LPWSTR pListenerName,
1468 PWTSLISTENERCONFIGW pBuffer);
1469typedef BOOL(WINAPI* WTS_QUERY_LISTENER_CONFIG_FN_A)(HANDLE hServer, PVOID pReserved,
1470 DWORD Reserved, LPSTR pListenerName,
1471 PWTSLISTENERCONFIGA pBuffer);
1472
1473typedef BOOL(WINAPI* WTS_CREATE_LISTENER_FN_W)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1474 LPWSTR pListenerName, PWTSLISTENERCONFIGW pBuffer,
1475 DWORD flag);
1476typedef BOOL(WINAPI* WTS_CREATE_LISTENER_FN_A)(HANDLE hServer, PVOID pReserved, DWORD Reserved,
1477 LPSTR pListenerName, PWTSLISTENERCONFIGA pBuffer,
1478 DWORD flag);
1479
1480typedef BOOL(WINAPI* WTS_SET_LISTENER_SECURITY_FN_W)(HANDLE hServer, PVOID pReserved,
1481 DWORD Reserved, LPWSTR pListenerName,
1482 SECURITY_INFORMATION SecurityInformation,
1483 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1484typedef BOOL(WINAPI* WTS_SET_LISTENER_SECURITY_FN_A)(HANDLE hServer, PVOID pReserved,
1485 DWORD Reserved, LPSTR pListenerName,
1486 SECURITY_INFORMATION SecurityInformation,
1487 PSECURITY_DESCRIPTOR pSecurityDescriptor);
1488
1489typedef BOOL(WINAPI* WTS_GET_LISTENER_SECURITY_FN_W)(HANDLE hServer, PVOID pReserved,
1490 DWORD Reserved, LPWSTR pListenerName,
1491 SECURITY_INFORMATION SecurityInformation,
1492 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1493 DWORD nLength, LPDWORD lpnLengthNeeded);
1494typedef BOOL(WINAPI* WTS_GET_LISTENER_SECURITY_FN_A)(HANDLE hServer, PVOID pReserved,
1495 DWORD Reserved, LPSTR pListenerName,
1496 SECURITY_INFORMATION SecurityInformation,
1497 PSECURITY_DESCRIPTOR pSecurityDescriptor,
1498 DWORD nLength, LPDWORD lpnLengthNeeded);
1499
1500typedef BOOL(CDECL* WTS_ENABLE_CHILD_SESSIONS_FN)(BOOL bEnable);
1501
1502typedef BOOL(CDECL* WTS_IS_CHILD_SESSIONS_ENABLED_FN)(PBOOL pbEnabled);
1503
1504typedef BOOL(CDECL* WTS_GET_CHILD_SESSION_ID_FN)(PULONG pSessionId);
1505
1506typedef DWORD(WINAPI* WTS_GET_ACTIVE_CONSOLE_SESSION_ID_FN)(void);
1507
1508typedef BOOL(WINAPI* WTS_LOGON_USER_FN)(HANDLE hServer, LPCSTR username, LPCSTR password,
1509 LPCSTR domain);
1510
1511typedef BOOL(WINAPI* WTS_LOGOFF_USER_FN)(HANDLE hServer);
1512
1513typedef struct
1514{
1515 DWORD dwVersion;
1516 DWORD dwFlags;
1517
1518 WINPR_ATTR_NODISCARD WTS_STOP_REMOTE_CONTROL_SESSION_FN pStopRemoteControlSession;
1519 WINPR_ATTR_NODISCARD WTS_START_REMOTE_CONTROL_SESSION_FN_W pStartRemoteControlSessionW;
1520 WINPR_ATTR_NODISCARD WTS_START_REMOTE_CONTROL_SESSION_FN_A pStartRemoteControlSessionA;
1521 WINPR_ATTR_NODISCARD WTS_CONNECT_SESSION_FN_W pConnectSessionW;
1522 WINPR_ATTR_NODISCARD WTS_CONNECT_SESSION_FN_A pConnectSessionA;
1523 WINPR_ATTR_NODISCARD WTS_ENUMERATE_SERVERS_FN_W pEnumerateServersW;
1524 WINPR_ATTR_NODISCARD WTS_ENUMERATE_SERVERS_FN_A pEnumerateServersA;
1525 WINPR_ATTR_NODISCARD WTS_OPEN_SERVER_FN_W pOpenServerW;
1526 WINPR_ATTR_NODISCARD WTS_OPEN_SERVER_FN_A pOpenServerA;
1527 WINPR_ATTR_NODISCARD WTS_OPEN_SERVER_EX_FN_W pOpenServerExW;
1528 WINPR_ATTR_NODISCARD WTS_OPEN_SERVER_EX_FN_A pOpenServerExA;
1529 WTS_CLOSE_SERVER_FN pCloseServer;
1530 WINPR_ATTR_NODISCARD WTS_ENUMERATE_SESSIONS_FN_W pEnumerateSessionsW;
1531 WINPR_ATTR_NODISCARD WTS_ENUMERATE_SESSIONS_FN_A pEnumerateSessionsA;
1532 WINPR_ATTR_NODISCARD WTS_ENUMERATE_SESSIONS_EX_FN_W pEnumerateSessionsExW;
1533 WINPR_ATTR_NODISCARD WTS_ENUMERATE_SESSIONS_EX_FN_A pEnumerateSessionsExA;
1534 WINPR_ATTR_NODISCARD WTS_ENUMERATE_PROCESSES_FN_W pEnumerateProcessesW;
1535 WINPR_ATTR_NODISCARD WTS_ENUMERATE_PROCESSES_FN_A pEnumerateProcessesA;
1536 WINPR_ATTR_NODISCARD WTS_TERMINATE_PROCESS_FN pTerminateProcess;
1537 WINPR_ATTR_NODISCARD WTS_QUERY_SESSION_INFORMATION_FN_W pQuerySessionInformationW;
1538 WINPR_ATTR_NODISCARD WTS_QUERY_SESSION_INFORMATION_FN_A pQuerySessionInformationA;
1539 WINPR_ATTR_NODISCARD WTS_QUERY_USER_CONFIG_FN_W pQueryUserConfigW;
1540 WINPR_ATTR_NODISCARD WTS_QUERY_USER_CONFIG_FN_A pQueryUserConfigA;
1541 WINPR_ATTR_NODISCARD WTS_SET_USER_CONFIG_FN_W pSetUserConfigW;
1542 WINPR_ATTR_NODISCARD WTS_SET_USER_CONFIG_FN_A pSetUserConfigA;
1543 WINPR_ATTR_NODISCARD WTS_SEND_MESSAGE_FN_W pSendMessageW;
1544 WINPR_ATTR_NODISCARD WTS_SEND_MESSAGE_FN_A pSendMessageA;
1545 WINPR_ATTR_NODISCARD WTS_DISCONNECT_SESSION_FN pDisconnectSession;
1546 WINPR_ATTR_NODISCARD WTS_LOGOFF_SESSION_FN pLogoffSession;
1547 WINPR_ATTR_NODISCARD WTS_SHUTDOWN_SYSTEM_FN pShutdownSystem;
1548 WINPR_ATTR_NODISCARD WTS_WAIT_SYSTEM_EVENT_FN pWaitSystemEvent;
1549 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_OPEN_FN pVirtualChannelOpen;
1550 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_OPEN_EX_FN pVirtualChannelOpenEx;
1551 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_CLOSE_FN pVirtualChannelClose;
1552 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_READ_FN pVirtualChannelRead;
1553 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_WRITE_FN pVirtualChannelWrite;
1554 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_PURGE_INPUT_FN pVirtualChannelPurgeInput;
1555 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_PURGE_OUTPUT_FN pVirtualChannelPurgeOutput;
1556 WINPR_ATTR_NODISCARD WTS_VIRTUAL_CHANNEL_QUERY_FN pVirtualChannelQuery;
1557 WTS_FREE_MEMORY_FN pFreeMemory;
1558 WINPR_ATTR_NODISCARD WTS_REGISTER_SESSION_NOTIFICATION_FN pRegisterSessionNotification;
1559 WINPR_ATTR_NODISCARD WTS_UNREGISTER_SESSION_NOTIFICATION_FN pUnRegisterSessionNotification;
1560 WINPR_ATTR_NODISCARD WTS_REGISTER_SESSION_NOTIFICATION_EX_FN pRegisterSessionNotificationEx;
1561 WINPR_ATTR_NODISCARD WTS_UNREGISTER_SESSION_NOTIFICATION_EX_FN pUnRegisterSessionNotificationEx;
1562 WINPR_ATTR_NODISCARD WTS_QUERY_USER_TOKEN_FN pQueryUserToken;
1563 WINPR_ATTR_NODISCARD WTS_FREE_MEMORY_EX_FN_W pFreeMemoryExW;
1564 WINPR_ATTR_NODISCARD WTS_FREE_MEMORY_EX_FN_A pFreeMemoryExA;
1565 WINPR_ATTR_NODISCARD WTS_ENUMERATE_PROCESSES_EX_FN_W pEnumerateProcessesExW;
1566 WINPR_ATTR_NODISCARD WTS_ENUMERATE_PROCESSES_EX_FN_A pEnumerateProcessesExA;
1567 WINPR_ATTR_NODISCARD WTS_ENUMERATE_LISTENERS_FN_W pEnumerateListenersW;
1568 WINPR_ATTR_NODISCARD WTS_ENUMERATE_LISTENERS_FN_A pEnumerateListenersA;
1569 WINPR_ATTR_NODISCARD WTS_QUERY_LISTENER_CONFIG_FN_W pQueryListenerConfigW;
1570 WINPR_ATTR_NODISCARD WTS_QUERY_LISTENER_CONFIG_FN_A pQueryListenerConfigA;
1571 WINPR_ATTR_NODISCARD WTS_CREATE_LISTENER_FN_W pCreateListenerW;
1572 WINPR_ATTR_NODISCARD WTS_CREATE_LISTENER_FN_A pCreateListenerA;
1573 WINPR_ATTR_NODISCARD WTS_SET_LISTENER_SECURITY_FN_W pSetListenerSecurityW;
1574 WINPR_ATTR_NODISCARD WTS_SET_LISTENER_SECURITY_FN_A pSetListenerSecurityA;
1575 WINPR_ATTR_NODISCARD WTS_GET_LISTENER_SECURITY_FN_W pGetListenerSecurityW;
1576 WINPR_ATTR_NODISCARD WTS_GET_LISTENER_SECURITY_FN_A pGetListenerSecurityA;
1577 WINPR_ATTR_NODISCARD WTS_ENABLE_CHILD_SESSIONS_FN pEnableChildSessions;
1578 WINPR_ATTR_NODISCARD WTS_IS_CHILD_SESSIONS_ENABLED_FN pIsChildSessionsEnabled;
1579 WINPR_ATTR_NODISCARD WTS_GET_CHILD_SESSION_ID_FN pGetChildSessionId;
1580 WINPR_ATTR_NODISCARD WTS_GET_ACTIVE_CONSOLE_SESSION_ID_FN pGetActiveConsoleSessionId;
1581 WINPR_ATTR_NODISCARD WTS_LOGON_USER_FN pLogonUser;
1582 WINPR_ATTR_NODISCARD WTS_LOGOFF_USER_FN pLogoffUser;
1583 WINPR_ATTR_NODISCARD WTS_START_REMOTE_CONTROL_SESSION_EX_FN_W pStartRemoteControlSessionExW;
1584 WINPR_ATTR_NODISCARD WTS_START_REMOTE_CONTROL_SESSION_EX_FN_A pStartRemoteControlSessionExA;
1587
1588typedef const WtsApiFunctionTable*(CDECL* INIT_WTSAPI_FN)(void);
1589
1590#ifdef __cplusplus
1591extern "C"
1592{
1593#endif
1594
1595 WINPR_ATTR_NODISCARD
1596 WINPR_API BOOL WTSRegisterWtsApiFunctionTable(const WtsApiFunctionTable* table);
1597
1598 WINPR_ATTR_NODISCARD
1599 WINPR_API const CHAR* WTSErrorToString(UINT error);
1600
1601 WINPR_ATTR_NODISCARD
1602 WINPR_API const CHAR* WTSSessionStateToString(WTS_CONNECTSTATE_CLASS state);
1603
1604#ifdef __cplusplus
1605}
1606#endif
1607
1608WINPR_PRAGMA_DIAG_POP
1609
1610#endif /* WINPR_WTSAPI_H */
Definition wtsapi.h:237
Definition wtsapi.h:227