/*++ Copyright (C) Microsoft Corporation, All Rights Reserved Module Name: vhidmini.h Abstract: This module contains the type definitions for the driver Environment: Windows Driver Framework (WDF) --*/ #ifdef _KERNEL_MODE #include #else #include #endif #include #include // located in $(DDK_INC_PATH)/wdm #include "common.h" typedef UCHAR HID_REPORT_DESCRIPTOR, *PHID_REPORT_DESCRIPTOR; DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD EvtDeviceAdd; EVT_WDF_TIMER EvtTimerFunc; typedef struct _DEVICE_CONTEXT { WDFDEVICE Device; WDFQUEUE DefaultQueue; WDFQUEUE ManualQueue; HID_DEVICE_ATTRIBUTES HidDeviceAttributes; BYTE DeviceData; HID_DESCRIPTOR HidDescriptor; PHID_REPORT_DESCRIPTOR ReportDescriptor; BOOLEAN ReadReportDescFromRegistry; } DEVICE_CONTEXT, *PDEVICE_CONTEXT; WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_CONTEXT, GetDeviceContext); typedef struct _QUEUE_CONTEXT { WDFQUEUE Queue; PDEVICE_CONTEXT DeviceContext; UCHAR OutputReport; } QUEUE_CONTEXT, *PQUEUE_CONTEXT; WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(QUEUE_CONTEXT, GetQueueContext); NTSTATUS QueueCreate( _In_ WDFDEVICE Device, _Out_ WDFQUEUE *Queue ); typedef struct _MANUAL_QUEUE_CONTEXT { WDFQUEUE Queue; PDEVICE_CONTEXT DeviceContext; WDFTIMER Timer; } MANUAL_QUEUE_CONTEXT, *PMANUAL_QUEUE_CONTEXT; WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(MANUAL_QUEUE_CONTEXT, GetManualQueueContext); NTSTATUS ManualQueueCreate( _In_ WDFDEVICE Device, _Out_ WDFQUEUE *Queue ); NTSTATUS ReadReport( _In_ PQUEUE_CONTEXT QueueContext, _In_ WDFREQUEST Request, _Always_(_Out_) BOOLEAN* CompleteRequest ); NTSTATUS WriteReport( _In_ PQUEUE_CONTEXT QueueContext, _In_ WDFREQUEST Request ); NTSTATUS GetFeature( _In_ PQUEUE_CONTEXT QueueContext, _In_ WDFREQUEST Request ); NTSTATUS SetFeature( _In_ PQUEUE_CONTEXT QueueContext, _In_ WDFREQUEST Request ); NTSTATUS GetInputReport( _In_ PQUEUE_CONTEXT QueueContext, _In_ WDFREQUEST Request ); NTSTATUS SetOutputReport( _In_ PQUEUE_CONTEXT QueueContext, _In_ WDFREQUEST Request ); NTSTATUS GetString( _In_ WDFREQUEST Request ); NTSTATUS GetIndexedString( _In_ WDFREQUEST Request ); NTSTATUS GetStringId( _In_ WDFREQUEST Request, _Out_ ULONG *StringId, _Out_ ULONG *LanguageId ); NTSTATUS RequestCopyFromBuffer( _In_ WDFREQUEST Request, _In_ PVOID SourceBuffer, _When_(NumBytesToCopyFrom == 0, __drv_reportError(NumBytesToCopyFrom cannot be zero)) _In_ size_t NumBytesToCopyFrom ); NTSTATUS RequestGetHidXferPacket_ToReadFromDevice( _In_ WDFREQUEST Request, _Out_ HID_XFER_PACKET *Packet ); NTSTATUS RequestGetHidXferPacket_ToWriteToDevice( _In_ WDFREQUEST Request, _Out_ HID_XFER_PACKET *Packet ); NTSTATUS CheckRegistryForDescriptor( _In_ WDFDEVICE Device ); NTSTATUS ReadDescriptorFromRegistry( _In_ WDFDEVICE Device ); // // Misc definitions // #define CONTROL_FEATURE_REPORT_ID 0x01 // // These are the device attributes returned by the mini driver in response // to IOCTL_HID_GET_DEVICE_ATTRIBUTES. // #define HIDMINI_PID 0xFEED #define HIDMINI_VID 0xDEED #define HIDMINI_VERSION 0x0101