Windows virtual mouse driver

virtual mouse windows 10 download
human interface device
usb human interface device driver
virtual usb device
ude driver
usb mouse emulator
usb hid tutorial
usb hid emulator

I am developing a KMDF virtual mouse driver.

The general idea is a KMDF root enumerated non-filter driver which will be able to send output reports to the mouse and keyboard driver stacks.

My driver is already working and sending requests to other driver stacks, but with no result.

Report types and packet formats are pretty undocumented on Microsoft resources. There are no information about which data and to which device I need to send in order to move the mouse pointer, simulate clicks (with either mouse or keyboard).

There is only general information about HID clients, drivers etc. Their documentation often refers to the Windows Driver Samples git repository, but the repository does not contain any sources close to my task. Few people are in driver development, so there are no tutorials either.

I would appreciate giving me a hint where can I find more about my task.

Write a HID source driver by using Virtual HID Framework (VHF , A HID input device, such as – a keyboard, mouse, pen, touch, or button, sends Starting in Windows 10, the new Virtual HID Framework (VHF)  Tap or click it to open or close the virtual touchpad. To use the virtual touchpad, just place your finger on the touchpad on your touch screen and move it around like you would on a normal touchpad. The mouse cursor will move around the screen as you move your finger. You can move the virtual touchpad window wherever you like on your screen.

HID is a standard defined by USB. So Microsoft does not define the format. In fact, HID is so versatile that the format should be defined by yourself in the HID report descriptor.

HID descriptor is defined in Device Class Definition HID and HID Usage Tables.

In page 61 of `Device Class Definition HID' there is an example of mouse which is exact what you want. Usage Page (Generic Desktop), Usage (Mouse), Collection (Application), Usage (Pointer), Collection (Physical), Report Count (3), Report Size (1), Usage Page (Buttons), Usage Minimum (1), Usage Maximum (3), Logical Minimum (0), Logical Maximum (1), Input (Data, Variable, Absolute), Report Count (1), Report Size (5), Input (Constant), Report Size (8), Report Count (2), Usage Page (Generic Desktop), Usage (X), Usage (Y), Logical Minimum (-127), Logical Maximum (127), Input (Data, Variable, Relative), End Collection, End Collection

Keyboard and mouse class drivers, If a device produces an incorrect scan code for a certain key, the wrong virtual key message will be sent. This can be fixed by writing a filter driver  Windows virtual mouse driver. I am developing a KMDF virtual mouse driver. The general idea is a KMDF root enumerated non-filter driver which will be able to send output reports to the mouse and keyboard driver stacks. My driver is already working and sending requests to other driver stacks, but with no result.

Here is the report descriptor set of my working driver.

HID_REPORT_DESCRIPTOR g_reportDescriptor[] = {
    0x05, 0x01,     // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,     // USAGE (Mouse)
    0xA1, 0x01,     // COLLECTION (Application)
    0x85,               REPORT_ID_MOUSE_INPUT,
    0x09, 0x01,         // USAGE_PAGE (Pointer)
    0xA1, 0x00,         // COLLECTION (Physical)
    0x05, 0x09,             // USAGE_PAGE (Buttons)
    0x19, 0x01,             // USAGE_MINIMUM (1)
    0x29, 0x03,             // USAGE_MAXIMUM (3)
    0x15, 0x00,             // LOGICAL_MINIMUM (0)
    0x25, 0x01,             // LOGICAL_MAXIMUM (1)
    0x95, 0x03,             // REPORT_COUNT (3)
    0x75, 0x01,             // REPORT_SIZE (1)
    0x81, 0x02,             // INPUT (Data, Variable, Absolute)
    0x95, 0x01,             // REPORT_COUNT (1)
    0x75, 0x05,             // REPORT_SIZE (5)
    0x81, 0x01,             // INPUT (Constant)
    0x05, 0x01,             // USAGE_PAGE (Generic Desktop)
    0x09, 0x30,             // USAGE (X)
    0x09, 0x31,             // USAGE (Y)
    0x15, 0x81,             // LOGICAL_MINIMUM (-127)
    0x25, 0x7F,             // LOGICAL_MAXIMUM (127)
    0x75, 0x08,             // REPORT_SIZE (8)
    0x95, 0x02,             // REPORT_COUNT (2)
    0x81, 0x06,             // Input (Data, Variable, Relative)
    0xC0,               // END_COLLECTION
    0xC0,           // END_COLLECTION

    0x05, 0x01,     // USAGE_PAGE (Generic Desktop)
    0x09, 0x00,     // USAGE (Undefined)
    0xa1, 0x01,     // COLLECTION (Application)
    0x85,               REPORT_ID_MOUSE_OUTPUT,
    0x09, 0x00,         // USAGE (Undefined)
    0x15, 0x00,         // LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,   // LOGICAL_MAXIMUM (255)
    0x95, 0x03,         // REPORT_COUNT (3)
    0x75, 0x08,         // REPORT_SIZE (8)
    0x91, 0x02,         // OUTPUT (Data, Variable, Absolute)
    0xc0,           // END_COLLECTION

    0x05, 0x01,     // USAGE_PAGE (Generic Desktop)
    0x09, 0x06,     // USAGE (Keyboard)
    0xA1, 0x01,     // COLLECTION (Application)
    0x85,               REPORT_ID_KEYBOARD_INPUT,
    0x05, 0x07,         // USAGE_PAGE (Keyboard Key Codes)
    0x19, 0xE0,         // USAGE_MINIMUM (224)
    0x29, 0xE7,         // USAGE_MAXIMUM (231)
    0x15, 0x00,         // LOGICAL_MINIMUM (0)
    0x25, 0x01,         // LOGICAL_MAXIMUM (1)
    0x75, 0x01,         // REPORT_SIZE (1)
    0x95, 0x08,         // REPORT_COUNT (8)
    0x81, 0x02,         // INPUT (Data, Variable, Absolute)
    0x95, 0x01,         // REPORT_COUNT (1)
    0x75, 0x08,         // REPORT_SIZE (8)
    0x81, 0x01,         // INPUT (Constant)
    0x19, 0x00,         // USAGE_MINIMUM (0)
    0x29, 0x65,         // USAGE_MAXIMUM (101)
    0x15, 0x00,         // LOGICAL_MINIMUM (0)
    0x25, 0x65,         // LOGICAL_MAXIMUM (101)
    0x95, 0x06,         // REPORT_COUNT (6)
    0x75, 0x08,         // REPORT_SIZE (8)
    0x81, 0x00,         // INPUT (Data, Array, Absolute)
    0x05, 0x08,         // USAGE_PAGE (LEDs)
    0x19, 0x01,         // USAGE_MINIMUM (Num Lock)
    0x29, 0x05,         // USAGE_MAXIMUM (Kana)
    0x95, 0x05,         // REPORT_COUNT (5)
    0x75, 0x01,         // REPORT_SIZE (1)
    0x91, 0x02,         // OUTPUT (Data, Variable, Absolute)
    0x95, 0x01,         // REPORT_COUNT (1)
    0x75, 0x03,         // REPORT_SIZE (3)
    0x91, 0x01,         // OUTPUT (Constant)
    0xC0,           // END_COLLECTION

    0x05, 0x01,     // USAGE_PAGE (Generic Desktop)
    0x09, 0x00,     // USAGE (Undefined)
    0xa1, 0x01,     // COLLECTION (Application)
    0x85,               REPORT_ID_KEYBOARD_OUTPUT,
    0x09, 0x00,         // USAGE (Undefined)
    0x15, 0x00,         // LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,   // LOGICAL_MAXIMUM (255)
    0x95, 0x08,         // REPORT_COUNT (8)
    0x75, 0x08,         // REPORT_SIZE (8)
    0x91, 0x02,         // OUTPUT (Data, Variable, Absolute)
    0xc0            // END_COLLECTION
};

It consists of:

  1. Mouse input (the device sending data to the Windows mouse stack)
  2. Mouse output (the device I use to send mouse input to my driver)
  3. Keyboard input (the device sending data to the Windows keyboard stack)
  4. Keyboard output (the device I use to send keyboard input to my driver)

hedgar2017/loki-hidriver: Virtual mouse and keyboard , Virtual mouse and keyboard driver for Windows 7 and higher. Usage. Disable Driver Signature Enforcement. Install the driver using devcon.exe or manually. Use  Some older Microsoft devices are no longer supported in the latest Microsoft Mouse and Keyboard Center. However, they're still supported by an older version of Microsoft Mouse and Keyboard Center 2.3 on Windows 7, or the earlier version IntelliPoint 8.2 and IntelliType Pro 8.2 software on Windows 7, Windows Vista, and Windows XP.

Download Alps Virtual HID Device Driver 10.0.0.111 for Windows 10 , Download Alps Virtual HID Device Driver 10.0.0.111 for Windows 10 Anniversary Update 64-bit (Keyboard & Mouse) You can customize the virtual trackpad and cursor to suit your own preferences. Position the cursor over the mouse icon on the taskbar, tap and hold. A menu will appear, move the cursor to "setting". For more info on settings click here.

Virtual mouse driver, 7 Virtual Mouse Device Driver. vmulti - Virtual Multiple HID Driver (multitouch, mouse, digitizer, keyboard, joystick) Windows device driver information for InterAct  HID source driver (your driver) The HID source driver links to Vhfkm.lib and includes Vhf.h in its build project. The driver can be written by using either Windows Driver Model (WDM) or Kernel-Mode Driver Framework (KMDF) that is part of the Windows Driver Frameworks (WDF). The driver can be loaded as a filter driver or a function driver in the device stack.

Virtual mouse driver, Lenovo Virtual Mouse Device driver is a windows driver . Download drivers for Logitech Gaming Virtual Mouse other devices (Windows 10 x64), or install  Virtual Multiple HID Driver (multitouch, mouse, digitizer, keyboard, joystick) C C++ Batchfile Makefile. New pull request. Clone or download. Clone with HTTPS. Use Git or checkout with SVN using the web URL. Open in Desktop Download ZIP. Want to be notified of new releases in djpnewton/vmulti ? Sign in Sign up. Launching GitHub Desktop.

Comments
  • In fact on Windows, HID is independent on USB. To make virtual HID device (mouse) work, responsing to corresponding Internal IOCTL is sufficient. mshidkmdf.sys from Microsoft will help do remain work.
  • Thank you. I have already developed and tested the driver (got a hint on MSDN). Your answer is the closest to the truth, so the award is yours.