FreeRDP
Loading...
Searching...
No Matches
server/rdpdr.h
1
23#ifndef FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H
24#define FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H
25
26#include <freerdp/api.h>
27#include <freerdp/config.h>
28#include <freerdp/types.h>
29#include <freerdp/channels/wtsvc.h>
30#include <freerdp/channels/rdpdr.h>
31#include <freerdp/utils/rdpdr_utils.h>
32
33#ifdef __cplusplus
34extern "C"
35{
36#endif
37
42 typedef struct s_rdpdr_server_context RdpdrServerContext;
43 typedef struct s_rdpdr_server_private RdpdrServerPrivate;
44
45 typedef struct
46 {
47 UINT16 Component;
48 UINT16 PacketId;
50
51#ifndef __MINGW32__
52typedef struct
53{
54 UINT32 NextEntryOffset;
55 UINT32 FileIndex;
56 LARGE_INTEGER CreationTime;
57 LARGE_INTEGER LastAccessTime;
58 LARGE_INTEGER LastWriteTime;
59 LARGE_INTEGER ChangeTime;
60 LARGE_INTEGER EndOfFile;
61 LARGE_INTEGER AllocationSize;
62 UINT32 FileAttributes;
63#if defined(WITH_WCHAR_FILE_DIRECTORY_INFORMATION)
64 WCHAR FileName[512];
65#else
66 char FileName[512];
67#endif
69#endif
70
71typedef UINT (*psRdpdrStart)(RdpdrServerContext* context);
72typedef UINT (*psRdpdrStop)(RdpdrServerContext* context);
73
74typedef UINT (*psRdpdrCapablityPDU)(RdpdrServerContext* context,
75 const RDPDR_CAPABILITY_HEADER* header, size_t size,
76 const BYTE* data);
77typedef UINT (*psRdpdrReceivePDU)(RdpdrServerContext* context, const RDPDR_HEADER* header,
78 UINT error);
79typedef UINT (*psRdpdrReceiveAnnounceResponse)(RdpdrServerContext* context, UINT16 VersionMajor,
80 UINT16 VersionMinor, UINT32 ClientId);
81typedef UINT (*psRdpdrSendServerAnnounce)(RdpdrServerContext* context);
82typedef UINT (*psRdpdrReceiveDeviceAnnounce)(RdpdrServerContext* context,
83 const RdpdrDevice* device);
84typedef UINT (*psRdpdrReceiveDeviceRemove)(RdpdrServerContext* context, UINT32 deviceId,
85 const RdpdrDevice* device);
86typedef UINT (*psRdpdrReceiveClientNameRequest)(RdpdrServerContext* context, size_t ComputerNameLen,
87 const char* name);
88
89typedef UINT (*psRdpdrDriveCreateDirectory)(RdpdrServerContext* context, void* callbackData,
90 UINT32 deviceId, const char* path);
91typedef UINT (*psRdpdrDriveDeleteDirectory)(RdpdrServerContext* context, void* callbackData,
92 UINT32 deviceId, const char* path);
93typedef UINT (*psRdpdrDriveQueryDirectory)(RdpdrServerContext* context, void* callbackData,
94 UINT32 deviceId, const char* path);
95typedef UINT (*psRdpdrDriveOpenFile)(RdpdrServerContext* context, void* callbackData,
96 UINT32 deviceId, const char* path, UINT32 desiredAccess,
97 UINT32 createDisposition);
98typedef UINT (*psRdpdrDriveReadFile)(RdpdrServerContext* context, void* callbackData,
99 UINT32 deviceId, UINT32 fileId, UINT32 length, UINT32 offset);
100typedef UINT (*psRdpdrDriveWriteFile)(RdpdrServerContext* context, void* callbackData,
101 UINT32 deviceId, UINT32 fileId, const char* buffer,
102 UINT32 length, UINT32 offset);
103typedef UINT (*psRdpdrDriveCloseFile)(RdpdrServerContext* context, void* callbackData,
104 UINT32 deviceId, UINT32 fileId);
105typedef UINT (*psRdpdrDriveDeleteFile)(RdpdrServerContext* context, void* callbackData,
106 UINT32 deviceId, const char* path);
107typedef UINT (*psRdpdrDriveRenameFile)(RdpdrServerContext* context, void* callbackData,
108 UINT32 deviceId, const char* oldPath, const char* newPath);
109
110typedef void (*psRdpdrOnDriveCreateDirectoryComplete)(RdpdrServerContext* context,
111 void* callbackData, UINT32 ioStatus);
112typedef void (*psRdpdrOnDriveDeleteDirectoryComplete)(RdpdrServerContext* context,
113 void* callbackData, UINT32 ioStatus);
114typedef void (*psRdpdrOnDriveQueryDirectoryComplete)(RdpdrServerContext* context,
115 void* callbackData, UINT32 ioStatus,
117typedef void (*psRdpdrOnDriveOpenFileComplete)(RdpdrServerContext* context, void* callbackData,
118 UINT32 ioStatus, UINT32 deviceId, UINT32 fileId);
119typedef void (*psRdpdrOnDriveReadFileComplete)(RdpdrServerContext* context, void* callbackData,
120 UINT32 ioStatus, const char* buffer, UINT32 length);
121typedef void (*psRdpdrOnDriveWriteFileComplete)(RdpdrServerContext* context, void* callbackData,
122 UINT32 ioStatus, UINT32 bytesWritten);
123typedef void (*psRdpdrOnDriveCloseFileComplete)(RdpdrServerContext* context, void* callbackData,
124 UINT32 ioStatus);
125typedef void (*psRdpdrOnDriveDeleteFileComplete)(RdpdrServerContext* context, void* callbackData,
126 UINT32 ioStatus);
127typedef void (*psRdpdrOnDriveRenameFileComplete)(RdpdrServerContext* context, void* callbackData,
128 UINT32 ioStatus);
129
130typedef UINT (*psRdpdrOnDeviceCreate)(RdpdrServerContext* context, const RdpdrDevice* device);
131typedef UINT (*psRdpdrOnDeviceDelete)(RdpdrServerContext* context, UINT32 deviceId);
132
134{
135 HANDLE vcm;
136
137 WINPR_ATTR_NODISCARD psRdpdrStart Start;
138 psRdpdrStop Stop;
139
140 RdpdrServerPrivate* priv;
141
142 /* Server self-defined pointer. */
143 void* data;
144
152 UINT16 supported;
153
154 /*** RDPDR message intercept callbacks */
155 WINPR_ATTR_NODISCARD psRdpdrCapablityPDU
157 WINPR_ATTR_NODISCARD psRdpdrCapablityPDU SendCaps;
158 WINPR_ATTR_NODISCARD psRdpdrReceivePDU
160 WINPR_ATTR_NODISCARD psRdpdrSendServerAnnounce
162 WINPR_ATTR_NODISCARD psRdpdrReceiveAnnounceResponse
164 WINPR_ATTR_NODISCARD psRdpdrReceiveClientNameRequest
166 WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceAnnounce
167 ReceiveDeviceAnnounce;
169 WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceRemove
173 /*** Drive APIs called by the server. ***/
174 WINPR_ATTR_NODISCARD psRdpdrDriveCreateDirectory DriveCreateDirectory;
175 WINPR_ATTR_NODISCARD psRdpdrDriveDeleteDirectory DriveDeleteDirectory;
176 WINPR_ATTR_NODISCARD psRdpdrDriveQueryDirectory DriveQueryDirectory;
177 WINPR_ATTR_NODISCARD psRdpdrDriveOpenFile DriveOpenFile;
178 WINPR_ATTR_NODISCARD psRdpdrDriveReadFile DriveReadFile;
179 WINPR_ATTR_NODISCARD psRdpdrDriveWriteFile DriveWriteFile;
180 WINPR_ATTR_NODISCARD psRdpdrDriveCloseFile DriveCloseFile;
181 WINPR_ATTR_NODISCARD psRdpdrDriveDeleteFile DriveDeleteFile;
182 WINPR_ATTR_NODISCARD psRdpdrDriveRenameFile DriveRenameFile;
183
184 /*** Drive callbacks registered by the server. ***/
185 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnDriveCreate;
187 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnDriveDelete;
189 psRdpdrOnDriveCreateDirectoryComplete OnDriveCreateDirectoryComplete;
190 psRdpdrOnDriveDeleteDirectoryComplete OnDriveDeleteDirectoryComplete;
191 psRdpdrOnDriveQueryDirectoryComplete OnDriveQueryDirectoryComplete;
192 psRdpdrOnDriveOpenFileComplete OnDriveOpenFileComplete;
193 psRdpdrOnDriveReadFileComplete OnDriveReadFileComplete;
194 psRdpdrOnDriveWriteFileComplete OnDriveWriteFileComplete;
195 psRdpdrOnDriveCloseFileComplete OnDriveCloseFileComplete;
196 psRdpdrOnDriveDeleteFileComplete OnDriveDeleteFileComplete;
197 psRdpdrOnDriveRenameFileComplete OnDriveRenameFileComplete;
198
199 /*** Serial Port callbacks registered by the server. ***/
200 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnSerialPortCreate;
202 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnSerialPortDelete;
205 /*** Parallel Port callbacks registered by the server. ***/
206 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnParallelPortCreate;
208 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnParallelPortDelete;
211 /*** Printer callbacks registered by the server. ***/
212 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnPrinterCreate;
214 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnPrinterDelete;
217 /*** Smartcard callbacks registered by the server. ***/
218 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate
221 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnSmartcardDelete;
224 rdpContext* rdpcontext;
225};
226
227FREERDP_API void rdpdr_server_context_free(RdpdrServerContext* context);
228
229WINPR_ATTR_MALLOC(rdpdr_server_context_free, 1)
230WINPR_ATTR_NODISCARD
231FREERDP_API RdpdrServerContext* rdpdr_server_context_new(HANDLE vcm);
232
233#ifdef __cplusplus
234}
235#endif
236
237#endif /* FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H */
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnPrinterCreate
WINPR_ATTR_NODISCARD psRdpdrCapablityPDU ReceiveCaps
WINPR_ATTR_NODISCARD psRdpdrCapablityPDU SendCaps
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnSerialPortCreate
WINPR_ATTR_NODISCARD psRdpdrReceiveClientNameRequest ReceiveClientNameRequest
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnDriveDelete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnSerialPortDelete
WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceRemove ReceiveDeviceRemove
WINPR_ATTR_NODISCARD psRdpdrReceiveAnnounceResponse ReceiveAnnounceResponse
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnSmartcardCreate
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnParallelPortDelete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnSmartcardDelete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnDriveCreate
WINPR_ATTR_NODISCARD psRdpdrReceivePDU ReceivePDU
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnParallelPortCreate
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnPrinterDelete
WINPR_ATTR_NODISCARD psRdpdrSendServerAnnounce SendServerAnnounce