Blame include/freerdp/channels/rdpdr.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit 1fb8d4
 * Device Redirection Virtual Channel
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2010-2011 Vic Lee
Packit 1fb8d4
 * Copyright 2010-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 * Copyright 2015 Thincast Technologies GmbH
Packit 1fb8d4
 * Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef FREERDP_CHANNEL_RDPDR_H
Packit 1fb8d4
#define FREERDP_CHANNEL_RDPDR_H
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/nt.h>
Packit 1fb8d4
#include <winpr/io.h>
Packit 1fb8d4
#include <winpr/crt.h>
Packit 1fb8d4
#include <winpr/file.h>
Packit 1fb8d4
#include <winpr/synch.h>
Packit 1fb8d4
#include <winpr/thread.h>
Packit 1fb8d4
#include <winpr/stream.h>
Packit 1fb8d4
#include <winpr/interlocked.h>
Packit 1fb8d4
#include <winpr/collections.h>
Packit 1fb8d4
Packit 1fb8d4
#include <freerdp/freerdp.h>
Packit 1fb8d4
Packit Service 5a9772
#define RDPDR_DEVICE_IO_REQUEST_LENGTH 24
Packit Service 5a9772
#define RDPDR_DEVICE_IO_RESPONSE_LENGTH 16
Packit 1fb8d4
Packit Service 5a9772
#define RDPDR_DEVICE_IO_CONTROL_REQ_HDR_LENGTH 32
Packit Service 5a9772
#define RDPDR_DEVICE_IO_CONTROL_RSP_HDR_LENGTH 4
Packit 1fb8d4
Packit 1fb8d4
/* RDPDR_HEADER.Component */
Packit 1fb8d4
enum RDPDR_CTYP
Packit 1fb8d4
{
Packit 1fb8d4
	RDPDR_CTYP_CORE = 0x4472,
Packit 1fb8d4
	RDPDR_CTYP_PRN = 0x5052
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* RDPDR_HEADER.PacketId */
Packit 1fb8d4
enum RDPDR_PAKID
Packit 1fb8d4
{
Packit 1fb8d4
	PAKID_CORE_SERVER_ANNOUNCE = 0x496E,
Packit 1fb8d4
	PAKID_CORE_CLIENTID_CONFIRM = 0x4343,
Packit 1fb8d4
	PAKID_CORE_CLIENT_NAME = 0x434E,
Packit 1fb8d4
	PAKID_CORE_DEVICELIST_ANNOUNCE = 0x4441,
Packit 1fb8d4
	PAKID_CORE_DEVICE_REPLY = 0x6472,
Packit 1fb8d4
	PAKID_CORE_DEVICE_IOREQUEST = 0x4952,
Packit 1fb8d4
	PAKID_CORE_DEVICE_IOCOMPLETION = 0x4943,
Packit 1fb8d4
	PAKID_CORE_SERVER_CAPABILITY = 0x5350,
Packit 1fb8d4
	PAKID_CORE_CLIENT_CAPABILITY = 0x4350,
Packit 1fb8d4
	PAKID_CORE_DEVICELIST_REMOVE = 0x444D,
Packit 1fb8d4
	PAKID_CORE_USER_LOGGEDON = 0x554C,
Packit 1fb8d4
	PAKID_PRN_CACHE_DATA = 0x5043,
Packit 1fb8d4
	PAKID_PRN_USING_XPS = 0x5543
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* CAPABILITY_HEADER.CapabilityType */
Packit 1fb8d4
enum RDPDR_CAP_TYPE
Packit 1fb8d4
{
Packit 1fb8d4
	CAP_GENERAL_TYPE = 0x0001,
Packit 1fb8d4
	CAP_PRINTER_TYPE = 0x0002,
Packit 1fb8d4
	CAP_PORT_TYPE = 0x0003,
Packit 1fb8d4
	CAP_DRIVE_TYPE = 0x0004,
Packit 1fb8d4
	CAP_SMARTCARD_TYPE = 0x0005
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* CAPABILITY_HEADER.Version */
Packit 1fb8d4
enum RDPDR_CAP_VERSION
Packit 1fb8d4
{
Packit 1fb8d4
	GENERAL_CAPABILITY_VERSION_01 = 0x00000001,
Packit 1fb8d4
	GENERAL_CAPABILITY_VERSION_02 = 0x00000002,
Packit 1fb8d4
	PRINT_CAPABILITY_VERSION_01 = 0x00000001,
Packit 1fb8d4
	PORT_CAPABILITY_VERSION_01 = 0x00000001,
Packit 1fb8d4
	DRIVE_CAPABILITY_VERSION_01 = 0x00000001,
Packit 1fb8d4
	DRIVE_CAPABILITY_VERSION_02 = 0x00000002,
Packit 1fb8d4
	SMARTCARD_CAPABILITY_VERSION_01 = 0x00000001
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* DR_DEVICE_IOREQUEST.MajorFunction */
Packit 1fb8d4
enum IRP_MJ
Packit 1fb8d4
{
Packit 1fb8d4
	IRP_MJ_CREATE = 0x00000000,
Packit 1fb8d4
	IRP_MJ_CLOSE = 0x00000002,
Packit 1fb8d4
	IRP_MJ_READ = 0x00000003,
Packit 1fb8d4
	IRP_MJ_WRITE = 0x00000004,
Packit 1fb8d4
	IRP_MJ_DEVICE_CONTROL = 0x0000000E,
Packit 1fb8d4
	IRP_MJ_QUERY_VOLUME_INFORMATION = 0x0000000A,
Packit 1fb8d4
	IRP_MJ_SET_VOLUME_INFORMATION = 0x0000000B,
Packit 1fb8d4
	IRP_MJ_QUERY_INFORMATION = 0x00000005,
Packit 1fb8d4
	IRP_MJ_SET_INFORMATION = 0x00000006,
Packit 1fb8d4
	IRP_MJ_DIRECTORY_CONTROL = 0x0000000C,
Packit 1fb8d4
	IRP_MJ_LOCK_CONTROL = 0x00000011
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* DR_DEVICE_IOREQUEST.MinorFunction */
Packit 1fb8d4
enum IRP_MN
Packit 1fb8d4
{
Packit 1fb8d4
	IRP_MN_QUERY_DIRECTORY = 0x00000001,
Packit 1fb8d4
	IRP_MN_NOTIFY_CHANGE_DIRECTORY = 0x00000002
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* DR_CREATE_REQ.CreateDisposition */
Packit 1fb8d4
Packit 1fb8d4
/* DR_CREATE_REQ.CreateOptions [MS-SMB2] */
Packit 1fb8d4
Packit 1fb8d4
/* DR_CREATE_REQ.DesiredAccess [MS-SMB2] */
Packit 1fb8d4
Packit 1fb8d4
/* DR_CREATE_RSP.Information */
Packit 1fb8d4
/* DR_DRIVE_CREATE_RSP.DeviceCreateResponse */
Packit 1fb8d4
Packit Service 5a9772
#define FILE_OPENED 0x00000001
Packit Service 5a9772
#define FILE_OVERWRITTEN 0x00000003
Packit 1fb8d4
Packit 1fb8d4
/* DR_CORE_CLIENT_ANNOUNCE_RSP.VersionMinor */
Packit 1fb8d4
enum RDPDR_MINOR_RDP_VERSION
Packit 1fb8d4
{
Packit 1fb8d4
	RDPDR_MINOR_RDP_VERSION_5_0 = 0x0002,
Packit 1fb8d4
	RDPDR_MINOR_RDP_VERSION_5_1 = 0x0005,
Packit 1fb8d4
	RDPDR_MINOR_RDP_VERSION_5_2 = 0x000A,
Packit 1fb8d4
	RDPDR_MINOR_RDP_VERSION_6_X = 0x000C
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* DR_CORE_CLIENT_NAME_REQ.UnicodeFlag */
Packit 1fb8d4
enum RDPDR_CLIENT_NAME_FLAG
Packit 1fb8d4
{
Packit 1fb8d4
	RDPDR_CLIENT_NAME_UNICODE = 0x00000001,
Packit 1fb8d4
	RDPDR_CLIENT_NAME_ASCII = 0x00000000
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* GENERAL_CAPS_SET.ioCode1 */
Packit 1fb8d4
enum RDPDR_CAPS_IRP_MJ
Packit 1fb8d4
{
Packit 1fb8d4
	RDPDR_IRP_MJ_CREATE = 0x00000001,
Packit 1fb8d4
	RDPDR_IRP_MJ_CLEANUP = 0x00000002,
Packit 1fb8d4
	RDPDR_IRP_MJ_CLOSE = 0x00000004,
Packit 1fb8d4
	RDPDR_IRP_MJ_READ = 0x00000008,
Packit 1fb8d4
	RDPDR_IRP_MJ_WRITE = 0x00000010,
Packit 1fb8d4
	RDPDR_IRP_MJ_FLUSH_BUFFERS = 0x00000020,
Packit 1fb8d4
	RDPDR_IRP_MJ_SHUTDOWN = 0x00000040,
Packit 1fb8d4
	RDPDR_IRP_MJ_DEVICE_CONTROL = 0x00000080,
Packit 1fb8d4
	RDPDR_IRP_MJ_QUERY_VOLUME_INFORMATION = 0x00000100,
Packit 1fb8d4
	RDPDR_IRP_MJ_SET_VOLUME_INFORMATION = 0x00000200,
Packit 1fb8d4
	RDPDR_IRP_MJ_QUERY_INFORMATION = 0x00000400,
Packit 1fb8d4
	RDPDR_IRP_MJ_SET_INFORMATION = 0x00000800,
Packit 1fb8d4
	RDPDR_IRP_MJ_DIRECTORY_CONTROL = 0x00001000,
Packit 1fb8d4
	RDPDR_IRP_MJ_LOCK_CONTROL = 0x00002000,
Packit 1fb8d4
	RDPDR_IRP_MJ_QUERY_SECURITY = 0x00004000,
Packit 1fb8d4
	RDPDR_IRP_MJ_SET_SECURITY = 0x00008000
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* GENERAL_CAPS_SET.extendedPDU */
Packit 1fb8d4
enum RDPDR_CAPS_PDU
Packit 1fb8d4
{
Packit 1fb8d4
	RDPDR_DEVICE_REMOVE_PDUS = 0x00000001,
Packit 1fb8d4
	RDPDR_CLIENT_DISPLAY_NAME_PDU = 0x00000002,
Packit 1fb8d4
	RDPDR_USER_LOGGEDON_PDU = 0x00000004
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* GENERAL_CAPS_SET.extraFlags1 */
Packit 1fb8d4
enum RDPDR_CAPS_FLAG
Packit 1fb8d4
{
Packit 1fb8d4
	ENABLE_ASYNCIO = 0x00000001
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* DR_DRIVE_LOCK_REQ.Operation */
Packit 1fb8d4
enum RDP_LOWIO_OP
Packit 1fb8d4
{
Packit 1fb8d4
	RDP_LOWIO_OP_SHAREDLOCK = 0x00000002,
Packit 1fb8d4
	RDP_LOWIO_OP_EXCLUSIVELOCK = 0x00000003,
Packit 1fb8d4
	RDP_LOWIO_OP_UNLOCK = 0x00000004,
Packit 1fb8d4
	RDP_LOWIO_OP_UNLOCK_MULTIPLE = 0x00000005
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
enum RDPDR_PRINTER_ANNOUNCE_FLAG
Packit 1fb8d4
{
Packit 1fb8d4
	RDPDR_PRINTER_ANNOUNCE_FLAG_ASCII = 0x00000001,
Packit 1fb8d4
	RDPDR_PRINTER_ANNOUNCE_FLAG_DEFAULTPRINTER = 0x00000002,
Packit 1fb8d4
	RDPDR_PRINTER_ANNOUNCE_FLAG_NETWORKPRINTER = 0x00000004,
Packit 1fb8d4
	RDPDR_PRINTER_ANNOUNCE_FLAG_TSPRINTER = 0x00000008,
Packit 1fb8d4
	RDPDR_PRINTER_ANNOUNCE_FLAG_XPSFORMAT = 0x00000010
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* [MS-FSCC] FileAttributes */
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
Packit Service 5a9772
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
Packit Service 5a9772
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
Packit Service 5a9772
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
Packit Service 5a9772
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
Packit Service 5a9772
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
Packit Service 5a9772
#define FILE_ATTRIBUTE_NORMAL 0x00000080
Packit Service 5a9772
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
Packit Service 5a9772
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
Packit Service 5a9772
#define FILE_ATTRIBUTE_READONLY 0x00000001
Packit Service 5a9772
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
Packit Service 5a9772
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
Packit Service 5a9772
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
Packit Service 5a9772
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* [MS-FSCC] FSCTL Structures */
Packit 1fb8d4
Packit 1fb8d4
#if !defined(_WIN32) || (defined(_WIN32) && (_WIN32_WINNT < 0x0600))
Packit Service 5a9772
#define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION 0x1400ec
Packit Service 5a9772
#define FSCTL_PIPE_PEEK 0x11400c
Packit Service 5a9772
#define FSCTL_PIPE_TRANSCEIVE 0x11c017
Packit Service 5a9772
#define FSCTL_PIPE_WAIT 0x110018
Packit Service 5a9772
#define FSCTL_QUERY_ON_DISK_VOLUME_INFO 0x9013c
Packit Service 5a9772
#define FSCTL_QUERY_SPARING_INFO 0x90138
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit Service 5a9772
#define FSCTL_CREATE_OR_GET_OBJECT_ID 0x900c0
Packit Service 5a9772
#define FSCTL_GET_REPARSE_POINT 0x900a8
Packit Service 5a9772
#define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
Packit Service 5a9772
#define FSCTL_IS_PATHNAME_VALID 0x9002c
Packit Service 5a9772
#define FSCTL_READ_FILE_USN_DATA 0x900eb
Packit Service 5a9772
#define FSCTL_RECALL_FILE 0x90117
Packit Service 5a9772
#define FSCTL_QUERY_FAT_BPB 0x90058
Packit Service 5a9772
#define FSCTL_QUERY_ALLOCATED_RANGES 0x940cf
Packit Service 5a9772
#define FSCTL_SET_COMPRESSION 0x9c040
Packit Service 5a9772
#define FSCTL_SET_ENCRYPTION 0x900D7
Packit Service 5a9772
#define FSCTL_SET_OBJECT_ID 0x90098
Packit Service 5a9772
#define FSCTL_SET_OBJECT_ID_EXTENDED 0x900bc
Packit Service 5a9772
#define FSCTL_SET_REPARSE_POINT 0x900a4
Packit Service 5a9772
#define FSCTL_SET_SPARSE 0x900c4
Packit Service 5a9772
#define FSCTL_SET_ZERO_DATA 0x980c8
Packit Service 5a9772
#define FSCTL_SIS_COPYFILE 0x90100
Packit Service 5a9772
#define FSCTL_WRITE_USN_CLOSE_RECORD 0x900ef
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#if !defined(_WIN32) || (defined(_WIN32) && (_WIN32_WINNT < 0x0600))
Packit Service 5a9772
#define FSCTL_SET_DEFECT_MANAGEMENT 0x98134
Packit Service 5a9772
#define FSCTL_SET_ZERO_ON_DEALLOCATION 0x90194
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* [MS-FSCC] FileFsAttributeInformation.FileSystemAttributes */
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
Packit Service 5a9772
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
Packit Service 5a9772
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
Packit Service 5a9772
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
Packit Service 5a9772
#define FILE_SUPPORTS_HARD_LINKS 0x00400000
Packit Service 5a9772
#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
Packit Service 5a9772
#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
Packit Service 5a9772
#define FILE_READ_ONLY_VOLUME 0x00080000
Packit Service 5a9772
#define FILE_NAMED_STREAMS 0x00040000
Packit Service 5a9772
#define FILE_SUPPORTS_ENCRYPTION 0x00020000
Packit Service 5a9772
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
Packit Service 5a9772
#define FILE_VOLUME_IS_COMPRESSED 0x00008000
Packit Service 5a9772
#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
Packit Service 5a9772
#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
Packit Service 5a9772
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
Packit Service 5a9772
#define FILE_VOLUME_QUOTAS 0x00000020
Packit Service 5a9772
#define FILE_FILE_COMPRESSION 0x00000010
Packit Service 5a9772
#define FILE_PERSISTENT_ACLS 0x00000008
Packit Service 5a9772
#define FILE_UNICODE_ON_DISK 0x00000004
Packit Service 5a9772
#define FILE_CASE_PRESERVED_NAMES 0x00000002
Packit Service 5a9772
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* [MS-FSCC] FileFsDeviceInformation.DeviceType */
Packit 1fb8d4
Packit 1fb8d4
#ifndef FILE_DEVICE_CD_ROM
Packit Service 5a9772
#define FILE_DEVICE_CD_ROM 0x00000002
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef FILE_DEVICE_DISK
Packit Service 5a9772
#define FILE_DEVICE_DISK 0x00000007
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* [MS-FSCC] FileFsDeviceInformation.Characteristics */
Packit 1fb8d4
enum FILE_FS_DEVICE_FLAG
Packit 1fb8d4
{
Packit 1fb8d4
	FILE_REMOVABLE_MEDIA = 0x00000001,
Packit 1fb8d4
	FILE_READ_ONLY_DEVICE = 0x00000002,
Packit 1fb8d4
	FILE_FLOPPY_DISKETTE = 0x00000004,
Packit 1fb8d4
	FILE_WRITE_ONCE_MEDIA = 0x00000008,
Packit 1fb8d4
	FILE_REMOTE_DEVICE = 0x00000010,
Packit 1fb8d4
	FILE_DEVICE_IS_MOUNTED = 0x00000020,
Packit 1fb8d4
	FILE_VIRTUAL_VOLUME = 0x00000040,
Packit 1fb8d4
	FILE_DEVICE_SECURE_OPEN = 0x00000100
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
enum FILE_FS_INFORMATION_CLASS
Packit 1fb8d4
{
Packit 1fb8d4
	FileFsVolumeInformation = 1,
Packit 1fb8d4
	FileFsLabelInformation,
Packit 1fb8d4
	FileFsSizeInformation,
Packit 1fb8d4
	FileFsDeviceInformation,
Packit 1fb8d4
	FileFsAttributeInformation,
Packit 1fb8d4
	FileFsControlInformation,
Packit 1fb8d4
	FileFsFullSizeInformation,
Packit 1fb8d4
	FileFsObjectIdInformation,
Packit 1fb8d4
	FileFsDriverPathInformation,
Packit 1fb8d4
	FileFsMaximumInformation
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
typedef struct _DEVICE DEVICE;
Packit 1fb8d4
typedef struct _IRP IRP;
Packit 1fb8d4
typedef struct _DEVMAN DEVMAN;
Packit 1fb8d4
Packit Service 5a9772
typedef UINT (*pcCustomComponentRequest)(DEVICE* device, UINT16 component, UINT16 packetId,
Packit Service 5a9772
                                         wStream* s);
Packit Service 5a9772
typedef UINT (*pcIRPRequest)(DEVICE* device, IRP* irp);
Packit Service 5a9772
typedef UINT (*pcInitDevice)(DEVICE* device);
Packit Service 5a9772
typedef UINT (*pcFreeDevice)(DEVICE* device);
Packit 1fb8d4
Packit 1fb8d4
struct _DEVICE
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 id;
Packit 1fb8d4
Packit 1fb8d4
	UINT32 type;
Packit 1fb8d4
	const char* name;
Packit 1fb8d4
	wStream* data;
Packit 1fb8d4
Packit Service 5a9772
	pcCustomComponentRequest CustomComponentRequest;
Packit 1fb8d4
	pcIRPRequest IRPRequest;
Packit 1fb8d4
	pcInitDevice Init;
Packit 1fb8d4
	pcFreeDevice Free;
Packit 1fb8d4
};
Packit 1fb8d4
Packit Service 5a9772
typedef UINT (*pcIRPResponse)(IRP* irp);
Packit 1fb8d4
Packit 1fb8d4
struct _IRP
Packit 1fb8d4
{
Packit 1fb8d4
	WINPR_SLIST_ENTRY ItemEntry;
Packit 1fb8d4
Packit 1fb8d4
	DEVICE* device;
Packit 1fb8d4
	DEVMAN* devman;
Packit 1fb8d4
	UINT32 FileId;
Packit 1fb8d4
	UINT32 CompletionId;
Packit 1fb8d4
	UINT32 MajorFunction;
Packit 1fb8d4
	UINT32 MinorFunction;
Packit 1fb8d4
	wStream* input;
Packit 1fb8d4
Packit 1fb8d4
	UINT32 IoStatus;
Packit 1fb8d4
	wStream* output;
Packit 1fb8d4
Packit 1fb8d4
	pcIRPResponse Complete;
Packit 1fb8d4
	pcIRPResponse Discard;
Packit 1fb8d4
Packit 1fb8d4
	HANDLE thread;
Packit 1fb8d4
	BOOL cancelled;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
struct _DEVMAN
Packit 1fb8d4
{
Packit 1fb8d4
	void* plugin;
Packit 1fb8d4
	UINT32 id_sequence;
Packit 1fb8d4
	wListDictionary* devices;
Packit 1fb8d4
};
Packit 1fb8d4
Packit Service 5a9772
typedef UINT (*pcRegisterDevice)(DEVMAN* devman, DEVICE* device);
Packit 1fb8d4
Packit 1fb8d4
struct _DEVICE_SERVICE_ENTRY_POINTS
Packit 1fb8d4
{
Packit 1fb8d4
	DEVMAN* devman;
Packit 1fb8d4
Packit 1fb8d4
	pcRegisterDevice RegisterDevice;
Packit 1fb8d4
	RDPDR_DEVICE* device;
Packit 1fb8d4
	rdpContext* rdpcontext;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _DEVICE_SERVICE_ENTRY_POINTS DEVICE_SERVICE_ENTRY_POINTS;
Packit 1fb8d4
typedef DEVICE_SERVICE_ENTRY_POINTS* PDEVICE_SERVICE_ENTRY_POINTS;
Packit 1fb8d4
Packit Service 5a9772
typedef UINT (*PDEVICE_SERVICE_ENTRY)(PDEVICE_SERVICE_ENTRY_POINTS);
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_CHANNEL_RDPDR_H */