You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.0 KiB
202 lines
5.0 KiB
#ifndef __swvmouse_h__
|
|
#define __swvmouse_h__
|
|
// @doc
|
|
/**********************************************************************
|
|
*
|
|
* @module SWVMOUSE.H |
|
|
*
|
|
* Declarations related to SideWinder Virtual Keyboard.
|
|
*
|
|
* History
|
|
* ----------------------------------------------------------
|
|
* Mitchell S. Dernis Original
|
|
*
|
|
* (c) 1986-1998 Microsoft Corporation. All right reserved.
|
|
*
|
|
* @topic SWVMOUSE |
|
|
* The SideWinder Virtual Mouse is designed to sit atop the SideWinder
|
|
* Virtual Bus. It is a HID device, and relies on the loading of a dummy
|
|
* HID driver.<nl>
|
|
*
|
|
**********************************************************************/
|
|
|
|
#include "irpqueue.h"
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Virtual Mouse structures
|
|
//----------------------------------------------------------------------------------
|
|
#define GCK_VMOU_MAX_KEYSTROKES 0x06 //HID spec. says this can be six at most.
|
|
//Comments in HIDPARSE code suggest that the OS
|
|
//supports up to fourteen.
|
|
#define GCK_VMOU_STATE_BUFFER_SIZE 0x20 //Size of circular buffer for holding on to
|
|
//key presses.
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Device States - an alternative to five different flags
|
|
//----------------------------------------------------------------------------------
|
|
#define VMOU_STATE_STARTED 0x01
|
|
#define VMOU_STATE_STOPPED 0x02
|
|
#define VMOU_STATE_REMOVED 0x03
|
|
|
|
//
|
|
// @struct GCK_VMOU_REPORT_PACKET |
|
|
// The report format of the virtual keyboard. Any changes here must be
|
|
// reflected in the report descriptor and vice-versa.
|
|
typedef struct tagGCK_VMOU_REPORT_PACKET
|
|
{
|
|
UCHAR ucButtons; //@field Button Byte (3 lsb are used)
|
|
UCHAR ucDeltaX; //@field Delta X
|
|
UCHAR ucDeltaY; //@field Delta Y
|
|
} GCK_VMOU_REPORT_PACKET, *PGCK_VMOU_REPORT_PACKET;
|
|
|
|
//
|
|
// @struct GCK_VMOU_EXT |
|
|
//
|
|
typedef struct tagGCK_VMOU_EXT
|
|
{
|
|
UCHAR ucDeviceState; //@field State of device(Started, Stopped, Removed)
|
|
USHORT usReportBufferCount; //@field Count of packets in buffer
|
|
USHORT usReportBufferPos; //@field Next Packet in buffer
|
|
GCK_VMOU_REPORT_PACKET rgReportBuffer[GCK_VMOU_STATE_BUFFER_SIZE]; //@field Buffer of pendind reports
|
|
CGuardedIrpQueue IrpQueue; //@field Irp queue;
|
|
GCK_REMOVE_LOCK RemoveLock; //@field Custom Remove Lock
|
|
} GCK_VMOU_EXT, *PGCK_VMOU_EXT;
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// API for using the Virtual Keyboard
|
|
//----------------------------------------------------------------------------------
|
|
NTSTATUS
|
|
GCK_VMOU_Create
|
|
(
|
|
OUT PDEVICE_OBJECT *ppDeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_Close
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_SendReportPacket
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PGCK_VMOU_REPORT_PACKET pReportPacket
|
|
);
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Driver Initialization
|
|
//----------------------------------------------------------------------------------
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Device Initialization
|
|
//----------------------------------------------------------------------------------
|
|
NTSTATUS
|
|
GCK_VMOU_Init
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN ULONG ulInitContext
|
|
);
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Entry points to handle IRPs from the Virtual Bus
|
|
//----------------------------------------------------------------------------------
|
|
NTSTATUS
|
|
GCK_VMOU_CloseProc
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_CreateProc
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_IoctlProc
|
|
(
|
|
PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_ReadProc
|
|
(
|
|
PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_StartProc
|
|
(
|
|
PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_StopProc
|
|
(
|
|
PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_RemoveProc
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PIRP pIrp
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_WriteProc
|
|
(
|
|
PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
//------------------------------------------------------------------
|
|
// Ioctl sub-function handlers
|
|
//------------------------------------------------------------------
|
|
NTSTATUS
|
|
GCK_VMOU_GetDeviceDescriptor
|
|
(
|
|
IN ULONG ulBufferLength,
|
|
OUT PVOID pvUserBuffer,
|
|
OUT PULONG pulBytesCopied
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_GetReportDescriptor
|
|
(
|
|
IN ULONG ulBufferLength,
|
|
OUT PVOID pvUserBuffer,
|
|
OUT PULONG pulBytesCopied
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_GetDeviceAttributes
|
|
(
|
|
IN ULONG ulBufferLength,
|
|
OUT PVOID pvUserBuffer,
|
|
OUT PULONG pulBytesCopied
|
|
);
|
|
|
|
NTSTATUS
|
|
GCK_VMOU_ReadReport
|
|
(
|
|
PDEVICE_OBJECT pDeviceObject,
|
|
PIRP pIrp
|
|
);
|
|
|
|
VOID
|
|
GCK_VMOU_CancelReadReportIrp
|
|
(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PIRP pIrp
|
|
);
|
|
|
|
#endif //__swvmouse_h__
|