23#ifndef FREERDP_CHANNEL_RDPDR_H 
   24#define FREERDP_CHANNEL_RDPDR_H 
   29#include <winpr/file.h> 
   30#include <winpr/synch.h> 
   31#include <winpr/thread.h> 
   32#include <winpr/stream.h> 
   33#include <winpr/interlocked.h> 
   34#include <winpr/collections.h> 
   36#include <freerdp/api.h> 
   37#include <freerdp/types.h> 
   38#include <freerdp/settings.h> 
   49#define RDPDR_CHANNEL_NAME "rdpdr" 
   50#define RDPDR_SVC_CHANNEL_NAME "rdpdr" 
   52#define RDPDR_DEVICE_IO_REQUEST_LENGTH 24 
   53#define RDPDR_DEVICE_IO_RESPONSE_LENGTH 16 
   55#define RDPDR_DEVICE_IO_CONTROL_REQ_HDR_LENGTH 32 
   56#define RDPDR_DEVICE_IO_CONTROL_RSP_HDR_LENGTH 4 
   58#define RDPDR_VERSION_MAJOR 0x0001 
   60#define RDPDR_VERSION_MINOR_RDP50 0x0002 
   61#define RDPDR_VERSION_MINOR_RDP51 0x0005 
   62#define RDPDR_VERSION_MINOR_RDP52 0x000A 
   63#define RDPDR_VERSION_MINOR_RDP6X 0x000C 
   64#define RDPDR_VERSION_MINOR_RDP10X 0x000D 
   69  RDPDR_CTYP_CORE = 0x4472,
 
   70  RDPDR_CTYP_PRN = 0x5052
 
   76  PAKID_CORE_SERVER_ANNOUNCE = 0x496E,
 
   77  PAKID_CORE_CLIENTID_CONFIRM = 0x4343,
 
   78  PAKID_CORE_CLIENT_NAME = 0x434E,
 
   79  PAKID_CORE_DEVICELIST_ANNOUNCE = 0x4441,
 
   80  PAKID_CORE_DEVICE_REPLY = 0x6472,
 
   81  PAKID_CORE_DEVICE_IOREQUEST = 0x4952,
 
   82  PAKID_CORE_DEVICE_IOCOMPLETION = 0x4943,
 
   83  PAKID_CORE_SERVER_CAPABILITY = 0x5350,
 
   84  PAKID_CORE_CLIENT_CAPABILITY = 0x4350,
 
   85  PAKID_CORE_DEVICELIST_REMOVE = 0x444D,
 
   86  PAKID_CORE_USER_LOGGEDON = 0x554C,
 
   87  PAKID_PRN_CACHE_DATA = 0x5043,
 
   88  PAKID_PRN_USING_XPS = 0x5543
 
   94  CAP_GENERAL_TYPE = 0x0001,
 
   95  CAP_PRINTER_TYPE = 0x0002,
 
   96  CAP_PORT_TYPE = 0x0003,
 
   97  CAP_DRIVE_TYPE = 0x0004,
 
   98  CAP_SMARTCARD_TYPE = 0x0005
 
  102enum RDPDR_CAP_VERSION
 
  104  GENERAL_CAPABILITY_VERSION_01 = 0x00000001,
 
  105  GENERAL_CAPABILITY_VERSION_02 = 0x00000002,
 
  106  PRINT_CAPABILITY_VERSION_01 = 0x00000001,
 
  107  PORT_CAPABILITY_VERSION_01 = 0x00000001,
 
  108  DRIVE_CAPABILITY_VERSION_01 = 0x00000001,
 
  109  DRIVE_CAPABILITY_VERSION_02 = 0x00000002,
 
  110  SMARTCARD_CAPABILITY_VERSION_01 = 0x00000001
 
  116  IRP_MJ_CREATE = 0x00000000,
 
  117  IRP_MJ_CLOSE = 0x00000002,
 
  118  IRP_MJ_READ = 0x00000003,
 
  119  IRP_MJ_WRITE = 0x00000004,
 
  120  IRP_MJ_DEVICE_CONTROL = 0x0000000E,
 
  121  IRP_MJ_QUERY_VOLUME_INFORMATION = 0x0000000A,
 
  122  IRP_MJ_SET_VOLUME_INFORMATION = 0x0000000B,
 
  123  IRP_MJ_QUERY_INFORMATION = 0x00000005,
 
  124  IRP_MJ_SET_INFORMATION = 0x00000006,
 
  125  IRP_MJ_DIRECTORY_CONTROL = 0x0000000C,
 
  126  IRP_MJ_LOCK_CONTROL = 0x00000011
 
  132  IRP_MN_QUERY_DIRECTORY = 0x00000001,
 
  133  IRP_MN_NOTIFY_CHANGE_DIRECTORY = 0x00000002
 
  147#define RDPDR_MAJOR_RDP_VERSION 1 
  148enum RDPDR_MINOR_RDP_VERSION
 
  150  RDPDR_MINOR_RDP_VERSION_5_0 = 0x0002,
 
  151  RDPDR_MINOR_RDP_VERSION_5_1 = 0x0005,
 
  152  RDPDR_MINOR_RDP_VERSION_5_2 = 0x000A,
 
  153  RDPDR_MINOR_RDP_VERSION_6_X = 0x000C,
 
  154  RDPDR_MINOR_RDP_VERSION_13 = 0x000D
 
  158enum RDPDR_CLIENT_NAME_FLAG
 
  160  RDPDR_CLIENT_NAME_UNICODE = 0x00000001,
 
  161  RDPDR_CLIENT_NAME_ASCII = 0x00000000
 
  165enum RDPDR_CAPS_IRP_MJ
 
  167  RDPDR_IRP_MJ_CREATE = 0x00000001,
 
  168  RDPDR_IRP_MJ_CLEANUP = 0x00000002,
 
  169  RDPDR_IRP_MJ_CLOSE = 0x00000004,
 
  170  RDPDR_IRP_MJ_READ = 0x00000008,
 
  171  RDPDR_IRP_MJ_WRITE = 0x00000010,
 
  172  RDPDR_IRP_MJ_FLUSH_BUFFERS = 0x00000020,
 
  173  RDPDR_IRP_MJ_SHUTDOWN = 0x00000040,
 
  174  RDPDR_IRP_MJ_DEVICE_CONTROL = 0x00000080,
 
  175  RDPDR_IRP_MJ_QUERY_VOLUME_INFORMATION = 0x00000100,
 
  176  RDPDR_IRP_MJ_SET_VOLUME_INFORMATION = 0x00000200,
 
  177  RDPDR_IRP_MJ_QUERY_INFORMATION = 0x00000400,
 
  178  RDPDR_IRP_MJ_SET_INFORMATION = 0x00000800,
 
  179  RDPDR_IRP_MJ_DIRECTORY_CONTROL = 0x00001000,
 
  180  RDPDR_IRP_MJ_LOCK_CONTROL = 0x00002000,
 
  181  RDPDR_IRP_MJ_QUERY_SECURITY = 0x00004000,
 
  182  RDPDR_IRP_MJ_SET_SECURITY = 0x00008000
 
  188  RDPDR_DEVICE_REMOVE_PDUS = 0x00000001,
 
  189  RDPDR_CLIENT_DISPLAY_NAME_PDU = 0x00000002,
 
  190  RDPDR_USER_LOGGEDON_PDU = 0x00000004
 
  196  ENABLE_ASYNCIO = 0x00000001
 
  202  RDP_LOWIO_OP_SHAREDLOCK = 0x00000002,
 
  203  RDP_LOWIO_OP_EXCLUSIVELOCK = 0x00000003,
 
  204  RDP_LOWIO_OP_UNLOCK = 0x00000004,
 
  205  RDP_LOWIO_OP_UNLOCK_MULTIPLE = 0x00000005
 
  208enum RDPDR_PRINTER_ANNOUNCE_FLAG
 
  210  RDPDR_PRINTER_ANNOUNCE_FLAG_ASCII = 0x00000001,
 
  211  RDPDR_PRINTER_ANNOUNCE_FLAG_DEFAULTPRINTER = 0x00000002,
 
  212  RDPDR_PRINTER_ANNOUNCE_FLAG_NETWORKPRINTER = 0x00000004,
 
  213  RDPDR_PRINTER_ANNOUNCE_FLAG_TSPRINTER = 0x00000008,
 
  214  RDPDR_PRINTER_ANNOUNCE_FLAG_XPSFORMAT = 0x00000010
 
  223#if !defined(_WIN32) || (defined(_WIN32) && (_WIN32_WINNT < 0x0600)) 
  224#define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION 0x1400ec 
  225#define FSCTL_PIPE_PEEK 0x11400c 
  226#define FSCTL_PIPE_TRANSCEIVE 0x11c017 
  227#define FSCTL_PIPE_WAIT 0x110018 
  228#define FSCTL_QUERY_ON_DISK_VOLUME_INFO 0x9013c 
  229#define FSCTL_QUERY_SPARING_INFO 0x90138 
  233#define FSCTL_CREATE_OR_GET_OBJECT_ID 0x900c0 
  234#define FSCTL_GET_REPARSE_POINT 0x900a8 
  235#define FSCTL_GET_RETRIEVAL_POINTERS 0x90073 
  236#define FSCTL_IS_PATHNAME_VALID 0x9002c 
  237#define FSCTL_READ_FILE_USN_DATA 0x900eb 
  238#define FSCTL_RECALL_FILE 0x90117 
  239#define FSCTL_QUERY_FAT_BPB 0x90058 
  240#define FSCTL_QUERY_ALLOCATED_RANGES 0x940cf 
  241#define FSCTL_SET_COMPRESSION 0x9c040 
  242#define FSCTL_SET_ENCRYPTION 0x900D7 
  243#define FSCTL_SET_OBJECT_ID 0x90098 
  244#define FSCTL_SET_OBJECT_ID_EXTENDED 0x900bc 
  245#define FSCTL_SET_REPARSE_POINT 0x900a4 
  246#define FSCTL_SET_SPARSE 0x900c4 
  247#define FSCTL_SET_ZERO_DATA 0x980c8 
  248#define FSCTL_SIS_COPYFILE 0x90100 
  249#define FSCTL_WRITE_USN_CLOSE_RECORD 0x900ef 
  252#if !defined(_WIN32) || (defined(_WIN32) && (_WIN32_WINNT < 0x0600)) 
  253#define FSCTL_SET_DEFECT_MANAGEMENT 0x98134 
  254#define FSCTL_SET_ZERO_ON_DEALLOCATION 0x90194 
  261#define FILE_SUPPORTS_USN_JOURNAL 0x02000000 
  262#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 
  263#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 
  264#define FILE_SUPPORTS_HARD_LINKS 0x00400000 
  265#define FILE_SUPPORTS_TRANSACTIONS 0x00200000 
  266#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 
  267#define FILE_READ_ONLY_VOLUME 0x00080000 
  268#define FILE_NAMED_STREAMS 0x00040000 
  269#define FILE_SUPPORTS_ENCRYPTION 0x00020000 
  270#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 
  271#define FILE_VOLUME_IS_COMPRESSED 0x00008000 
  272#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 
  273#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 
  274#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 
  275#define FILE_VOLUME_QUOTAS 0x00000020 
  276#define FILE_FILE_COMPRESSION 0x00000010 
  277#define FILE_PERSISTENT_ACLS 0x00000008 
  278#define FILE_UNICODE_ON_DISK 0x00000004 
  279#define FILE_CASE_PRESERVED_NAMES 0x00000002 
  280#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 
  286#ifndef FILE_DEVICE_CD_ROM 
  287#define FILE_DEVICE_CD_ROM 0x00000002 
  290#ifndef FILE_DEVICE_DISK 
  291#define FILE_DEVICE_DISK 0x00000007 
  295enum FILE_FS_DEVICE_FLAG
 
  297  FILE_REMOVABLE_MEDIA = 0x00000001,
 
  298  FILE_READ_ONLY_DEVICE = 0x00000002,
 
  299  FILE_FLOPPY_DISKETTE = 0x00000004,
 
  300  FILE_WRITE_ONCE_MEDIA = 0x00000008,
 
  301  FILE_REMOTE_DEVICE = 0x00000010,
 
  302  FILE_DEVICE_IS_MOUNTED = 0x00000020,
 
  303  FILE_VIRTUAL_VOLUME = 0x00000040,
 
  304  FILE_DEVICE_SECURE_OPEN = 0x00000100
 
  308enum FILE_FS_INFORMATION_CLASS
 
  310  FileFsVolumeInformation = 1,
 
  311  FileFsLabelInformation,
 
  312  FileFsSizeInformation,
 
  313  FileFsDeviceInformation,
 
  314  FileFsAttributeInformation,
 
  315  FileFsControlInformation,
 
  316  FileFsFullSizeInformation,
 
  317  FileFsObjectIdInformation,
 
  318  FileFsDriverPathInformation,
 
  319  FileFsMaximumInformation
 
  324typedef struct S_IRP IRP;
 
  327typedef UINT (*pcCustomComponentRequest)(DEVICE* device, UINT16 component, UINT16 packetId,
 
  329typedef UINT (*pcIRPRequest)(DEVICE* device, IRP* irp);
 
  330typedef UINT (*pcInitDevice)(DEVICE* device);
 
  331typedef UINT (*pcFreeDevice)(DEVICE* device);
 
  341  pcCustomComponentRequest CustomComponentRequest;
 
  342  pcIRPRequest IRPRequest;
 
 
  347typedef UINT (*pcIRPResponse)(IRP* irp);
 
  351  WINPR_SLIST_ENTRY ItemEntry;
 
  357  UINT32 MajorFunction;
 
  358  UINT32 MinorFunction;
 
  364  pcIRPResponse Complete;
 
  365  pcIRPResponse Discard;
 
 
  375  wListDictionary* devices;
 
 
  378typedef UINT (*pcRegisterDevice)(DEVMAN* devman, DEVICE* device);
 
  384  pcRegisterDevice RegisterDevice;
 
  386  rdpContext* rdpcontext;