21#ifndef FREERDP_LIB_CORE_SERVER_H
22#define FREERDP_LIB_CORE_SERVER_H
24#include <freerdp/freerdp.h>
25#include <freerdp/api.h>
26#include <freerdp/channels/wtsvc.h>
28#include <winpr/synch.h>
29#include <winpr/stream.h>
30#include <winpr/collections.h>
40 RDP_PEER_CHANNEL_TYPE_SVC = 0,
41 RDP_PEER_CHANNEL_TYPE_DVC = 1
46 DVC_OPEN_STATE_NONE = 0,
47 DVC_OPEN_STATE_SUCCEEDED = 1,
48 DVC_OPEN_STATE_FAILED = 2,
49 DVC_OPEN_STATE_CLOSED = 3
68 UINT32 dvc_total_length;
69 rdpMcsChannel* mcsChannel;
71 char channelName[128];
83 rdpPeerChannel* drdynvc_channel;
85 LONG dvc_channel_id_seq;
86 UINT16 dvc_spoken_version;
88 WINPR_ATTR_NODISCARD psDVCCreationStatusCallback dvc_creation_status;
89 void* dvc_creation_status_userdata;
91 wHashTable* dynamicVirtualChannels;
95FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionW(LPWSTR pTargetServerName,
96 ULONG TargetLogonId, BYTE HotkeyVk,
97 USHORT HotkeyModifiers);
100FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionA(LPSTR pTargetServerName,
101 ULONG TargetLogonId, BYTE HotkeyVk,
102 USHORT HotkeyModifiers);
105FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionExW(LPWSTR pTargetServerName,
108 USHORT HotkeyModifiers,
112FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionExA(LPSTR pTargetServerName,
115 USHORT HotkeyModifiers,
119FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStopRemoteControlSession(ULONG LogonId);
122FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSConnectSessionW(ULONG LogonId, ULONG TargetLogonId,
123 PWSTR pPassword, BOOL bWait);
126FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSConnectSessionA(ULONG LogonId, ULONG TargetLogonId,
127 PSTR pPassword, BOOL bWait);
130FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateServersW(LPWSTR pDomainName, DWORD Reserved,
136FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateServersA(LPSTR pDomainName, DWORD Reserved,
142FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerW(LPWSTR pServerName);
145FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerA(LPSTR pServerName);
148FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerExW(LPWSTR pServerName);
151FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerExA(LPSTR pServerName);
153FREERDP_LOCAL VOID WINAPI FreeRDP_WTSCloseServer(HANDLE hServer);
156FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved,
162FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved,
168FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsExW(HANDLE hServer, DWORD* pLevel,
174FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsExA(HANDLE hServer, DWORD* pLevel,
180FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved,
186FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved,
192FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSTerminateProcess(HANDLE hServer, DWORD ProcessId,
196FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId,
197 WTS_INFO_CLASS WTSInfoClass,
199 DWORD* pBytesReturned);
202FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId,
203 WTS_INFO_CLASS WTSInfoClass,
205 DWORD* pBytesReturned);
208FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
209 WTS_CONFIG_CLASS WTSConfigClass,
210 LPWSTR* ppBuffer, DWORD* pBytesReturned);
213FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserConfigA(LPSTR pServerName, LPSTR pUserName,
214 WTS_CONFIG_CLASS WTSConfigClass,
215 LPSTR* ppBuffer, DWORD* pBytesReturned);
218FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
219 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
223FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetUserConfigA(LPSTR pServerName, LPSTR pUserName,
224 WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
228FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSendMessageW(HANDLE hServer, DWORD SessionId, LPWSTR pTitle,
229 DWORD TitleLength, LPWSTR pMessage,
230 DWORD MessageLength, DWORD Style, DWORD Timeout,
231 DWORD* pResponse, BOOL bWait);
234FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSendMessageA(HANDLE hServer, DWORD SessionId, LPSTR pTitle,
235 DWORD TitleLength, LPSTR pMessage,
236 DWORD MessageLength, DWORD Style, DWORD Timeout,
237 DWORD* pResponse, BOOL bWait);
240FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSDisconnectSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
243FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogoffSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
246FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSShutdownSystem(HANDLE hServer, DWORD ShutdownFlag);
249FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask,
253FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId,
257FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName,
261FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelClose(HANDLE hChannelHandle);
264FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelRead(HANDLE hChannelHandle, ULONG TimeOut,
265 PCHAR Buffer, ULONG BufferSize,
269FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer,
270 ULONG Length, PULONG pBytesWritten);
273FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelPurgeInput(HANDLE hChannelHandle);
276FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle);
279FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle,
280 WTS_VIRTUAL_CLASS WtsVirtualClass,
281 PVOID* ppBuffer, DWORD* pBytesReturned);
283FREERDP_LOCAL VOID WINAPI FreeRDP_WTSFreeMemory(PVOID pMemory);
286FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
287 ULONG NumberOfEntries);
290FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
291 ULONG NumberOfEntries);
294FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);
297FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSUnRegisterSessionNotification(HWND hWnd);
300FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd,
304FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSUnRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd);
307FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserToken(ULONG SessionId, PHANDLE phToken);
310FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesExW(HANDLE hServer, DWORD* pLevel,
311 DWORD SessionId, LPWSTR* ppProcessInfo,
315FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesExA(HANDLE hServer, DWORD* pLevel,
316 DWORD SessionId, LPSTR* ppProcessInfo,
320FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateListenersW(HANDLE hServer, PVOID pReserved,
322 PWTSLISTENERNAMEW pListeners,
326FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateListenersA(HANDLE hServer, PVOID pReserved,
328 PWTSLISTENERNAMEA pListeners,
332FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryListenerConfigW(HANDLE hServer, PVOID pReserved,
333 DWORD Reserved, LPWSTR pListenerName,
337FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryListenerConfigA(HANDLE hServer, PVOID pReserved,
338 DWORD Reserved, LPSTR pListenerName,
342FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSCreateListenerW(HANDLE hServer, PVOID pReserved,
343 DWORD Reserved, LPWSTR pListenerName,
347FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSCreateListenerA(HANDLE hServer, PVOID pReserved,
348 DWORD Reserved, LPSTR pListenerName,
352FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetListenerSecurityW(HANDLE hServer, PVOID pReserved,
353 DWORD Reserved, LPWSTR pListenerName,
354 SECURITY_INFORMATION SecurityInformation,
355 PSECURITY_DESCRIPTOR pSecurityDescriptor);
358FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetListenerSecurityA(HANDLE hServer, PVOID pReserved,
359 DWORD Reserved, LPSTR pListenerName,
360 SECURITY_INFORMATION SecurityInformation,
361 PSECURITY_DESCRIPTOR pSecurityDescriptor);
364FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSGetListenerSecurityW(HANDLE hServer, PVOID pReserved,
365 DWORD Reserved, LPWSTR pListenerName,
366 SECURITY_INFORMATION SecurityInformation,
367 PSECURITY_DESCRIPTOR pSecurityDescriptor,
368 DWORD nLength, LPDWORD lpnLengthNeeded);
371FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSGetListenerSecurityA(HANDLE hServer, PVOID pReserved,
372 DWORD Reserved, LPSTR pListenerName,
373 SECURITY_INFORMATION SecurityInformation,
374 PSECURITY_DESCRIPTOR pSecurityDescriptor,
375 DWORD nLength, LPDWORD lpnLengthNeeded);
378FREERDP_LOCAL BOOL CDECL FreeRDP_WTSEnableChildSessions(BOOL bEnable);
381FREERDP_LOCAL BOOL CDECL FreeRDP_WTSIsChildSessionsEnabled(PBOOL pbEnabled);
384FREERDP_LOCAL BOOL CDECL FreeRDP_WTSGetChildSessionId(PULONG pSessionId);
387FREERDP_LOCAL DWORD WINAPI FreeRDP_WTSGetActiveConsoleSessionId(
void);
390FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogoffUser(HANDLE hServer);
393FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogonUser(HANDLE hServer, LPCSTR username, LPCSTR password,
396FREERDP_LOCAL
void server_channel_common_free(rdpPeerChannel*);
398WINPR_ATTR_MALLOC(server_channel_common_free, 1)
400FREERDP_LOCAL rdpPeerChannel* server_channel_common_new(freerdp_peer* client, UINT16 index,
401 UINT32 channelId,
size_t chunkSize,
402 const
wObject* callback, const
char* name);
This struct contains function pointer to initialize/free objects.