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/types.h>
28#include <freerdp/channels/wtsvc.h>
29#include <freerdp/channels/rdpdr.h>
30#include <freerdp/utils/rdpdr_utils.h>
31
32#ifdef __cplusplus
33extern "C"
34{
35#endif
36
41 typedef struct s_rdpdr_server_context RdpdrServerContext;
42 typedef struct s_rdpdr_server_private RdpdrServerPrivate;
43
44 typedef struct
45 {
46 UINT16 Component;
47 UINT16 PacketId;
49
50#ifndef __MINGW32__
51typedef struct
52{
53 UINT32 NextEntryOffset;
54 UINT32 FileIndex;
55 LARGE_INTEGER CreationTime;
56 LARGE_INTEGER LastAccessTime;
57 LARGE_INTEGER LastWriteTime;
58 LARGE_INTEGER ChangeTime;
59 LARGE_INTEGER EndOfFile;
60 LARGE_INTEGER AllocationSize;
61 UINT32 FileAttributes;
62 char FileName[512];
64#endif
65
66typedef UINT (*psRdpdrStart)(RdpdrServerContext* context);
67typedef UINT (*psRdpdrStop)(RdpdrServerContext* context);
68
69typedef UINT (*psRdpdrCapablityPDU)(RdpdrServerContext* context,
70 const RDPDR_CAPABILITY_HEADER* header, size_t size,
71 const BYTE* data);
72typedef UINT (*psRdpdrReceivePDU)(RdpdrServerContext* context, const RDPDR_HEADER* header,
73 UINT error);
74typedef UINT (*psRdpdrReceiveAnnounceResponse)(RdpdrServerContext* context, UINT16 VersionMajor,
75 UINT16 VersionMinor, UINT32 ClientId);
76typedef UINT (*psRdpdrSendServerAnnounce)(RdpdrServerContext* context);
77typedef UINT (*psRdpdrReceiveDeviceAnnounce)(RdpdrServerContext* context,
78 const RdpdrDevice* device);
79typedef UINT (*psRdpdrReceiveDeviceRemove)(RdpdrServerContext* context, UINT32 deviceId,
80 const RdpdrDevice* device);
81typedef UINT (*psRdpdrReceiveClientNameRequest)(RdpdrServerContext* context, size_t ComputerNameLen,
82 const char* name);
83
84typedef UINT (*psRdpdrDriveCreateDirectory)(RdpdrServerContext* context, void* callbackData,
85 UINT32 deviceId, const char* path);
86typedef UINT (*psRdpdrDriveDeleteDirectory)(RdpdrServerContext* context, void* callbackData,
87 UINT32 deviceId, const char* path);
88typedef UINT (*psRdpdrDriveQueryDirectory)(RdpdrServerContext* context, void* callbackData,
89 UINT32 deviceId, const char* path);
90typedef UINT (*psRdpdrDriveOpenFile)(RdpdrServerContext* context, void* callbackData,
91 UINT32 deviceId, const char* path, UINT32 desiredAccess,
92 UINT32 createDisposition);
93typedef UINT (*psRdpdrDriveReadFile)(RdpdrServerContext* context, void* callbackData,
94 UINT32 deviceId, UINT32 fileId, UINT32 length, UINT32 offset);
95typedef UINT (*psRdpdrDriveWriteFile)(RdpdrServerContext* context, void* callbackData,
96 UINT32 deviceId, UINT32 fileId, const char* buffer,
97 UINT32 length, UINT32 offset);
98typedef UINT (*psRdpdrDriveCloseFile)(RdpdrServerContext* context, void* callbackData,
99 UINT32 deviceId, UINT32 fileId);
100typedef UINT (*psRdpdrDriveDeleteFile)(RdpdrServerContext* context, void* callbackData,
101 UINT32 deviceId, const char* path);
102typedef UINT (*psRdpdrDriveRenameFile)(RdpdrServerContext* context, void* callbackData,
103 UINT32 deviceId, const char* oldPath, const char* newPath);
104
105typedef void (*psRdpdrOnDriveCreateDirectoryComplete)(RdpdrServerContext* context,
106 void* callbackData, UINT32 ioStatus);
107typedef void (*psRdpdrOnDriveDeleteDirectoryComplete)(RdpdrServerContext* context,
108 void* callbackData, UINT32 ioStatus);
109typedef void (*psRdpdrOnDriveQueryDirectoryComplete)(RdpdrServerContext* context,
110 void* callbackData, UINT32 ioStatus,
112typedef void (*psRdpdrOnDriveOpenFileComplete)(RdpdrServerContext* context, void* callbackData,
113 UINT32 ioStatus, UINT32 deviceId, UINT32 fileId);
114typedef void (*psRdpdrOnDriveReadFileComplete)(RdpdrServerContext* context, void* callbackData,
115 UINT32 ioStatus, const char* buffer, UINT32 length);
116typedef void (*psRdpdrOnDriveWriteFileComplete)(RdpdrServerContext* context, void* callbackData,
117 UINT32 ioStatus, UINT32 bytesWritten);
118typedef void (*psRdpdrOnDriveCloseFileComplete)(RdpdrServerContext* context, void* callbackData,
119 UINT32 ioStatus);
120typedef void (*psRdpdrOnDriveDeleteFileComplete)(RdpdrServerContext* context, void* callbackData,
121 UINT32 ioStatus);
122typedef void (*psRdpdrOnDriveRenameFileComplete)(RdpdrServerContext* context, void* callbackData,
123 UINT32 ioStatus);
124
125typedef UINT (*psRdpdrOnDeviceCreate)(RdpdrServerContext* context, const RdpdrDevice* device);
126typedef UINT (*psRdpdrOnDeviceDelete)(RdpdrServerContext* context, UINT32 deviceId);
127
129{
130 HANDLE vcm;
131
132 psRdpdrStart Start;
133 psRdpdrStop Stop;
134
135 RdpdrServerPrivate* priv;
136
137 /* Server self-defined pointer. */
138 void* data;
139
147 UINT16 supported;
148
149 /*** RDPDR message intercept callbacks */
150 psRdpdrCapablityPDU ReceiveCaps;
151 psRdpdrCapablityPDU SendCaps;
152 psRdpdrReceivePDU ReceivePDU;
153 psRdpdrSendServerAnnounce
155 psRdpdrReceiveAnnounceResponse
157 psRdpdrReceiveClientNameRequest
159 psRdpdrReceiveDeviceAnnounce
160 ReceiveDeviceAnnounce;
162 psRdpdrReceiveDeviceRemove ReceiveDeviceRemove;
165 /*** Drive APIs called by the server. ***/
166 psRdpdrDriveCreateDirectory DriveCreateDirectory;
167 psRdpdrDriveDeleteDirectory DriveDeleteDirectory;
168 psRdpdrDriveQueryDirectory DriveQueryDirectory;
169 psRdpdrDriveOpenFile DriveOpenFile;
170 psRdpdrDriveReadFile DriveReadFile;
171 psRdpdrDriveWriteFile DriveWriteFile;
172 psRdpdrDriveCloseFile DriveCloseFile;
173 psRdpdrDriveDeleteFile DriveDeleteFile;
174 psRdpdrDriveRenameFile DriveRenameFile;
175
176 /*** Drive callbacks registered by the server. ***/
177 psRdpdrOnDeviceCreate OnDriveCreate;
179 psRdpdrOnDeviceDelete OnDriveDelete;
181 psRdpdrOnDriveCreateDirectoryComplete OnDriveCreateDirectoryComplete;
182 psRdpdrOnDriveDeleteDirectoryComplete OnDriveDeleteDirectoryComplete;
183 psRdpdrOnDriveQueryDirectoryComplete OnDriveQueryDirectoryComplete;
184 psRdpdrOnDriveOpenFileComplete OnDriveOpenFileComplete;
185 psRdpdrOnDriveReadFileComplete OnDriveReadFileComplete;
186 psRdpdrOnDriveWriteFileComplete OnDriveWriteFileComplete;
187 psRdpdrOnDriveCloseFileComplete OnDriveCloseFileComplete;
188 psRdpdrOnDriveDeleteFileComplete OnDriveDeleteFileComplete;
189 psRdpdrOnDriveRenameFileComplete OnDriveRenameFileComplete;
190
191 /*** Serial Port callbacks registered by the server. ***/
192 psRdpdrOnDeviceCreate OnSerialPortCreate;
194 psRdpdrOnDeviceDelete OnSerialPortDelete;
197 /*** Parallel Port callbacks registered by the server. ***/
198 psRdpdrOnDeviceCreate OnParallelPortCreate;
200 psRdpdrOnDeviceDelete OnParallelPortDelete;
203 /*** Printer callbacks registered by the server. ***/
204 psRdpdrOnDeviceCreate OnPrinterCreate;
206 psRdpdrOnDeviceDelete OnPrinterDelete;
209 /*** Smartcard callbacks registered by the server. ***/
210 psRdpdrOnDeviceCreate OnSmartcardCreate;
212 psRdpdrOnDeviceDelete OnSmartcardDelete;
215 rdpContext* rdpcontext;
216};
217
218FREERDP_API void rdpdr_server_context_free(RdpdrServerContext* context);
219
220WINPR_ATTR_MALLOC(rdpdr_server_context_free, 1)
221FREERDP_API RdpdrServerContext* rdpdr_server_context_new(HANDLE vcm);
222
223#ifdef __cplusplus
224}
225#endif
226
227#endif /* FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H */
psRdpdrOnDeviceDelete OnParallelPortDelete
psRdpdrReceiveDeviceRemove ReceiveDeviceRemove
psRdpdrReceiveAnnounceResponse ReceiveAnnounceResponse
psRdpdrOnDeviceCreate OnSerialPortCreate
psRdpdrSendServerAnnounce SendServerAnnounce
psRdpdrOnDeviceDelete OnPrinterDelete
psRdpdrOnDeviceDelete OnDriveDelete
psRdpdrOnDeviceDelete OnSerialPortDelete
psRdpdrOnDeviceCreate OnDriveCreate
psRdpdrOnDeviceCreate OnParallelPortCreate
psRdpdrOnDeviceCreate OnPrinterCreate
psRdpdrReceiveClientNameRequest ReceiveClientNameRequest
psRdpdrOnDeviceCreate OnSmartcardCreate
psRdpdrOnDeviceDelete OnSmartcardDelete
psRdpdrCapablityPDU ReceiveCaps
psRdpdrCapablityPDU SendCaps
psRdpdrReceivePDU ReceivePDU