23#ifndef FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H
24#define FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H
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/channels/scard.h>
32#include <freerdp/utils/rdpdr_utils.h>
44 typedef struct s_rdpdr_server_private RdpdrServerPrivate;
66#if defined(WITH_WCHAR_FILE_DIRECTORY_INFORMATION)
74 typedef UINT (*psRdpdrStart)(RdpdrServerContext* context);
75 typedef UINT (*psRdpdrStop)(RdpdrServerContext* context);
77 typedef UINT (*psRdpdrCapablityPDU)(RdpdrServerContext* context,
80 typedef UINT (*psRdpdrReceivePDU)(RdpdrServerContext* context,
const RDPDR_HEADER* header,
82 typedef UINT (*psRdpdrReceiveAnnounceResponse)(RdpdrServerContext* context, UINT16 VersionMajor,
83 UINT16 VersionMinor, UINT32 ClientId);
84 typedef UINT (*psRdpdrSendServerAnnounce)(RdpdrServerContext* context);
85 typedef UINT (*psRdpdrReceiveDeviceAnnounce)(RdpdrServerContext* context,
87 typedef UINT (*psRdpdrReceiveDeviceRemove)(RdpdrServerContext* context, UINT32 deviceId,
89 typedef UINT (*psRdpdrReceiveClientNameRequest)(RdpdrServerContext* context,
90 size_t ComputerNameLen,
const char* name);
92 typedef UINT (*psRdpdrDriveCreateDirectory)(RdpdrServerContext* context,
void* callbackData,
93 UINT32 deviceId,
const char* path);
94 typedef UINT (*psRdpdrDriveDeleteDirectory)(RdpdrServerContext* context,
void* callbackData,
95 UINT32 deviceId,
const char* path);
96 typedef UINT (*psRdpdrDriveQueryDirectory)(RdpdrServerContext* context,
void* callbackData,
97 UINT32 deviceId,
const char* path);
98 typedef UINT (*psRdpdrDriveOpenFile)(RdpdrServerContext* context,
void* callbackData,
99 UINT32 deviceId,
const char* path, UINT32 desiredAccess,
100 UINT32 createDisposition);
101 typedef UINT (*psRdpdrDriveReadFile)(RdpdrServerContext* context,
void* callbackData,
102 UINT32 deviceId, UINT32 fileId, UINT32 length,
104 typedef UINT (*psRdpdrDriveWriteFile)(RdpdrServerContext* context,
void* callbackData,
105 UINT32 deviceId, UINT32 fileId,
const char* buffer,
106 UINT32 length, UINT32 offset);
107 typedef UINT (*psRdpdrDriveCloseFile)(RdpdrServerContext* context,
void* callbackData,
108 UINT32 deviceId, UINT32 fileId);
109 typedef UINT (*psRdpdrDriveDeleteFile)(RdpdrServerContext* context,
void* callbackData,
110 UINT32 deviceId,
const char* path);
111 typedef UINT (*psRdpdrDriveRenameFile)(RdpdrServerContext* context,
void* callbackData,
112 UINT32 deviceId,
const char* oldPath,
113 const char* newPath);
115 typedef void (*psRdpdrOnDriveCreateDirectoryComplete)(RdpdrServerContext* context,
116 void* callbackData, UINT32 ioStatus);
117 typedef void (*psRdpdrOnDriveDeleteDirectoryComplete)(RdpdrServerContext* context,
118 void* callbackData, UINT32 ioStatus);
119 typedef void (*psRdpdrOnDriveQueryDirectoryComplete)(RdpdrServerContext* context,
120 void* callbackData, UINT32 ioStatus,
122 typedef void (*psRdpdrOnDriveOpenFileComplete)(RdpdrServerContext* context,
void* callbackData,
123 UINT32 ioStatus, UINT32 deviceId, UINT32 fileId);
124 typedef void (*psRdpdrOnDriveReadFileComplete)(RdpdrServerContext* context,
void* callbackData,
125 UINT32 ioStatus,
const char* buffer,
127 typedef void (*psRdpdrOnDriveWriteFileComplete)(RdpdrServerContext* context,
void* callbackData,
128 UINT32 ioStatus, UINT32 bytesWritten);
129 typedef void (*psRdpdrOnDriveCloseFileComplete)(RdpdrServerContext* context,
void* callbackData,
131 typedef void (*psRdpdrOnDriveDeleteFileComplete)(RdpdrServerContext* context,
132 void* callbackData, UINT32 ioStatus);
133 typedef void (*psRdpdrOnDriveRenameFileComplete)(RdpdrServerContext* context,
134 void* callbackData, UINT32 ioStatus);
136 typedef UINT (*psRdpdrOnDeviceCreate)(RdpdrServerContext* context,
const RdpdrDevice* device);
137 typedef UINT (*psRdpdrOnDeviceDelete)(RdpdrServerContext* context, UINT32 deviceId);
139 typedef UINT (*psRdpdrSmartcardEstablishContext)(RdpdrServerContext* context,
140 void* callbackData, UINT32 dwScope,
141 UINT32* completionId);
142 typedef UINT (*psRdpdrSmartcardReleaseContext)(RdpdrServerContext* context,
void* callbackData,
144 UINT32* completionId);
145 typedef UINT (*psRdpdrSmartcardIsValidContext)(RdpdrServerContext* context,
void* callbackData,
147 UINT32* completionId);
148 typedef UINT (*psRdpdrSmartcardListReaderGroups)(RdpdrServerContext* context,
151 UINT32* completionId);
152 typedef UINT (*psRdpdrSmartcardListReaders)(RdpdrServerContext* context,
void* callbackData,
154 typedef UINT (*psRdpdrSmartcardGetStatusChangeA)(RdpdrServerContext* context,
157 UINT32* completionId);
158 typedef UINT (*psRdpdrSmartcardGetStatusChangeW)(RdpdrServerContext* context,
161 UINT32* completionId);
162 typedef UINT (*psRdpdrSmartcardCancel)(RdpdrServerContext* context,
void* callbackData,
164 UINT32* completionId);
165 typedef UINT (*psRdpdrSmartcardConnectA)(RdpdrServerContext* context,
void* callbackData,
167 typedef UINT (*psRdpdrSmartcardConnectW)(RdpdrServerContext* context,
void* callbackData,
169 typedef UINT (*psRdpdrSmartcardReconnect)(RdpdrServerContext* context,
void* callbackData,
171 typedef UINT (*psRdpdrSmartcardDisconnect)(RdpdrServerContext* context,
void* callbackData,
173 UINT32* completionId);
174 typedef UINT (*psRdpdrSmartcardBeginTransaction)(RdpdrServerContext* context,
177 UINT32* completionId);
178 typedef UINT (*psRdpdrSmartcardEndTransaction)(RdpdrServerContext* context,
void* callbackData,
180 UINT32* completionId);
181 typedef UINT (*psRdpdrSmartcardStatus)(RdpdrServerContext* context,
void* callbackData,
183 typedef UINT (*psRdpdrSmartcardTransmit)(RdpdrServerContext* context,
void* callbackData,
185 typedef UINT (*psRdpdrSmartcardControl)(RdpdrServerContext* context,
void* callbackData,
187 typedef UINT (*psRdpdrSmartcardGetAttrib)(RdpdrServerContext* context,
void* callbackData,
189 typedef UINT (*psRdpdrSmartcardSetAttrib)(RdpdrServerContext* context,
void* callbackData,
192 typedef void (*psRdpdrOnSmartcardEstablishContextComplete)(RdpdrServerContext* context,
193 void* callbackData, UINT32 ioStatus,
196 typedef void (*psRdpdrOnSmartcardReleaseContextComplete)(RdpdrServerContext* context,
197 void* callbackData, UINT32 ioStatus,
199 typedef void (*psRdpdrOnSmartcardIsValidContextComplete)(RdpdrServerContext* context,
200 void* callbackData, UINT32 ioStatus,
202 typedef void (*psRdpdrOnSmartcardListReaderGroupsComplete)(RdpdrServerContext* context,
203 void* callbackData, UINT32 ioStatus,
206 typedef void (*psRdpdrOnSmartcardListReadersComplete)(RdpdrServerContext* context,
207 void* callbackData, UINT32 ioStatus,
210 typedef void (*psRdpdrOnSmartcardGetStatusChangeComplete)(RdpdrServerContext* context,
211 void* callbackData, UINT32 ioStatus,
214 typedef void (*psRdpdrOnSmartcardCancelComplete)(RdpdrServerContext* context,
215 void* callbackData, UINT32 ioStatus,
217 typedef void (*psRdpdrOnSmartcardConnectComplete)(RdpdrServerContext* context,
218 void* callbackData, UINT32 ioStatus,
220 typedef void (*psRdpdrOnSmartcardReconnectComplete)(RdpdrServerContext* context,
221 void* callbackData, UINT32 ioStatus,
224 typedef void (*psRdpdrOnSmartcardDisconnectComplete)(RdpdrServerContext* context,
225 void* callbackData, UINT32 ioStatus,
227 typedef void (*psRdpdrOnSmartcardBeginTransactionComplete)(RdpdrServerContext* context,
228 void* callbackData, UINT32 ioStatus,
230 typedef void (*psRdpdrOnSmartcardEndTransactionComplete)(RdpdrServerContext* context,
231 void* callbackData, UINT32 ioStatus,
233 typedef void (*psRdpdrOnSmartcardStatusComplete)(RdpdrServerContext* context,
234 void* callbackData, UINT32 ioStatus,
236 typedef void (*psRdpdrOnSmartcardTransmitComplete)(RdpdrServerContext* context,
237 void* callbackData, UINT32 ioStatus,
239 typedef void (*psRdpdrOnSmartcardControlComplete)(RdpdrServerContext* context,
240 void* callbackData, UINT32 ioStatus,
242 typedef void (*psRdpdrOnSmartcardGetAttribComplete)(RdpdrServerContext* context,
243 void* callbackData, UINT32 ioStatus,
246 typedef void (*psRdpdrOnSmartcardSetAttribComplete)(RdpdrServerContext* context,
247 void* callbackData, UINT32 ioStatus,
254 WINPR_ATTR_NODISCARD psRdpdrStart
Start;
272 WINPR_ATTR_NODISCARD psRdpdrCapablityPDU
274 WINPR_ATTR_NODISCARD psRdpdrCapablityPDU
276 WINPR_ATTR_NODISCARD psRdpdrReceivePDU
278 WINPR_ATTR_NODISCARD psRdpdrSendServerAnnounce
280 WINPR_ATTR_NODISCARD psRdpdrReceiveAnnounceResponse
282 WINPR_ATTR_NODISCARD psRdpdrReceiveClientNameRequest
284 WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceAnnounce
287 WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceRemove
292 WINPR_ATTR_NODISCARD psRdpdrDriveCreateDirectory
294 WINPR_ATTR_NODISCARD psRdpdrDriveDeleteDirectory
305 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate
308 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete
311 psRdpdrOnDriveCreateDirectoryComplete
313 psRdpdrOnDriveDeleteDirectoryComplete
315 psRdpdrOnDriveQueryDirectoryComplete
317 psRdpdrOnDriveOpenFileComplete
319 psRdpdrOnDriveReadFileComplete
321 psRdpdrOnDriveWriteFileComplete
323 psRdpdrOnDriveCloseFileComplete
325 psRdpdrOnDriveDeleteFileComplete
327 psRdpdrOnDriveRenameFileComplete
331 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate
334 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete
339 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate
342 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete
353 WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate
356 WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete
365 WINPR_ATTR_NODISCARD psRdpdrSmartcardEstablishContext
369 WINPR_ATTR_NODISCARD psRdpdrSmartcardReleaseContext
373 WINPR_ATTR_NODISCARD psRdpdrSmartcardIsValidContext
377 WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaderGroups
381 WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaderGroups
385 WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaders
389 WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaders
393 WINPR_ATTR_NODISCARD psRdpdrSmartcardGetStatusChangeA
397 WINPR_ATTR_NODISCARD psRdpdrSmartcardGetStatusChangeW
401 WINPR_ATTR_NODISCARD psRdpdrSmartcardCancel
405 WINPR_ATTR_NODISCARD psRdpdrSmartcardConnectA
409 WINPR_ATTR_NODISCARD psRdpdrSmartcardConnectW
413 WINPR_ATTR_NODISCARD psRdpdrSmartcardReconnect
417 WINPR_ATTR_NODISCARD psRdpdrSmartcardDisconnect
421 WINPR_ATTR_NODISCARD psRdpdrSmartcardBeginTransaction
425 WINPR_ATTR_NODISCARD psRdpdrSmartcardEndTransaction
429 WINPR_ATTR_NODISCARD psRdpdrSmartcardStatus
433 WINPR_ATTR_NODISCARD psRdpdrSmartcardStatus
437 WINPR_ATTR_NODISCARD psRdpdrSmartcardTransmit
441 WINPR_ATTR_NODISCARD psRdpdrSmartcardControl
445 WINPR_ATTR_NODISCARD psRdpdrSmartcardGetAttrib
449 WINPR_ATTR_NODISCARD psRdpdrSmartcardSetAttrib
455 psRdpdrOnSmartcardEstablishContextComplete
461 psRdpdrOnSmartcardReleaseContextComplete
466 psRdpdrOnSmartcardIsValidContextComplete
471 psRdpdrOnSmartcardListReaderGroupsComplete
477 psRdpdrOnSmartcardListReadersComplete
482 psRdpdrOnSmartcardGetStatusChangeComplete
499 psRdpdrOnSmartcardDisconnectComplete
504 psRdpdrOnSmartcardBeginTransactionComplete
510 psRdpdrOnSmartcardEndTransactionComplete
541 FREERDP_API
void rdpdr_server_context_free(RdpdrServerContext* context);
548 WINPR_ATTR_MALLOC(rdpdr_server_context_free, 1)
549 FREERDP_API RdpdrServerContext* rdpdr_server_context_new(HANDLE vcm);
557 FREERDP_API
void rdpdr_server_discard_request(RdpdrServerContext* context, UINT32 completionId);
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnPrinterCreate
WINPR_ATTR_NODISCARD psRdpdrCapablityPDU ReceiveCaps
psRdpdrOnDriveDeleteFileComplete OnDriveDeleteFileComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardEstablishContext SmartcardEstablishContext
psRdpdrOnSmartcardListReadersComplete OnSmartcardListReadersComplete
psRdpdrOnSmartcardBeginTransactionComplete OnSmartcardBeginTransactionComplete
psRdpdrOnSmartcardDisconnectComplete OnSmartcardDisconnectComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardTransmit SmartcardTransmit
WINPR_ATTR_NODISCARD psRdpdrDriveDeleteDirectory DriveDeleteDirectory
WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaders SmartcardListReadersA
WINPR_ATTR_NODISCARD psRdpdrCapablityPDU SendCaps
WINPR_ATTR_NODISCARD psRdpdrDriveQueryDirectory DriveQueryDirectory
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnSerialPortCreate
WINPR_ATTR_NODISCARD psRdpdrSmartcardIsValidContext SmartcardIsValidContext
WINPR_ATTR_NODISCARD psRdpdrStart Start
WINPR_ATTR_NODISCARD psRdpdrDriveCloseFile DriveCloseFile
psRdpdrOnDriveOpenFileComplete OnDriveOpenFileComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardGetStatusChangeW SmartcardGetStatusChangeW
psRdpdrOnDriveReadFileComplete OnDriveReadFileComplete
psRdpdrOnDriveDeleteDirectoryComplete OnDriveDeleteDirectoryComplete
psRdpdrOnSmartcardConnectComplete OnSmartcardConnectComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardGetStatusChangeA SmartcardGetStatusChangeA
psRdpdrOnSmartcardEstablishContextComplete OnSmartcardEstablishContextComplete
WINPR_ATTR_NODISCARD psRdpdrReceiveClientNameRequest ReceiveClientNameRequest
psRdpdrOnSmartcardIsValidContextComplete OnSmartcardIsValidContextComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardReleaseContext SmartcardReleaseContext
psRdpdrOnSmartcardReleaseContextComplete OnSmartcardReleaseContextComplete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnDriveDelete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnSerialPortDelete
WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceRemove ReceiveDeviceRemove
WINPR_ATTR_NODISCARD psRdpdrSmartcardReconnect SmartcardReconnect
WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaders SmartcardListReadersW
WINPR_ATTR_NODISCARD psRdpdrSmartcardStatus SmartcardStatusA
psRdpdrOnDriveQueryDirectoryComplete OnDriveQueryDirectoryComplete
psRdpdrOnSmartcardCancelComplete OnSmartcardCancelComplete
WINPR_ATTR_NODISCARD psRdpdrReceiveAnnounceResponse ReceiveAnnounceResponse
WINPR_ATTR_NODISCARD psRdpdrSmartcardConnectA SmartcardConnectA
WINPR_ATTR_NODISCARD psRdpdrSmartcardGetAttrib SmartcardGetAttrib
WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaderGroups SmartcardListReaderGroupsW
WINPR_ATTR_NODISCARD psRdpdrSmartcardControl SmartcardControl
WINPR_ATTR_NODISCARD psRdpdrSmartcardDisconnect SmartcardDisconnect
psRdpdrOnSmartcardEndTransactionComplete OnSmartcardEndTransactionComplete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnSmartcardCreate
psRdpdrOnSmartcardStatusComplete OnSmartcardStatusComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardCancel SmartcardCancel
WINPR_ATTR_NODISCARD psRdpdrReceiveDeviceAnnounce ReceiveDeviceAnnounce
WINPR_ATTR_NODISCARD psRdpdrSmartcardConnectW SmartcardConnectW
psRdpdrOnDriveWriteFileComplete OnDriveWriteFileComplete
psRdpdrOnSmartcardReconnectComplete OnSmartcardReconnectComplete
psRdpdrOnSmartcardControlComplete OnSmartcardControlComplete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnParallelPortDelete
WINPR_ATTR_NODISCARD psRdpdrSmartcardEndTransaction SmartcardEndTransaction
psRdpdrOnSmartcardListReaderGroupsComplete OnSmartcardListReaderGroupsComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardListReaderGroups SmartcardListReaderGroupsA
WINPR_ATTR_NODISCARD psRdpdrSmartcardStatus SmartcardStatusW
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnSmartcardDelete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnDriveCreate
WINPR_ATTR_NODISCARD psRdpdrReceivePDU ReceivePDU
WINPR_ATTR_NODISCARD psRdpdrDriveReadFile DriveReadFile
RdpdrServerPrivate * priv
psRdpdrOnSmartcardGetAttribComplete OnSmartcardGetAttribComplete
WINPR_ATTR_NODISCARD psRdpdrDriveOpenFile DriveOpenFile
psRdpdrOnDriveCreateDirectoryComplete OnDriveCreateDirectoryComplete
WINPR_ATTR_NODISCARD psRdpdrDriveRenameFile DriveRenameFile
WINPR_ATTR_NODISCARD psRdpdrDriveCreateDirectory DriveCreateDirectory
WINPR_ATTR_NODISCARD psRdpdrDriveDeleteFile DriveDeleteFile
psRdpdrOnSmartcardSetAttribComplete OnSmartcardSetAttribComplete
psRdpdrOnDriveCloseFileComplete OnDriveCloseFileComplete
WINPR_ATTR_NODISCARD psRdpdrOnDeviceCreate OnParallelPortCreate
WINPR_ATTR_NODISCARD psRdpdrSmartcardSetAttrib SmartcardSetAttrib
psRdpdrOnSmartcardTransmitComplete OnSmartcardTransmitComplete
psRdpdrOnDriveRenameFileComplete OnDriveRenameFileComplete
WINPR_ATTR_NODISCARD psRdpdrSmartcardBeginTransaction SmartcardBeginTransaction
WINPR_ATTR_NODISCARD psRdpdrOnDeviceDelete OnPrinterDelete
WINPR_ATTR_NODISCARD psRdpdrDriveWriteFile DriveWriteFile
psRdpdrOnSmartcardGetStatusChangeComplete OnSmartcardGetStatusChangeComplete
WINPR_ATTR_NODISCARD psRdpdrSendServerAnnounce SendServerAnnounce