FreeRDP
Loading...
Searching...
No Matches
server.h
1
21#ifndef FREERDP_LIB_CORE_SERVER_H
22#define FREERDP_LIB_CORE_SERVER_H
23
24#include <freerdp/freerdp.h>
25#include <freerdp/api.h>
26#include <freerdp/channels/wtsvc.h>
27
28#include <winpr/synch.h>
29#include <winpr/stream.h>
30#include <winpr/collections.h>
31
32typedef struct rdp_peer_channel rdpPeerChannel;
34
35#include "rdp.h"
36#include "mcs.h"
37
38enum
39{
40 RDP_PEER_CHANNEL_TYPE_SVC = 0,
41 RDP_PEER_CHANNEL_TYPE_DVC = 1
42};
43
44enum
45{
46 DVC_OPEN_STATE_NONE = 0,
47 DVC_OPEN_STATE_SUCCEEDED = 1,
48 DVC_OPEN_STATE_FAILED = 2,
49 DVC_OPEN_STATE_CLOSED = 3
50};
51
53{
55 freerdp_peer* client;
56
57 void* extra;
58 UINT16 index;
59 UINT32 channelId;
60 UINT16 channelType;
61 UINT32 channelFlags;
62
63 wStream* receiveData;
64 wMessageQueue* queue;
65
66 BYTE dvc_open_state;
67 INT32 creationStatus;
68 UINT32 dvc_total_length;
69 rdpMcsChannel* mcsChannel;
70
71 char channelName[128];
72 CRITICAL_SECTION writeLock;
73};
74
76{
77 rdpRdp* rdp;
78 freerdp_peer* client;
79
80 DWORD SessionId;
81 wMessageQueue* queue;
82
83 rdpPeerChannel* drdynvc_channel;
84 BYTE drdynvc_state;
85 LONG dvc_channel_id_seq;
86 UINT16 dvc_spoken_version;
87
88 WINPR_ATTR_NODISCARD psDVCCreationStatusCallback dvc_creation_status;
89 void* dvc_creation_status_userdata;
90
91 wHashTable* dynamicVirtualChannels;
92};
93
94WINPR_ATTR_NODISCARD
95FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionW(LPWSTR pTargetServerName,
96 ULONG TargetLogonId, BYTE HotkeyVk,
97 USHORT HotkeyModifiers);
98
99WINPR_ATTR_NODISCARD
100FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionA(LPSTR pTargetServerName,
101 ULONG TargetLogonId, BYTE HotkeyVk,
102 USHORT HotkeyModifiers);
103
104WINPR_ATTR_NODISCARD
105FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionExW(LPWSTR pTargetServerName,
106 ULONG TargetLogonId,
107 BYTE HotkeyVk,
108 USHORT HotkeyModifiers,
109 DWORD flags);
110
111WINPR_ATTR_NODISCARD
112FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionExA(LPSTR pTargetServerName,
113 ULONG TargetLogonId,
114 BYTE HotkeyVk,
115 USHORT HotkeyModifiers,
116 DWORD flags);
117
118WINPR_ATTR_NODISCARD
119FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSStopRemoteControlSession(ULONG LogonId);
120
121WINPR_ATTR_NODISCARD
122FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSConnectSessionW(ULONG LogonId, ULONG TargetLogonId,
123 PWSTR pPassword, BOOL bWait);
124
125WINPR_ATTR_NODISCARD
126FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSConnectSessionA(ULONG LogonId, ULONG TargetLogonId,
127 PSTR pPassword, BOOL bWait);
128
129WINPR_ATTR_NODISCARD
130FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateServersW(LPWSTR pDomainName, DWORD Reserved,
131 DWORD Version,
132 PWTS_SERVER_INFOW* ppServerInfo,
133 DWORD* pCount);
134
135WINPR_ATTR_NODISCARD
136FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateServersA(LPSTR pDomainName, DWORD Reserved,
137 DWORD Version,
138 PWTS_SERVER_INFOA* ppServerInfo,
139 DWORD* pCount);
140
141WINPR_ATTR_NODISCARD
142FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerW(LPWSTR pServerName);
143
144WINPR_ATTR_NODISCARD
145FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerA(LPSTR pServerName);
146
147WINPR_ATTR_NODISCARD
148FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerExW(LPWSTR pServerName);
149
150WINPR_ATTR_NODISCARD
151FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSOpenServerExA(LPSTR pServerName);
152
153FREERDP_LOCAL VOID WINAPI FreeRDP_WTSCloseServer(HANDLE hServer);
154
155WINPR_ATTR_NODISCARD
156FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved,
157 DWORD Version,
158 PWTS_SESSION_INFOW* ppSessionInfo,
159 DWORD* pCount);
160
161WINPR_ATTR_NODISCARD
162FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved,
163 DWORD Version,
164 PWTS_SESSION_INFOA* ppSessionInfo,
165 DWORD* pCount);
166
167WINPR_ATTR_NODISCARD
168FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsExW(HANDLE hServer, DWORD* pLevel,
169 DWORD Filter,
170 PWTS_SESSION_INFO_1W* ppSessionInfo,
171 DWORD* pCount);
172
173WINPR_ATTR_NODISCARD
174FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateSessionsExA(HANDLE hServer, DWORD* pLevel,
175 DWORD Filter,
176 PWTS_SESSION_INFO_1A* ppSessionInfo,
177 DWORD* pCount);
178
179WINPR_ATTR_NODISCARD
180FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesW(HANDLE hServer, DWORD Reserved,
181 DWORD Version,
182 PWTS_PROCESS_INFOW* ppProcessInfo,
183 DWORD* pCount);
184
185WINPR_ATTR_NODISCARD
186FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesA(HANDLE hServer, DWORD Reserved,
187 DWORD Version,
188 PWTS_PROCESS_INFOA* ppProcessInfo,
189 DWORD* pCount);
190
191WINPR_ATTR_NODISCARD
192FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSTerminateProcess(HANDLE hServer, DWORD ProcessId,
193 DWORD ExitCode);
194
195WINPR_ATTR_NODISCARD
196FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId,
197 WTS_INFO_CLASS WTSInfoClass,
198 LPWSTR* ppBuffer,
199 DWORD* pBytesReturned);
200
201WINPR_ATTR_NODISCARD
202FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId,
203 WTS_INFO_CLASS WTSInfoClass,
204 LPSTR* ppBuffer,
205 DWORD* pBytesReturned);
206
207WINPR_ATTR_NODISCARD
208FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
209 WTS_CONFIG_CLASS WTSConfigClass,
210 LPWSTR* ppBuffer, DWORD* pBytesReturned);
211
212WINPR_ATTR_NODISCARD
213FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserConfigA(LPSTR pServerName, LPSTR pUserName,
214 WTS_CONFIG_CLASS WTSConfigClass,
215 LPSTR* ppBuffer, DWORD* pBytesReturned);
216
217WINPR_ATTR_NODISCARD
218FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetUserConfigW(LPWSTR pServerName, LPWSTR pUserName,
219 WTS_CONFIG_CLASS WTSConfigClass, LPWSTR pBuffer,
220 DWORD DataLength);
221
222WINPR_ATTR_NODISCARD
223FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetUserConfigA(LPSTR pServerName, LPSTR pUserName,
224 WTS_CONFIG_CLASS WTSConfigClass, LPSTR pBuffer,
225 DWORD DataLength);
226
227WINPR_ATTR_NODISCARD
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);
232
233WINPR_ATTR_NODISCARD
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);
238
239WINPR_ATTR_NODISCARD
240FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSDisconnectSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
241
242WINPR_ATTR_NODISCARD
243FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogoffSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
244
245WINPR_ATTR_NODISCARD
246FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSShutdownSystem(HANDLE hServer, DWORD ShutdownFlag);
247
248WINPR_ATTR_NODISCARD
249FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask,
250 DWORD* pEventFlags);
251
252WINPR_ATTR_NODISCARD
253FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId,
254 LPSTR pVirtualName);
255
256WINPR_ATTR_NODISCARD
257FREERDP_LOCAL HANDLE WINAPI FreeRDP_WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName,
258 DWORD flags);
259
260WINPR_ATTR_NODISCARD
261FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelClose(HANDLE hChannelHandle);
262
263WINPR_ATTR_NODISCARD
264FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelRead(HANDLE hChannelHandle, ULONG TimeOut,
265 PCHAR Buffer, ULONG BufferSize,
266 PULONG pBytesRead);
267
268WINPR_ATTR_NODISCARD
269FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer,
270 ULONG Length, PULONG pBytesWritten);
271
272WINPR_ATTR_NODISCARD
273FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelPurgeInput(HANDLE hChannelHandle);
274
275WINPR_ATTR_NODISCARD
276FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle);
277
278WINPR_ATTR_NODISCARD
279FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle,
280 WTS_VIRTUAL_CLASS WtsVirtualClass,
281 PVOID* ppBuffer, DWORD* pBytesReturned);
282
283FREERDP_LOCAL VOID WINAPI FreeRDP_WTSFreeMemory(PVOID pMemory);
284
285WINPR_ATTR_NODISCARD
286FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
287 ULONG NumberOfEntries);
288
289WINPR_ATTR_NODISCARD
290FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
291 ULONG NumberOfEntries);
292
293WINPR_ATTR_NODISCARD
294FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);
295
296WINPR_ATTR_NODISCARD
297FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSUnRegisterSessionNotification(HWND hWnd);
298
299WINPR_ATTR_NODISCARD
300FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd,
301 DWORD dwFlags);
302
303WINPR_ATTR_NODISCARD
304FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSUnRegisterSessionNotificationEx(HANDLE hServer, HWND hWnd);
305
306WINPR_ATTR_NODISCARD
307FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryUserToken(ULONG SessionId, PHANDLE phToken);
308
309WINPR_ATTR_NODISCARD
310FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesExW(HANDLE hServer, DWORD* pLevel,
311 DWORD SessionId, LPWSTR* ppProcessInfo,
312 DWORD* pCount);
313
314WINPR_ATTR_NODISCARD
315FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateProcessesExA(HANDLE hServer, DWORD* pLevel,
316 DWORD SessionId, LPSTR* ppProcessInfo,
317 DWORD* pCount);
318
319WINPR_ATTR_NODISCARD
320FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateListenersW(HANDLE hServer, PVOID pReserved,
321 DWORD Reserved,
322 PWTSLISTENERNAMEW pListeners,
323 DWORD* pCount);
324
325WINPR_ATTR_NODISCARD
326FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSEnumerateListenersA(HANDLE hServer, PVOID pReserved,
327 DWORD Reserved,
328 PWTSLISTENERNAMEA pListeners,
329 DWORD* pCount);
330
331WINPR_ATTR_NODISCARD
332FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryListenerConfigW(HANDLE hServer, PVOID pReserved,
333 DWORD Reserved, LPWSTR pListenerName,
334 PWTSLISTENERCONFIGW pBuffer);
335
336WINPR_ATTR_NODISCARD
337FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSQueryListenerConfigA(HANDLE hServer, PVOID pReserved,
338 DWORD Reserved, LPSTR pListenerName,
339 PWTSLISTENERCONFIGA pBuffer);
340
341WINPR_ATTR_NODISCARD
342FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSCreateListenerW(HANDLE hServer, PVOID pReserved,
343 DWORD Reserved, LPWSTR pListenerName,
344 PWTSLISTENERCONFIGW pBuffer, DWORD flag);
345
346WINPR_ATTR_NODISCARD
347FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSCreateListenerA(HANDLE hServer, PVOID pReserved,
348 DWORD Reserved, LPSTR pListenerName,
349 PWTSLISTENERCONFIGA pBuffer, DWORD flag);
350
351WINPR_ATTR_NODISCARD
352FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetListenerSecurityW(HANDLE hServer, PVOID pReserved,
353 DWORD Reserved, LPWSTR pListenerName,
354 SECURITY_INFORMATION SecurityInformation,
355 PSECURITY_DESCRIPTOR pSecurityDescriptor);
356
357WINPR_ATTR_NODISCARD
358FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSSetListenerSecurityA(HANDLE hServer, PVOID pReserved,
359 DWORD Reserved, LPSTR pListenerName,
360 SECURITY_INFORMATION SecurityInformation,
361 PSECURITY_DESCRIPTOR pSecurityDescriptor);
362
363WINPR_ATTR_NODISCARD
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);
369
370WINPR_ATTR_NODISCARD
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);
376
377WINPR_ATTR_NODISCARD
378FREERDP_LOCAL BOOL CDECL FreeRDP_WTSEnableChildSessions(BOOL bEnable);
379
380WINPR_ATTR_NODISCARD
381FREERDP_LOCAL BOOL CDECL FreeRDP_WTSIsChildSessionsEnabled(PBOOL pbEnabled);
382
383WINPR_ATTR_NODISCARD
384FREERDP_LOCAL BOOL CDECL FreeRDP_WTSGetChildSessionId(PULONG pSessionId);
385
386WINPR_ATTR_NODISCARD
387FREERDP_LOCAL DWORD WINAPI FreeRDP_WTSGetActiveConsoleSessionId(void);
388
389WINPR_ATTR_NODISCARD
390FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogoffUser(HANDLE hServer);
391
392WINPR_ATTR_NODISCARD
393FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogonUser(HANDLE hServer, LPCSTR username, LPCSTR password,
394 LPCSTR domain);
395
396FREERDP_LOCAL void server_channel_common_free(rdpPeerChannel*);
397
398WINPR_ATTR_MALLOC(server_channel_common_free, 1)
399WINPR_ATTR_NODISCARD
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);
403
404#endif /* FREERDP_LIB_CORE_SERVER_H */
This struct contains function pointer to initialize/free objects.
Definition collections.h:52