1 /* 2 * PROJECT: ReactOS InPort (Bus) Mouse Driver 3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) 4 * PURPOSE: Main header file 5 * COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com) 6 */ 7 8 #ifndef _INPORT_H_ 9 #define _INPORT_H_ 10 11 #include <wdm.h> 12 #include <wmilib.h> 13 #include <wmistr.h> 14 #include <kbdmou.h> 15 16 #define INPORT_TAG 'tPnI' 17 18 typedef enum 19 { 20 dsStopped, 21 dsStarted, 22 dsRemoved 23 } INPORT_DEVICE_STATE; 24 25 typedef enum 26 { 27 NecBusMouse, 28 MsInPortMouse, 29 LogitechBusMouse 30 } INPORT_MOUSE_TYPE; 31 32 typedef struct _INPORT_RAW_DATA 33 { 34 CHAR DeltaX; 35 CHAR DeltaY; 36 UCHAR Buttons; 37 ULONG ButtonDiff; 38 } INPORT_RAW_DATA, *PINPORT_RAW_DATA; 39 40 typedef struct _INPORT_DEVICE_EXTENSION 41 { 42 PDEVICE_OBJECT Self; 43 PDEVICE_OBJECT Pdo; 44 PDEVICE_OBJECT Ldo; 45 INPORT_DEVICE_STATE State; 46 IO_REMOVE_LOCK RemoveLock; 47 WMILIB_CONTEXT WmiLibInfo; 48 PUCHAR IoBase; 49 INPORT_MOUSE_TYPE MouseType; 50 51 /* Interrupt */ 52 PKINTERRUPT InterruptObject; 53 ULONG InterruptVector; 54 KIRQL InterruptLevel; 55 KINTERRUPT_MODE InterruptMode; 56 BOOLEAN InterruptShared; 57 KAFFINITY InterruptAffinity; 58 59 /* Movement data and state of the mouse buttons */ 60 INPORT_RAW_DATA RawData; 61 62 /* Mouclass */ 63 CONNECT_DATA ConnectData; 64 PDEVICE_OBJECT ClassDeviceObject; 65 PVOID ClassService; 66 67 /* Mouse packet */ 68 MOUSE_INPUT_DATA MouseInputData; 69 70 /* Previous state */ 71 ULONG MouseButtonState; 72 73 /* Mouse device attributes */ 74 MOUSE_ATTRIBUTES MouseAttributes; 75 } INPORT_DEVICE_EXTENSION, *PINPORT_DEVICE_EXTENSION; 76 77 DRIVER_INITIALIZE DriverEntry; 78 79 DRIVER_UNLOAD InPortUnload; 80 81 DRIVER_ADD_DEVICE InPortAddDevice; 82 83 _Dispatch_type_(IRP_MJ_CREATE) 84 _Dispatch_type_(IRP_MJ_CLOSE) 85 DRIVER_DISPATCH_PAGED InPortCreateClose; 86 87 _Dispatch_type_(IRP_MJ_INTERNAL_DEVICE_CONTROL) 88 DRIVER_DISPATCH_RAISED InPortInternalDeviceControl; 89 90 _Dispatch_type_(IRP_MJ_POWER) 91 DRIVER_DISPATCH_RAISED InPortPower; 92 93 _Dispatch_type_(IRP_MJ_SYSTEM_CONTROL) 94 DRIVER_DISPATCH_PAGED InPortWmi; 95 96 _Dispatch_type_(IRP_MJ_PNP) 97 DRIVER_DISPATCH_PAGED InPortPnp; 98 99 KSERVICE_ROUTINE InPortIsr; 100 101 IO_DPC_ROUTINE InPortDpcForIsr; 102 103 KSYNCHRONIZE_ROUTINE InPortStartMouse; 104 105 KSYNCHRONIZE_ROUTINE InPortStopMouse; 106 107 NTSTATUS 108 NTAPI 109 InPortStartDevice( 110 _In_ PDEVICE_OBJECT DeviceObject, 111 _Inout_ PIRP Irp); 112 113 NTSTATUS 114 NTAPI 115 InPortRemoveDevice( 116 _In_ PDEVICE_OBJECT DeviceObject, 117 _Inout_ PIRP Irp); 118 119 VOID 120 NTAPI 121 InPortInitializeMouse( 122 _In_ PINPORT_DEVICE_EXTENSION DeviceExtension); 123 124 NTSTATUS 125 NTAPI 126 InPortWmiRegistration( 127 _Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension); 128 129 NTSTATUS 130 NTAPI 131 InPortWmiDeRegistration( 132 _Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension); 133 134 NTSTATUS 135 NTAPI 136 InPortQueryWmiRegInfo( 137 _Inout_ PDEVICE_OBJECT DeviceObject, 138 _Inout_ PULONG RegFlags, 139 _Inout_ PUNICODE_STRING InstanceName, 140 _Out_opt_ PUNICODE_STRING *RegistryPath, 141 _Inout_ PUNICODE_STRING MofResourceName, 142 _Out_opt_ PDEVICE_OBJECT *Pdo); 143 144 NTSTATUS 145 NTAPI 146 InPortQueryWmiDataBlock( 147 _Inout_ PDEVICE_OBJECT DeviceObject, 148 _Inout_ PIRP Irp, 149 _In_ ULONG GuidIndex, 150 _In_ ULONG InstanceIndex, 151 _In_ ULONG InstanceCount, 152 _Out_opt_ PULONG InstanceLengthArray, 153 _In_ ULONG BufferAvail, 154 _Out_opt_ PUCHAR Buffer); 155 156 extern UNICODE_STRING DriverRegistryPath; 157 158 #endif /* _INPORT_H_ */ 159