sermouse.h

来自「一个类似windows」· C头文件 代码 · 共 139 行

H
139
字号
#include <ntifs.h>
#include <kbdmou.h>
#include <ntddser.h>
#include <ntddmou.h>

#if defined(_MSC_VER)
  /* Missing prototype */
  NTSTATUS NTAPI
  IoAttachDeviceToDeviceStackSafe(
    IN PDEVICE_OBJECT SourceDevice,
    IN PDEVICE_OBJECT TargetDevice,
    OUT PDEVICE_OBJECT *AttachedToDeviceObject);
#endif

typedef enum
{
  dsStopped,
  dsStarted,
  dsPaused,
  dsRemoved,
  dsSurpriseRemoved
} SERMOUSE_DEVICE_STATE;

typedef enum
{
	mtNone,      /* No Mouse */
	mtMicrosoft, /* Microsoft Mouse with 2 buttons */
	mtLogitech,  /* Logitech Mouse with 3 buttons */
	mtWheelZ     /* Microsoft Wheel Mouse (aka Z Mouse) */
} SERMOUSE_MOUSE_TYPE;

/* Size for packet buffer used in interrupt routine */
#define PACKET_BUFFER_SIZE  4

/* Hardware byte mask for left button */
#define LEFT_BUTTON_MASK     0x20
/* Hardware to Microsoft specific code byte shift for left button */
#define LEFT_BUTTON_SHIFT    5
/* Hardware byte mask for right button */
#define RIGHT_BUTTON_MASK    0x10
/* Hardware to Microsoft specific code byte shift for right button */
#define RIGHT_BUTTON_SHIFT   3
/* Hardware byte mask for middle button */
#define MIDDLE_BUTTON_MASK   0x20
/* Hardware to Microsoft specific code byte shift for middle button */
#define MIDDLE_BUTTON_SHIFT  3

/* Microsoft byte mask for left button */
#define MOUSE_BUTTON_LEFT    0x01
/* Microsoft byte mask for right button */
#define MOUSE_BUTTON_RIGHT   0x02
/* Microsoft byte mask for middle button */
#define MOUSE_BUTTON_MIDDLE  0x04

typedef struct _SERMOUSE_DRIVER_EXTENSION
{
	ULONG NumberOfButtons;
} SERMOUSE_DRIVER_EXTENSION, *PSERMOUSE_DRIVER_EXTENSION;

typedef struct _SERMOUSE_DEVICE_EXTENSION
{
	PDEVICE_OBJECT LowerDevice;
	SERMOUSE_DEVICE_STATE PnpState;
	SERMOUSE_MOUSE_TYPE MouseType;
	PSERMOUSE_DRIVER_EXTENSION DriverExtension;

	HANDLE WorkerThreadHandle;
	KEVENT StopWorkerThreadEvent;

	ULONG ActiveQueue;
	ULONG InputDataCount[2];
	CONNECT_DATA ConnectData;
	MOUSE_INPUT_DATA MouseInputData[2];
	UCHAR PacketBuffer[PACKET_BUFFER_SIZE];
	ULONG PacketBufferPosition;
	ULONG PreviousButtons;
	MOUSE_ATTRIBUTES AttributesInformation;
} SERMOUSE_DEVICE_EXTENSION, *PSERMOUSE_DEVICE_EXTENSION;

/************************************ createclose.c */

NTSTATUS NTAPI
SermouseCreate(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

NTSTATUS NTAPI
SermouseClose(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

NTSTATUS NTAPI
SermouseCleanup(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

/************************************ detect.c */

SERMOUSE_MOUSE_TYPE
SermouseDetectLegacyDevice(
	IN PDEVICE_OBJECT LowerDevice);

/************************************ fdo.c */

NTSTATUS NTAPI
SermouseAddDevice(
	IN PDRIVER_OBJECT DriverObject,
	IN PDEVICE_OBJECT Pdo);

NTSTATUS NTAPI
SermousePnp(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

/************************************ internaldevctl.c */

NTSTATUS NTAPI
SermouseInternalDeviceControl(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

/************************************ misc.c */

NTSTATUS
ForwardIrpAndWait(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

NTSTATUS NTAPI
ForwardIrpAndForget(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp);

/************************************ readmouse.c */

VOID NTAPI
SermouseDeviceWorker(
	PVOID Context);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?