Leaked source code of windows server 2003
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

#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__