mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[INPORT] Add driver for bus mouse devices (#3173)
It adds basic input support for: - Standard Bus Mouse - Standard InPort Mouse - Logitech Bus Mouse - Microsoft Bus Mouse - Microsoft InPort Mouse - NEC PC-98 Bus Mouse Untested on PC/AT, but should work.
This commit is contained in:
parent
c464b02c90
commit
310a24da6e
11 changed files with 1563 additions and 0 deletions
|
@ -174,6 +174,7 @@ GenDisk = disk
|
||||||
USB\Class_03 = hidusb
|
USB\Class_03 = hidusb
|
||||||
GENERIC_HID_DEVICE = hidusb
|
GENERIC_HID_DEVICE = hidusb
|
||||||
*PNP0303 = i8042prt,{4D36E96B-E325-11CE-BFC1-08002BE10318}
|
*PNP0303 = i8042prt,{4D36E96B-E325-11CE-BFC1-08002BE10318}
|
||||||
|
*nEC1F00 = inport,{4D36E96F-E325-11CE-BFC1-08002BE10318}
|
||||||
ROOT\SWENUM = swenum
|
ROOT\SWENUM = swenum
|
||||||
|
|
||||||
[BootBusExtenders.Load]
|
[BootBusExtenders.Load]
|
||||||
|
@ -203,6 +204,9 @@ buslogic = buslogic.sys
|
||||||
storahci = storahci.sys
|
storahci = storahci.sys
|
||||||
disk = disk.sys
|
disk = disk.sys
|
||||||
|
|
||||||
|
[MouseDrivers.Load]
|
||||||
|
inport = inport.sys
|
||||||
|
|
||||||
[Cabinets]
|
[Cabinets]
|
||||||
Cabinet=reactos.cab
|
Cabinet=reactos.cab
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
add_subdirectory(i8042prt)
|
add_subdirectory(i8042prt)
|
||||||
|
add_subdirectory(inport)
|
||||||
add_subdirectory(kbdclass)
|
add_subdirectory(kbdclass)
|
||||||
add_subdirectory(mouclass)
|
add_subdirectory(mouclass)
|
||||||
add_subdirectory(sermouse)
|
add_subdirectory(sermouse)
|
||||||
|
|
15
drivers/input/inport/CMakeLists.txt
Normal file
15
drivers/input/inport/CMakeLists.txt
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
list(APPEND SOURCE
|
||||||
|
hardware.c
|
||||||
|
inport.c
|
||||||
|
inport.h
|
||||||
|
ioctl.c
|
||||||
|
pnp.c
|
||||||
|
wmi.c)
|
||||||
|
|
||||||
|
add_library(inport MODULE ${SOURCE} inport.rc)
|
||||||
|
|
||||||
|
set_module_type(inport kernelmodedriver)
|
||||||
|
add_pch(inport inport.h SOURCE)
|
||||||
|
add_importlibs(inport ntoskrnl hal wmilib)
|
||||||
|
add_cd_file(TARGET inport DESTINATION reactos/system32/drivers FOR all)
|
433
drivers/input/inport/hardware.c
Normal file
433
drivers/input/inport/hardware.c
Normal file
|
@ -0,0 +1,433 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS InPort (Bus) Mouse Driver
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Hardware support code
|
||||||
|
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Note: Some code was taken from Linux */
|
||||||
|
|
||||||
|
/* INCLUDES *******************************************************************/
|
||||||
|
|
||||||
|
#include "inport.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* GLOBALS ********************************************************************/
|
||||||
|
|
||||||
|
#ifdef ALLOC_PRAGMA
|
||||||
|
#pragma alloc_text(PAGE, InPortInitializeMouse)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define READ_MOUSE(DeviceExtension, Port) \
|
||||||
|
READ_PORT_UCHAR((DeviceExtension)->IoBase + (Port))
|
||||||
|
|
||||||
|
#define WRITE_MOUSE(DeviceExtension, Port, Data) \
|
||||||
|
WRITE_PORT_UCHAR((DeviceExtension)->IoBase + (Port), (Data))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NEC
|
||||||
|
*/
|
||||||
|
#define NEC_BM_DATA 0x00
|
||||||
|
|
||||||
|
#define NEC_BM_CONTROL 0x04
|
||||||
|
#define NEC_INT_ENABLE 0x00
|
||||||
|
#define NEC_INT_DISABLE 0x10
|
||||||
|
|
||||||
|
#define NEC_READ_X_LOW 0x00
|
||||||
|
#define NEC_READ_X_HIGH 0x20
|
||||||
|
#define NEC_READ_Y_LOW 0x40
|
||||||
|
#define NEC_READ_Y_HIGH 0x60
|
||||||
|
|
||||||
|
#define NEC_INPUT_CAPTURE 0x00
|
||||||
|
#define NEC_INPUT_HOLD 0x80
|
||||||
|
|
||||||
|
#define NEC_BM_CONFIG 0x06
|
||||||
|
#define NEC_PPI_INT_ENABLE 0x08
|
||||||
|
#define NEC_PPI_INT_DISABLE 0x09
|
||||||
|
#define NEC_PPI_HC_NO_CLEAR 0x0E
|
||||||
|
#define NEC_PPI_HC_CLEAR 0x0F
|
||||||
|
#define NEC_PPI_DEFAULT_MODE 0x93
|
||||||
|
|
||||||
|
#define NEC_BM_INT_RATE 0x4002
|
||||||
|
#define NEC_RATE_120_HZ 0x00
|
||||||
|
#define NEC_RATE_60_HZ 0x01
|
||||||
|
#define NEC_RATE_30_HZ 0x02
|
||||||
|
#define NEC_RATE_15_HZ 0x03
|
||||||
|
|
||||||
|
#define NEC_BM_HIRESO_BASE (PUCHAR)0x61
|
||||||
|
|
||||||
|
#define NEC_BUTTON_RIGHT 0x20
|
||||||
|
#define NEC_BUTTON_LEFT 0x80
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Microsoft InPort
|
||||||
|
*/
|
||||||
|
#define MS_INPORT_CONTROL 0x00
|
||||||
|
#define INPORT_REG_BTNS 0x00
|
||||||
|
#define INPORT_REG_X 0x01
|
||||||
|
#define INPORT_REG_Y 0x02
|
||||||
|
#define INPORT_REG_MODE 0x07
|
||||||
|
#define INPORT_RESET 0x80
|
||||||
|
|
||||||
|
#define MS_INPORT_DATA 0x01
|
||||||
|
#define INPORT_MODE_IRQ 0x01
|
||||||
|
#define INPORT_MODE_BASE 0x10
|
||||||
|
#define INPORT_MODE_HOLD 0x20
|
||||||
|
|
||||||
|
#define MS_INPORT_SIGNATURE 0x02
|
||||||
|
|
||||||
|
#define MS_BUTTON_MIDDLE 0x01
|
||||||
|
#define MS_BUTTON_LEFT 0x02
|
||||||
|
#define MS_BUTTON_RIGHT 0x04
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Logitech
|
||||||
|
*/
|
||||||
|
#define LOG_BM_DATA 0x00
|
||||||
|
|
||||||
|
#define LOG_BM_SIGNATURE 0x01
|
||||||
|
#define LOG_SIGNATURE_BYTE 0xA5
|
||||||
|
|
||||||
|
#define LOG_BM_CONTROL 0x02
|
||||||
|
#define LOG_ENABLE_IRQ 0x00
|
||||||
|
#define LOG_DISABLE_IRQ 0x10
|
||||||
|
|
||||||
|
#define LOG_READ_X_LOW 0x80
|
||||||
|
#define LOG_READ_X_HIGH 0xA0
|
||||||
|
#define LOG_READ_Y_LOW 0xC0
|
||||||
|
#define LOG_READ_Y_HIGH 0xE0
|
||||||
|
|
||||||
|
#define LOG_BM_CONFIG 0x03
|
||||||
|
#define LOG_DEFAULT_MODE 0x90
|
||||||
|
#define LOG_CONFIG_BYTE 0x91
|
||||||
|
|
||||||
|
#define LOG_BUTTON_RIGHT 0x20
|
||||||
|
#define LOG_BUTTON_MIDDLE 0x40
|
||||||
|
#define LOG_BUTTON_LEFT 0x80
|
||||||
|
|
||||||
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
InPortDpcForIsr(
|
||||||
|
_In_ PKDPC Dpc,
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp,
|
||||||
|
_In_opt_ PVOID Context)
|
||||||
|
{
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
KIRQL OldIrql;
|
||||||
|
ULONG DummyInputDataConsumed;
|
||||||
|
INPORT_RAW_DATA RawData;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(Dpc);
|
||||||
|
UNREFERENCED_PARAMETER(Irp);
|
||||||
|
UNREFERENCED_PARAMETER(Context);
|
||||||
|
|
||||||
|
/* Copy raw data */
|
||||||
|
OldIrql = KeAcquireInterruptSpinLock(DeviceExtension->InterruptObject);
|
||||||
|
RawData = DeviceExtension->RawData;
|
||||||
|
KeReleaseInterruptSpinLock(DeviceExtension->InterruptObject, OldIrql);
|
||||||
|
|
||||||
|
/* Fill out fields */
|
||||||
|
DeviceExtension->MouseInputData.LastX = RawData.DeltaX;
|
||||||
|
DeviceExtension->MouseInputData.LastY = RawData.DeltaY;
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags = 0;
|
||||||
|
if (RawData.ButtonDiff != 0)
|
||||||
|
{
|
||||||
|
switch (DeviceExtension->MouseType)
|
||||||
|
{
|
||||||
|
case NecBusMouse:
|
||||||
|
{
|
||||||
|
if (RawData.ButtonDiff & NEC_BUTTON_LEFT)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & NEC_BUTTON_LEFT)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_LEFT_BUTTON_UP;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_LEFT_BUTTON_DOWN;
|
||||||
|
}
|
||||||
|
if (RawData.ButtonDiff & NEC_BUTTON_RIGHT)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & NEC_BUTTON_RIGHT)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_RIGHT_BUTTON_UP;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_RIGHT_BUTTON_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case MsInPortMouse:
|
||||||
|
{
|
||||||
|
/* Button flags have to be inverted */
|
||||||
|
if (RawData.ButtonDiff & MS_BUTTON_LEFT)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & MS_BUTTON_LEFT)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_LEFT_BUTTON_DOWN;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_LEFT_BUTTON_UP;
|
||||||
|
}
|
||||||
|
if (RawData.ButtonDiff & MS_BUTTON_RIGHT)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & MS_BUTTON_RIGHT)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_RIGHT_BUTTON_DOWN;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_RIGHT_BUTTON_UP;
|
||||||
|
}
|
||||||
|
if (RawData.ButtonDiff & MS_BUTTON_MIDDLE)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & MS_BUTTON_MIDDLE)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_MIDDLE_BUTTON_DOWN;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_MIDDLE_BUTTON_UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case LogitechBusMouse:
|
||||||
|
{
|
||||||
|
if (RawData.ButtonDiff & LOG_BUTTON_LEFT)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & LOG_BUTTON_LEFT)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_LEFT_BUTTON_UP;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_LEFT_BUTTON_DOWN;
|
||||||
|
}
|
||||||
|
if (RawData.ButtonDiff & LOG_BUTTON_RIGHT)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & LOG_BUTTON_RIGHT)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_RIGHT_BUTTON_UP;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_RIGHT_BUTTON_DOWN;
|
||||||
|
}
|
||||||
|
if (RawData.ButtonDiff & LOG_BUTTON_MIDDLE)
|
||||||
|
{
|
||||||
|
if (RawData.Buttons & LOG_BUTTON_MIDDLE)
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_MIDDLE_BUTTON_UP;
|
||||||
|
else
|
||||||
|
DeviceExtension->MouseInputData.ButtonFlags |= MOUSE_MIDDLE_BUTTON_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send mouse packet */
|
||||||
|
(*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->ClassService)(
|
||||||
|
DeviceExtension->ClassDeviceObject,
|
||||||
|
&DeviceExtension->MouseInputData,
|
||||||
|
&DeviceExtension->MouseInputData + 1,
|
||||||
|
&DummyInputDataConsumed);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
InPortIsr(
|
||||||
|
_In_ PKINTERRUPT Interrupt,
|
||||||
|
_In_ PVOID Context)
|
||||||
|
{
|
||||||
|
UCHAR Buttons;
|
||||||
|
ULONG ButtonDiff;
|
||||||
|
CHAR DeltaX, DeltaY;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = Context;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(Interrupt);
|
||||||
|
|
||||||
|
switch (DeviceExtension->MouseType)
|
||||||
|
{
|
||||||
|
case NecBusMouse:
|
||||||
|
{
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONTROL,
|
||||||
|
NEC_INPUT_CAPTURE | NEC_INT_DISABLE);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONTROL,
|
||||||
|
NEC_INPUT_HOLD | NEC_INT_DISABLE | NEC_READ_X_LOW);
|
||||||
|
DeltaX = READ_MOUSE(DeviceExtension, NEC_BM_DATA) & 0x0F;
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONTROL,
|
||||||
|
NEC_INPUT_HOLD | NEC_INT_DISABLE | NEC_READ_X_HIGH);
|
||||||
|
DeltaX |= READ_MOUSE(DeviceExtension, NEC_BM_DATA) << 4;
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONTROL,
|
||||||
|
NEC_INPUT_HOLD | NEC_INT_DISABLE | NEC_READ_Y_LOW);
|
||||||
|
DeltaY = READ_MOUSE(DeviceExtension, NEC_BM_DATA) & 0x0F;
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONTROL,
|
||||||
|
NEC_INPUT_HOLD | NEC_INT_DISABLE | NEC_READ_Y_HIGH);
|
||||||
|
Buttons = READ_MOUSE(DeviceExtension, NEC_BM_DATA);
|
||||||
|
DeltaY |= Buttons << 4;
|
||||||
|
Buttons &= (NEC_BUTTON_LEFT | NEC_BUTTON_RIGHT);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONTROL,
|
||||||
|
NEC_INPUT_HOLD | NEC_INT_ENABLE);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case MsInPortMouse:
|
||||||
|
{
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_MODE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_DATA,
|
||||||
|
INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_X);
|
||||||
|
DeltaX = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_Y);
|
||||||
|
DeltaY = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_BTNS);
|
||||||
|
Buttons = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
|
||||||
|
Buttons &= (MS_BUTTON_MIDDLE | MS_BUTTON_LEFT | MS_BUTTON_RIGHT);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_MODE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_DATA,
|
||||||
|
INPORT_MODE_IRQ | INPORT_MODE_BASE);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case LogitechBusMouse:
|
||||||
|
{
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_READ_X_LOW);
|
||||||
|
DeltaX = READ_MOUSE(DeviceExtension, LOG_BM_DATA) & 0x0F;
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_READ_X_HIGH);
|
||||||
|
DeltaX |= READ_MOUSE(DeviceExtension, LOG_BM_DATA) << 4;
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_READ_Y_LOW);
|
||||||
|
DeltaY = READ_MOUSE(DeviceExtension, LOG_BM_DATA) & 0x0F;
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_READ_Y_HIGH);
|
||||||
|
Buttons = READ_MOUSE(DeviceExtension, LOG_BM_DATA);
|
||||||
|
DeltaY |= Buttons << 4;
|
||||||
|
Buttons &= (LOG_BUTTON_RIGHT | LOG_BUTTON_MIDDLE | LOG_BUTTON_LEFT);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_ENABLE_IRQ);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ButtonDiff = DeviceExtension->MouseButtonState ^ Buttons;
|
||||||
|
DeviceExtension->MouseButtonState = Buttons;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bus mouse devices don't have a status register to check
|
||||||
|
* whether this interrupt is indeed for us.
|
||||||
|
*/
|
||||||
|
if ((DeltaX == 0) && (DeltaY == 0) && (ButtonDiff == 0))
|
||||||
|
{
|
||||||
|
/* We just pretend that the interrupt is not ours */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeviceExtension->RawData.DeltaX = DeltaX;
|
||||||
|
DeviceExtension->RawData.DeltaY = DeltaY;
|
||||||
|
DeviceExtension->RawData.Buttons = Buttons;
|
||||||
|
DeviceExtension->RawData.ButtonDiff = ButtonDiff;
|
||||||
|
|
||||||
|
IoRequestDpc(DeviceExtension->Self, NULL, NULL);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
InPortInitializeMouse(
|
||||||
|
_In_ PINPORT_DEVICE_EXTENSION DeviceExtension)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
/* Initialize mouse and disable interrupts */
|
||||||
|
switch (DeviceExtension->MouseType)
|
||||||
|
{
|
||||||
|
case NecBusMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_DEFAULT_MODE);
|
||||||
|
|
||||||
|
/* Setup interrupt rate (unavailable on hireso machines) */
|
||||||
|
if (DeviceExtension->IoBase != NEC_BM_HIRESO_BASE)
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_INT_RATE, NEC_RATE_60_HZ);
|
||||||
|
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_INT_DISABLE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_HC_NO_CLEAR);
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_HC_CLEAR);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MsInPortMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_RESET);
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_MODE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_DATA, INPORT_MODE_BASE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LogitechBusMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONFIG, LOG_DEFAULT_MODE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_DISABLE_IRQ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
InPortStartMouse(
|
||||||
|
_In_ PVOID SynchronizeContext)
|
||||||
|
{
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = SynchronizeContext;
|
||||||
|
|
||||||
|
/* Enable interrupts */
|
||||||
|
switch (DeviceExtension->MouseType)
|
||||||
|
{
|
||||||
|
case NecBusMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_INT_ENABLE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_HC_NO_CLEAR);
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_HC_CLEAR);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MsInPortMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_MODE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_DATA,
|
||||||
|
INPORT_MODE_IRQ | INPORT_MODE_BASE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LogitechBusMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_ENABLE_IRQ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
|
InPortStopMouse(
|
||||||
|
_In_ PVOID SynchronizeContext)
|
||||||
|
{
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = SynchronizeContext;
|
||||||
|
|
||||||
|
/* Disable interrupts */
|
||||||
|
switch (DeviceExtension->MouseType)
|
||||||
|
{
|
||||||
|
case NecBusMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_INT_DISABLE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_HC_NO_CLEAR);
|
||||||
|
WRITE_MOUSE(DeviceExtension, NEC_BM_CONFIG, NEC_PPI_HC_CLEAR);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MsInPortMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_MODE);
|
||||||
|
WRITE_MOUSE(DeviceExtension, MS_INPORT_DATA, INPORT_MODE_BASE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LogitechBusMouse:
|
||||||
|
WRITE_MOUSE(DeviceExtension, LOG_BM_CONTROL, LOG_DISABLE_IRQ);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
238
drivers/input/inport/inport.c
Normal file
238
drivers/input/inport/inport.c
Normal file
|
@ -0,0 +1,238 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS InPort (Bus) Mouse Driver
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Driver entrypoint
|
||||||
|
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *******************************************************************/
|
||||||
|
|
||||||
|
#include "inport.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* GLOBALS ********************************************************************/
|
||||||
|
|
||||||
|
#ifdef ALLOC_PRAGMA
|
||||||
|
#pragma alloc_text(INIT, DriverEntry)
|
||||||
|
#pragma alloc_text(PAGE, InPortCreateClose)
|
||||||
|
#pragma alloc_text(PAGE, InPortAddDevice)
|
||||||
|
#pragma alloc_text(PAGE, InPortUnload)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
UNICODE_STRING DriverRegistryPath;
|
||||||
|
|
||||||
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortCreateClose(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s(%p, %p) %X\n", __FUNCTION__, DeviceObject,
|
||||||
|
Irp, IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
|
||||||
|
|
||||||
|
Irp->IoStatus.Information = 0;
|
||||||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortAddDevice(
|
||||||
|
_In_ PDRIVER_OBJECT DriverObject,
|
||||||
|
_In_ PDEVICE_OBJECT PhysicalDeviceObject)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PDEVICE_OBJECT Fdo;
|
||||||
|
PINPORT_DEVICE_EXTENSION FdoExtension = NULL;
|
||||||
|
WCHAR HardwareIdBuffer[32];
|
||||||
|
UNICODE_STRING HardwareId;
|
||||||
|
ULONG DummyResultLength;
|
||||||
|
UNICODE_STRING HardwareId1 = RTL_CONSTANT_STRING(L"*nEC1F00");
|
||||||
|
UNICODE_STRING HardwareId2 = RTL_CONSTANT_STRING(L"*PNP0F00");
|
||||||
|
UNICODE_STRING HardwareId3 = RTL_CONSTANT_STRING(L"*PNP0F02");
|
||||||
|
UNICODE_STRING HardwareId4 = RTL_CONSTANT_STRING(L"*PNP0F0D");
|
||||||
|
UNICODE_STRING HardwareId5 = RTL_CONSTANT_STRING(L"*PNP0F11");
|
||||||
|
UNICODE_STRING HardwareId6 = RTL_CONSTANT_STRING(L"*PNP0F15");
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s(%p, %p)\n", __FUNCTION__, DriverObject, PhysicalDeviceObject);
|
||||||
|
|
||||||
|
Status = IoCreateDevice(DriverObject,
|
||||||
|
sizeof(INPORT_DEVICE_EXTENSION),
|
||||||
|
NULL,
|
||||||
|
FILE_DEVICE_INPORT_PORT,
|
||||||
|
FILE_DEVICE_SECURE_OPEN,
|
||||||
|
FALSE,
|
||||||
|
&Fdo);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("Failed to create FDO 0x%X\n", Status);
|
||||||
|
goto Failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
FdoExtension = Fdo->DeviceExtension;
|
||||||
|
|
||||||
|
RtlZeroMemory(FdoExtension, sizeof(INPORT_DEVICE_EXTENSION));
|
||||||
|
FdoExtension->State = dsStopped;
|
||||||
|
FdoExtension->Self = Fdo;
|
||||||
|
FdoExtension->Pdo = PhysicalDeviceObject;
|
||||||
|
FdoExtension->Ldo = IoAttachDeviceToDeviceStack(Fdo, PhysicalDeviceObject);
|
||||||
|
if (!FdoExtension->Ldo)
|
||||||
|
{
|
||||||
|
DPRINT1("Failed to attach FDO\n");
|
||||||
|
Status = STATUS_NO_SUCH_DEVICE;
|
||||||
|
goto Failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
IoInitializeRemoveLock(&FdoExtension->RemoveLock, INPORT_TAG, 0, 0);
|
||||||
|
IoInitializeDpcRequest(Fdo, InPortDpcForIsr);
|
||||||
|
|
||||||
|
Status = IoGetDeviceProperty(PhysicalDeviceObject,
|
||||||
|
DevicePropertyHardwareID,
|
||||||
|
sizeof(HardwareIdBuffer),
|
||||||
|
HardwareIdBuffer,
|
||||||
|
&DummyResultLength);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("Failed to query the hardware ID string 0x%X\n", Status);
|
||||||
|
goto Failure;
|
||||||
|
}
|
||||||
|
RtlInitUnicodeString(&HardwareId, HardwareIdBuffer);
|
||||||
|
|
||||||
|
if (RtlEqualUnicodeString(&HardwareId, &HardwareId1, FALSE))
|
||||||
|
{
|
||||||
|
FdoExtension->MouseType = NecBusMouse;
|
||||||
|
FdoExtension->MouseAttributes.SampleRate = 60;
|
||||||
|
FdoExtension->MouseAttributes.NumberOfButtons = 2;
|
||||||
|
}
|
||||||
|
else if (RtlEqualUnicodeString(&HardwareId, &HardwareId3, FALSE) ||
|
||||||
|
RtlEqualUnicodeString(&HardwareId, &HardwareId4, FALSE))
|
||||||
|
{
|
||||||
|
FdoExtension->MouseType = MsInPortMouse;
|
||||||
|
FdoExtension->MouseAttributes.SampleRate = 100;
|
||||||
|
FdoExtension->MouseAttributes.NumberOfButtons = 3;
|
||||||
|
}
|
||||||
|
else if (RtlEqualUnicodeString(&HardwareId, &HardwareId2, FALSE) ||
|
||||||
|
RtlEqualUnicodeString(&HardwareId, &HardwareId5, FALSE) ||
|
||||||
|
RtlEqualUnicodeString(&HardwareId, &HardwareId6, FALSE))
|
||||||
|
{
|
||||||
|
FdoExtension->MouseType = LogitechBusMouse;
|
||||||
|
FdoExtension->MouseAttributes.SampleRate = 100;
|
||||||
|
FdoExtension->MouseAttributes.NumberOfButtons = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINT1("Unrecognized hardware '%wZ'\n", &HardwareId);
|
||||||
|
Status = STATUS_DEVICE_REMOVED;
|
||||||
|
goto Failure;
|
||||||
|
}
|
||||||
|
FdoExtension->MouseAttributes.MouseIdentifier = MOUSE_INPORT_HARDWARE;
|
||||||
|
/* 1 packet */
|
||||||
|
FdoExtension->MouseAttributes.InputDataQueueLength = sizeof(MOUSE_INPUT_DATA);
|
||||||
|
|
||||||
|
Fdo->Flags |= DO_BUFFERED_IO;
|
||||||
|
if (FdoExtension->Ldo->Flags & DO_POWER_PAGABLE)
|
||||||
|
Fdo->Flags |= DO_POWER_PAGABLE;
|
||||||
|
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
|
Failure:
|
||||||
|
if (FdoExtension)
|
||||||
|
{
|
||||||
|
if (FdoExtension->Ldo)
|
||||||
|
IoDetachDevice(FdoExtension->Ldo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Fdo)
|
||||||
|
{
|
||||||
|
IoDeleteDevice(Fdo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
InPortUnload(
|
||||||
|
_In_ PDRIVER_OBJECT DriverObject)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s(%p)\n", __FUNCTION__, DriverObject);
|
||||||
|
|
||||||
|
RtlFreeUnicodeString(&DriverRegistryPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortPower(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
DPRINT("%s(%p, %p) %X\n", __FUNCTION__, DeviceObject, Irp,
|
||||||
|
IoGetCurrentIrpStackLocation(Irp)->MinorFunction);
|
||||||
|
|
||||||
|
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
PoStartNextPowerIrp(Irp);
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
PoStartNextPowerIrp(Irp);
|
||||||
|
IoSkipCurrentIrpStackLocation(Irp);
|
||||||
|
Status = PoCallDriver(DeviceExtension->Ldo, Irp);
|
||||||
|
|
||||||
|
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
DriverEntry(
|
||||||
|
_In_ PDRIVER_OBJECT DriverObject,
|
||||||
|
_In_ PUNICODE_STRING RegistryPath)
|
||||||
|
{
|
||||||
|
DPRINT("%s(%p, %wZ)\n", __FUNCTION__, DriverObject, RegistryPath);
|
||||||
|
|
||||||
|
DriverRegistryPath.Buffer = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
|
RegistryPath->Length +
|
||||||
|
sizeof(UNICODE_NULL),
|
||||||
|
INPORT_TAG);
|
||||||
|
if (!DriverRegistryPath.Buffer)
|
||||||
|
{
|
||||||
|
DPRINT1("Failed to allocate the registry string buffer\n");
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
|
DriverRegistryPath.MaximumLength = RegistryPath->Length + sizeof(UNICODE_NULL);
|
||||||
|
RtlCopyUnicodeString(&DriverRegistryPath, RegistryPath);
|
||||||
|
DriverRegistryPath.Buffer[RegistryPath->Length / sizeof(WCHAR)] = UNICODE_NULL;
|
||||||
|
|
||||||
|
DriverObject->MajorFunction[IRP_MJ_CREATE] =
|
||||||
|
DriverObject->MajorFunction[IRP_MJ_CLOSE] = InPortCreateClose;
|
||||||
|
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = InPortInternalDeviceControl;
|
||||||
|
DriverObject->MajorFunction[IRP_MJ_POWER] = InPortPower;
|
||||||
|
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = InPortWmi;
|
||||||
|
DriverObject->MajorFunction[IRP_MJ_PNP] = InPortPnp;
|
||||||
|
DriverObject->DriverExtension->AddDevice = InPortAddDevice;
|
||||||
|
DriverObject->DriverUnload = InPortUnload;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
158
drivers/input/inport/inport.h
Normal file
158
drivers/input/inport/inport.h
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS InPort (Bus) Mouse Driver
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Main header file
|
||||||
|
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INPORT_H_
|
||||||
|
#define _INPORT_H_
|
||||||
|
|
||||||
|
#include <wdm.h>
|
||||||
|
#include <wmilib.h>
|
||||||
|
#include <wmistr.h>
|
||||||
|
#include <kbdmou.h>
|
||||||
|
|
||||||
|
#define INPORT_TAG 'tPnI'
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
dsStopped,
|
||||||
|
dsStarted,
|
||||||
|
dsRemoved
|
||||||
|
} INPORT_DEVICE_STATE;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
NecBusMouse,
|
||||||
|
MsInPortMouse,
|
||||||
|
LogitechBusMouse
|
||||||
|
} INPORT_MOUSE_TYPE;
|
||||||
|
|
||||||
|
typedef struct _INPORT_RAW_DATA
|
||||||
|
{
|
||||||
|
CHAR DeltaX;
|
||||||
|
CHAR DeltaY;
|
||||||
|
UCHAR Buttons;
|
||||||
|
ULONG ButtonDiff;
|
||||||
|
} INPORT_RAW_DATA, *PINPORT_RAW_DATA;
|
||||||
|
|
||||||
|
typedef struct _INPORT_DEVICE_EXTENSION
|
||||||
|
{
|
||||||
|
PDEVICE_OBJECT Self;
|
||||||
|
PDEVICE_OBJECT Pdo;
|
||||||
|
PDEVICE_OBJECT Ldo;
|
||||||
|
INPORT_DEVICE_STATE State;
|
||||||
|
IO_REMOVE_LOCK RemoveLock;
|
||||||
|
WMILIB_CONTEXT WmiLibInfo;
|
||||||
|
PUCHAR IoBase;
|
||||||
|
INPORT_MOUSE_TYPE MouseType;
|
||||||
|
|
||||||
|
/* Interrupt */
|
||||||
|
PKINTERRUPT InterruptObject;
|
||||||
|
ULONG InterruptVector;
|
||||||
|
KIRQL InterruptLevel;
|
||||||
|
KINTERRUPT_MODE InterruptMode;
|
||||||
|
BOOLEAN InterruptShared;
|
||||||
|
KAFFINITY InterruptAffinity;
|
||||||
|
|
||||||
|
/* Movement data and state of the mouse buttons */
|
||||||
|
INPORT_RAW_DATA RawData;
|
||||||
|
|
||||||
|
/* Mouclass */
|
||||||
|
CONNECT_DATA ConnectData;
|
||||||
|
PDEVICE_OBJECT ClassDeviceObject;
|
||||||
|
PVOID ClassService;
|
||||||
|
|
||||||
|
/* Mouse packet */
|
||||||
|
MOUSE_INPUT_DATA MouseInputData;
|
||||||
|
|
||||||
|
/* Previous state */
|
||||||
|
ULONG MouseButtonState;
|
||||||
|
|
||||||
|
/* Mouse device attributes */
|
||||||
|
MOUSE_ATTRIBUTES MouseAttributes;
|
||||||
|
} INPORT_DEVICE_EXTENSION, *PINPORT_DEVICE_EXTENSION;
|
||||||
|
|
||||||
|
DRIVER_INITIALIZE DriverEntry;
|
||||||
|
|
||||||
|
DRIVER_UNLOAD InPortUnload;
|
||||||
|
|
||||||
|
DRIVER_ADD_DEVICE InPortAddDevice;
|
||||||
|
|
||||||
|
_Dispatch_type_(IRP_MJ_CREATE)
|
||||||
|
_Dispatch_type_(IRP_MJ_CLOSE)
|
||||||
|
DRIVER_DISPATCH_PAGED InPortCreateClose;
|
||||||
|
|
||||||
|
_Dispatch_type_(IRP_MJ_INTERNAL_DEVICE_CONTROL)
|
||||||
|
DRIVER_DISPATCH_RAISED InPortInternalDeviceControl;
|
||||||
|
|
||||||
|
_Dispatch_type_(IRP_MJ_POWER)
|
||||||
|
DRIVER_DISPATCH_RAISED InPortPower;
|
||||||
|
|
||||||
|
_Dispatch_type_(IRP_MJ_SYSTEM_CONTROL)
|
||||||
|
DRIVER_DISPATCH_PAGED InPortWmi;
|
||||||
|
|
||||||
|
_Dispatch_type_(IRP_MJ_PNP)
|
||||||
|
DRIVER_DISPATCH_PAGED InPortPnp;
|
||||||
|
|
||||||
|
KSERVICE_ROUTINE InPortIsr;
|
||||||
|
|
||||||
|
IO_DPC_ROUTINE InPortDpcForIsr;
|
||||||
|
|
||||||
|
KSYNCHRONIZE_ROUTINE InPortStartMouse;
|
||||||
|
|
||||||
|
KSYNCHRONIZE_ROUTINE InPortStopMouse;
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortStartDevice(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortRemoveDevice(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
InPortInitializeMouse(
|
||||||
|
_In_ PINPORT_DEVICE_EXTENSION DeviceExtension);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortWmiRegistration(
|
||||||
|
_Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortWmiDeRegistration(
|
||||||
|
_Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortQueryWmiRegInfo(
|
||||||
|
_Inout_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PULONG RegFlags,
|
||||||
|
_Inout_ PUNICODE_STRING InstanceName,
|
||||||
|
_Out_opt_ PUNICODE_STRING *RegistryPath,
|
||||||
|
_Inout_ PUNICODE_STRING MofResourceName,
|
||||||
|
_Out_opt_ PDEVICE_OBJECT *Pdo);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortQueryWmiDataBlock(
|
||||||
|
_Inout_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp,
|
||||||
|
_In_ ULONG GuidIndex,
|
||||||
|
_In_ ULONG InstanceIndex,
|
||||||
|
_In_ ULONG InstanceCount,
|
||||||
|
_Out_opt_ PULONG InstanceLengthArray,
|
||||||
|
_In_ ULONG BufferAvail,
|
||||||
|
_Out_opt_ PUCHAR Buffer);
|
||||||
|
|
||||||
|
extern UNICODE_STRING DriverRegistryPath;
|
||||||
|
|
||||||
|
#endif /* _INPORT_H_ */
|
5
drivers/input/inport/inport.rc
Normal file
5
drivers/input/inport/inport.rc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#define REACTOS_VERSION_DLL
|
||||||
|
#define REACTOS_STR_FILE_DESCRIPTION "InPort (Bus) Mouse Device Driver"
|
||||||
|
#define REACTOS_STR_INTERNAL_NAME "inport"
|
||||||
|
#define REACTOS_STR_ORIGINAL_FILENAME "inport.sys"
|
||||||
|
#include <reactos/version.rc>
|
83
drivers/input/inport/ioctl.c
Normal file
83
drivers/input/inport/ioctl.c
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS InPort (Bus) Mouse Driver
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: I/O control handling
|
||||||
|
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *******************************************************************/
|
||||||
|
|
||||||
|
#include "inport.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortInternalDeviceControl(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PCONNECT_DATA ConnectData;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
|
DPRINT("%s(%p, %p) 0x%X\n", __FUNCTION__, DeviceObject, Irp,
|
||||||
|
IrpSp->Parameters.DeviceIoControl.IoControlCode);
|
||||||
|
|
||||||
|
switch (IrpSp->Parameters.DeviceIoControl.IoControlCode)
|
||||||
|
{
|
||||||
|
case IOCTL_INTERNAL_MOUSE_CONNECT:
|
||||||
|
if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA))
|
||||||
|
{
|
||||||
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Already connected */
|
||||||
|
if (DeviceExtension->ClassService)
|
||||||
|
{
|
||||||
|
Status = STATUS_SHARING_VIOLATION;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectData = IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
|
||||||
|
|
||||||
|
DeviceExtension->ClassDeviceObject = ConnectData->ClassDeviceObject;
|
||||||
|
DeviceExtension->ClassService = ConnectData->ClassService;
|
||||||
|
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IOCTL_INTERNAL_MOUSE_DISCONNECT:
|
||||||
|
DeviceExtension->ClassService = NULL;
|
||||||
|
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IOCTL_MOUSE_QUERY_ATTRIBUTES:
|
||||||
|
if (IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(MOUSE_ATTRIBUTES))
|
||||||
|
{
|
||||||
|
Status = STATUS_BUFFER_TOO_SMALL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(PMOUSE_ATTRIBUTES)Irp->AssociatedIrp.SystemBuffer = DeviceExtension->MouseAttributes;
|
||||||
|
Irp->IoStatus.Information = sizeof(MOUSE_ATTRIBUTES);
|
||||||
|
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Status = STATUS_INVALID_DEVICE_REQUEST;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
283
drivers/input/inport/pnp.c
Normal file
283
drivers/input/inport/pnp.c
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS InPort (Bus) Mouse Driver
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Plug and Play requests handling
|
||||||
|
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *******************************************************************/
|
||||||
|
|
||||||
|
#include "inport.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* GLOBALS ********************************************************************/
|
||||||
|
|
||||||
|
#ifdef ALLOC_PRAGMA
|
||||||
|
#pragma alloc_text(PAGE, InPortPnp)
|
||||||
|
#pragma alloc_text(PAGE, InPortStartDevice)
|
||||||
|
#pragma alloc_text(PAGE, InPortRemoveDevice)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortStartDevice(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PCM_RESOURCE_LIST AllocatedResources, AllocatedResourcesTranslated;
|
||||||
|
PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, DescriptorTranslated;
|
||||||
|
ULONG i;
|
||||||
|
ULONG RawVector;
|
||||||
|
BOOLEAN FoundBasePort = FALSE, FoundIrq = FALSE;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
ASSERT(DeviceExtension->State == dsStopped);
|
||||||
|
|
||||||
|
if (!IoForwardIrpSynchronously(DeviceExtension->Ldo, Irp))
|
||||||
|
{
|
||||||
|
Status = STATUS_UNSUCCESSFUL;
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
Status = Irp->IoStatus.Status;
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("LDO failed to start 0x%X\n", Status);
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
AllocatedResources = IrpSp->Parameters.StartDevice.AllocatedResources;
|
||||||
|
AllocatedResourcesTranslated = IrpSp->Parameters.StartDevice.AllocatedResourcesTranslated;
|
||||||
|
if (!AllocatedResources || !AllocatedResourcesTranslated)
|
||||||
|
{
|
||||||
|
DPRINT1("No allocated resources\n");
|
||||||
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AllocatedResources->Count != 1)
|
||||||
|
DPRINT1("Expected FullList count is 1, got %d\n", AllocatedResources->Count);
|
||||||
|
|
||||||
|
for (i = 0; i < AllocatedResources->List[0].PartialResourceList.Count; i++)
|
||||||
|
{
|
||||||
|
Descriptor = &AllocatedResources->List[0].PartialResourceList.PartialDescriptors[i];
|
||||||
|
DescriptorTranslated = &AllocatedResourcesTranslated->List[0].PartialResourceList.PartialDescriptors[i];
|
||||||
|
|
||||||
|
switch (Descriptor->Type)
|
||||||
|
{
|
||||||
|
case CmResourceTypePort:
|
||||||
|
{
|
||||||
|
DPRINT("[%p:%X:%X] I/O ports at [%p-%p]\n",
|
||||||
|
Descriptor,
|
||||||
|
Descriptor->ShareDisposition,
|
||||||
|
Descriptor->Flags,
|
||||||
|
Descriptor->u.Port.Start.LowPart,
|
||||||
|
Descriptor->u.Port.Start.LowPart + (Descriptor->u.Port.Length - 1));
|
||||||
|
|
||||||
|
if (!FoundBasePort)
|
||||||
|
{
|
||||||
|
DeviceExtension->IoBase = ULongToPtr(Descriptor->u.Port.Start.u.LowPart);
|
||||||
|
|
||||||
|
FoundBasePort = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CmResourceTypeInterrupt:
|
||||||
|
{
|
||||||
|
DPRINT("[%p:%X:%X] INT Vec %d Lev %d Aff %IX\n",
|
||||||
|
Descriptor,
|
||||||
|
Descriptor->ShareDisposition,
|
||||||
|
Descriptor->Flags,
|
||||||
|
Descriptor->u.Interrupt.Vector,
|
||||||
|
Descriptor->u.Interrupt.Level,
|
||||||
|
Descriptor->u.Interrupt.Affinity);
|
||||||
|
|
||||||
|
if (!FoundIrq)
|
||||||
|
{
|
||||||
|
DeviceExtension->InterruptVector = DescriptorTranslated->u.Interrupt.Vector;
|
||||||
|
DeviceExtension->InterruptLevel = (KIRQL)DescriptorTranslated->u.Interrupt.Level;
|
||||||
|
if (DescriptorTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED)
|
||||||
|
DeviceExtension->InterruptMode = Latched;
|
||||||
|
else
|
||||||
|
DeviceExtension->InterruptMode = LevelSensitive;
|
||||||
|
DeviceExtension->InterruptShared = (DescriptorTranslated->ShareDisposition == CmResourceShareShared);
|
||||||
|
DeviceExtension->InterruptAffinity = DescriptorTranslated->u.Interrupt.Affinity;
|
||||||
|
RawVector = Descriptor->u.Interrupt.Vector;
|
||||||
|
|
||||||
|
FoundIrq = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
DPRINT("[%p:%X:%X] Unrecognized resource type %X\n",
|
||||||
|
Descriptor,
|
||||||
|
Descriptor->ShareDisposition,
|
||||||
|
Descriptor->Flags,
|
||||||
|
Descriptor->Type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!FoundBasePort || !FoundIrq)
|
||||||
|
{
|
||||||
|
DPRINT1("The device resources were not found\n");
|
||||||
|
Status = STATUS_DEVICE_CONFIGURATION_ERROR;
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT("I/O base at %p\n", DeviceExtension->IoBase);
|
||||||
|
DPRINT("IRQ %d\n", RawVector);
|
||||||
|
|
||||||
|
Status = InPortWmiRegistration(DeviceExtension);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("WMI registration failed 0x%X\n", Status);
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
InPortInitializeMouse(DeviceExtension);
|
||||||
|
|
||||||
|
Status = IoConnectInterrupt(&DeviceExtension->InterruptObject,
|
||||||
|
InPortIsr,
|
||||||
|
DeviceExtension,
|
||||||
|
NULL,
|
||||||
|
DeviceExtension->InterruptVector,
|
||||||
|
DeviceExtension->InterruptLevel,
|
||||||
|
DeviceExtension->InterruptLevel,
|
||||||
|
DeviceExtension->InterruptMode,
|
||||||
|
DeviceExtension->InterruptShared,
|
||||||
|
DeviceExtension->InterruptAffinity,
|
||||||
|
FALSE);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("Could not connect to interrupt %d\n", DeviceExtension->InterruptVector);
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
KeSynchronizeExecution(DeviceExtension->InterruptObject,
|
||||||
|
InPortStartMouse,
|
||||||
|
DeviceExtension);
|
||||||
|
|
||||||
|
DeviceExtension->State = dsStarted;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortRemoveDevice(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
BOOLEAN IsStarted;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
InPortWmiDeRegistration(DeviceExtension);
|
||||||
|
|
||||||
|
IsStarted = (DeviceExtension->State == dsStarted);
|
||||||
|
|
||||||
|
DeviceExtension->State = dsRemoved;
|
||||||
|
|
||||||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
|
IoSkipCurrentIrpStackLocation(Irp);
|
||||||
|
Status = IoCallDriver(DeviceExtension->Ldo, Irp);
|
||||||
|
|
||||||
|
IoReleaseRemoveLockAndWait(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
|
||||||
|
/* Device is active */
|
||||||
|
if (IsStarted)
|
||||||
|
{
|
||||||
|
KeSynchronizeExecution(DeviceExtension->InterruptObject,
|
||||||
|
InPortStopMouse,
|
||||||
|
DeviceExtension);
|
||||||
|
|
||||||
|
IoDisconnectInterrupt(DeviceExtension->InterruptObject);
|
||||||
|
|
||||||
|
/* Flush DPC for ISR */
|
||||||
|
KeFlushQueuedDpcs();
|
||||||
|
}
|
||||||
|
|
||||||
|
IoDetachDevice(DeviceExtension->Ldo);
|
||||||
|
IoDeleteDevice(DeviceObject);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortPnp(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s(%p, %p) %X\n",
|
||||||
|
__FUNCTION__, DeviceObject, Irp, IrpSp->MinorFunction);
|
||||||
|
|
||||||
|
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
Irp->IoStatus.Information = 0;
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (IrpSp->MinorFunction)
|
||||||
|
{
|
||||||
|
case IRP_MN_START_DEVICE:
|
||||||
|
Status = InPortStartDevice(DeviceObject, Irp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_REMOVE_DEVICE:
|
||||||
|
return InPortRemoveDevice(DeviceObject, Irp);
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_STOP_DEVICE:
|
||||||
|
/* Device cannot work with other resources */
|
||||||
|
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IRP_MN_QUERY_REMOVE_DEVICE:
|
||||||
|
case IRP_MN_CANCEL_REMOVE_DEVICE:
|
||||||
|
case IRP_MN_STOP_DEVICE:
|
||||||
|
case IRP_MN_CANCEL_STOP_DEVICE:
|
||||||
|
case IRP_MN_SURPRISE_REMOVAL:
|
||||||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
|
IoSkipCurrentIrpStackLocation(Irp);
|
||||||
|
Status = IoCallDriver(DeviceExtension->Ldo, Irp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
IoSkipCurrentIrpStackLocation(Irp);
|
||||||
|
Status = IoCallDriver(DeviceExtension->Ldo, Irp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
202
drivers/input/inport/wmi.c
Normal file
202
drivers/input/inport/wmi.c
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS InPort (Bus) Mouse Driver
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: WMI support
|
||||||
|
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *******************************************************************/
|
||||||
|
|
||||||
|
#include "inport.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* GLOBALS ********************************************************************/
|
||||||
|
|
||||||
|
#ifdef ALLOC_PRAGMA
|
||||||
|
#pragma alloc_text(PAGE, InPortWmi)
|
||||||
|
#pragma alloc_text(PAGE, InPortWmiRegistration)
|
||||||
|
#pragma alloc_text(PAGE, InPortWmiDeRegistration)
|
||||||
|
#pragma alloc_text(PAGE, InPortQueryWmiRegInfo)
|
||||||
|
#pragma alloc_text(PAGE, InPortQueryWmiDataBlock)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
GUID GuidWmiPortData = POINTER_PORT_WMI_STD_DATA_GUID;
|
||||||
|
|
||||||
|
WMIGUIDREGINFO InPortWmiGuidList[] =
|
||||||
|
{
|
||||||
|
{&GuidWmiPortData, 1, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortQueryWmiRegInfo(
|
||||||
|
_Inout_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PULONG RegFlags,
|
||||||
|
_Inout_ PUNICODE_STRING InstanceName,
|
||||||
|
_Out_opt_ PUNICODE_STRING *RegistryPath,
|
||||||
|
_Inout_ PUNICODE_STRING MofResourceName,
|
||||||
|
_Out_opt_ PDEVICE_OBJECT *Pdo)
|
||||||
|
{
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(InstanceName);
|
||||||
|
UNREFERENCED_PARAMETER(MofResourceName);
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s()\n", __FUNCTION__);
|
||||||
|
|
||||||
|
*RegFlags = WMIREG_FLAG_INSTANCE_PDO;
|
||||||
|
*RegistryPath = &DriverRegistryPath;
|
||||||
|
*Pdo = DeviceExtension->Pdo;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortQueryWmiDataBlock(
|
||||||
|
_Inout_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp,
|
||||||
|
_In_ ULONG GuidIndex,
|
||||||
|
_In_ ULONG InstanceIndex,
|
||||||
|
_In_ ULONG InstanceCount,
|
||||||
|
_Out_opt_ PULONG InstanceLengthArray,
|
||||||
|
_In_ ULONG BufferAvail,
|
||||||
|
_Out_opt_ PUCHAR Buffer)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PPOINTER_PORT_WMI_STD_DATA InPortData;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s()\n", __FUNCTION__);
|
||||||
|
|
||||||
|
if (GuidIndex > RTL_NUMBER_OF(InPortWmiGuidList))
|
||||||
|
{
|
||||||
|
Status = STATUS_WMI_GUID_NOT_FOUND;
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only register 1 instance per GUID */
|
||||||
|
if (InstanceIndex != 0 || InstanceCount != 1)
|
||||||
|
{
|
||||||
|
Status = STATUS_WMI_INSTANCE_NOT_FOUND;
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!InstanceLengthArray || BufferAvail < sizeof(POINTER_PORT_WMI_STD_DATA))
|
||||||
|
{
|
||||||
|
Status = STATUS_BUFFER_TOO_SMALL;
|
||||||
|
goto Complete;
|
||||||
|
}
|
||||||
|
|
||||||
|
InPortData = (PPOINTER_PORT_WMI_STD_DATA)Buffer;
|
||||||
|
|
||||||
|
/* Bus mouse connector isn't defined in the DDK, so set type to something generic */
|
||||||
|
InPortData->ConnectorType = POINTER_PORT_WMI_STD_I8042;
|
||||||
|
/* 1 packet */
|
||||||
|
InPortData->DataQueueSize = 1;
|
||||||
|
/* Not supported by device */
|
||||||
|
InPortData->ErrorCount = 0;
|
||||||
|
|
||||||
|
InPortData->Buttons = DeviceExtension->MouseAttributes.NumberOfButtons;
|
||||||
|
InPortData->HardwareType = POINTER_PORT_WMI_STD_MOUSE;
|
||||||
|
*InstanceLengthArray = sizeof(POINTER_PORT_WMI_STD_DATA);
|
||||||
|
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
return WmiCompleteRequest(DeviceObject,
|
||||||
|
Irp,
|
||||||
|
Status,
|
||||||
|
sizeof(POINTER_PORT_WMI_STD_DATA),
|
||||||
|
IO_NO_INCREMENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortWmiRegistration(
|
||||||
|
_Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DeviceExtension->WmiLibInfo.GuidCount = RTL_NUMBER_OF(InPortWmiGuidList);
|
||||||
|
DeviceExtension->WmiLibInfo.GuidList = InPortWmiGuidList;
|
||||||
|
|
||||||
|
DeviceExtension->WmiLibInfo.QueryWmiRegInfo = InPortQueryWmiRegInfo;
|
||||||
|
DeviceExtension->WmiLibInfo.QueryWmiDataBlock = InPortQueryWmiDataBlock;
|
||||||
|
DeviceExtension->WmiLibInfo.SetWmiDataBlock = NULL;
|
||||||
|
DeviceExtension->WmiLibInfo.SetWmiDataItem = NULL;
|
||||||
|
DeviceExtension->WmiLibInfo.ExecuteWmiMethod = NULL;
|
||||||
|
DeviceExtension->WmiLibInfo.WmiFunctionControl = NULL;
|
||||||
|
|
||||||
|
return IoWMIRegistrationControl(DeviceExtension->Self,
|
||||||
|
WMIREG_ACTION_REGISTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortWmiDeRegistration(
|
||||||
|
_Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
return IoWMIRegistrationControl(DeviceExtension->Self,
|
||||||
|
WMIREG_ACTION_DEREGISTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
InPortWmi(
|
||||||
|
_In_ PDEVICE_OBJECT DeviceObject,
|
||||||
|
_Inout_ PIRP Irp)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
SYSCTL_IRP_DISPOSITION Disposition;
|
||||||
|
PINPORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
DPRINT("%s(%p, %p) %X\n", __FUNCTION__, DeviceObject, Irp,
|
||||||
|
IoGetCurrentIrpStackLocation(Irp)->MinorFunction);
|
||||||
|
|
||||||
|
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
Irp->IoStatus.Information = 0;
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = WmiSystemControl(&DeviceExtension->WmiLibInfo,
|
||||||
|
DeviceObject,
|
||||||
|
Irp,
|
||||||
|
&Disposition);
|
||||||
|
switch (Disposition)
|
||||||
|
{
|
||||||
|
case IrpProcessed:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IrpNotCompleted:
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IrpForward:
|
||||||
|
case IrpNotWmi:
|
||||||
|
IoSkipCurrentIrpStackLocation(Irp);
|
||||||
|
Status = IoCallDriver(DeviceExtension->Ldo, Irp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
|
@ -29,11 +29,14 @@ HKR, , UpperFilters, 0x00010000, "mouclass"
|
||||||
%IbmMfg% = IbmMfg
|
%IbmMfg% = IbmMfg
|
||||||
%LogMfg% = LogMfg
|
%LogMfg% = LogMfg
|
||||||
%MSMfg% = MSMfg
|
%MSMfg% = MSMfg
|
||||||
|
%NecMfg% = NecMfg
|
||||||
|
|
||||||
[StdMfg]
|
[StdMfg]
|
||||||
%SERIAL_MOUSE.DeviceDesc% = Serial_Inst,*PNP0F0C,SERENUM\PNP0F0C,*PNP0F17,SERENUM\PNP0F17,SERIAL_MOUSE
|
%SERIAL_MOUSE.DeviceDesc% = Serial_Inst,*PNP0F0C,SERENUM\PNP0F0C,*PNP0F17,SERENUM\PNP0F17,SERIAL_MOUSE
|
||||||
%PS2_MOUSE.DeviceDesc% = PS2_Inst,*PNP0F0E,*PNP0F19,PS2_MOUSE
|
%PS2_MOUSE.DeviceDesc% = PS2_Inst,*PNP0F0E,*PNP0F19,PS2_MOUSE
|
||||||
%HID_MOUSE.DeviceDesc% = HID_Inst,HID_DEVICE_SYSTEM_MOUSE
|
%HID_MOUSE.DeviceDesc% = HID_Inst,HID_DEVICE_SYSTEM_MOUSE
|
||||||
|
%*PNP0F0D.DeviceDesc% = Inp_Inst,*PNP0F0D
|
||||||
|
%*PNP0F11.DeviceDesc% = Inp_Inst,*PNP0F11
|
||||||
%*PNP0F13.DeviceDesc% = PS2_Inst,*PNP0F13
|
%*PNP0F13.DeviceDesc% = PS2_Inst,*PNP0F13
|
||||||
|
|
||||||
[IbmMfg]
|
[IbmMfg]
|
||||||
|
@ -42,12 +45,18 @@ HKR, , UpperFilters, 0x00010000, "mouclass"
|
||||||
[LogMfg]
|
[LogMfg]
|
||||||
%*PNP0F08.DeviceDesc% = Serial_Inst,*PNP0F08,SERENUM\PNP0F08
|
%*PNP0F08.DeviceDesc% = Serial_Inst,*PNP0F08,SERENUM\PNP0F08
|
||||||
%*PNP0F12.DeviceDesc% = PS2_Inst,*PNP0F12
|
%*PNP0F12.DeviceDesc% = PS2_Inst,*PNP0F12
|
||||||
|
%*PNP0F15.DeviceDesc% = Inp_Inst,*PNP0F15
|
||||||
|
|
||||||
[MSMfg]
|
[MSMfg]
|
||||||
|
%*PNP0F00.DeviceDesc% = Inp_Inst,*PNP0F00
|
||||||
%*PNP0F01.DeviceDesc% = Serial_Inst,*PNP0F01,SERENUM\PNP0F01
|
%*PNP0F01.DeviceDesc% = Serial_Inst,*PNP0F01,SERENUM\PNP0F01
|
||||||
|
%*PNP0F02.DeviceDesc% = Inp_Inst,*PNP0F02
|
||||||
%*PNP0F03.DeviceDesc% = PS2_Inst,*PNP0F03
|
%*PNP0F03.DeviceDesc% = PS2_Inst,*PNP0F03
|
||||||
%HID\Vid_045E&Pid_0047.DeviceDesc%=HID_Inst,, HID\Vid_045E&Pid_0047
|
%HID\Vid_045E&Pid_0047.DeviceDesc%=HID_Inst,, HID\Vid_045E&Pid_0047
|
||||||
|
|
||||||
|
[NecMfg]
|
||||||
|
%*nEC1F00.DeviceDesc% = Inp_Inst,*nEC1F00
|
||||||
|
|
||||||
; Generic Mouse
|
; Generic Mouse
|
||||||
%HID.MouseDevice%=HID_Inst,,HID_DEVICE_SYSTEM_MOUSE
|
%HID.MouseDevice%=HID_Inst,,HID_DEVICE_SYSTEM_MOUSE
|
||||||
|
|
||||||
|
@ -109,6 +118,25 @@ HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt\Parameters","MouseResolution",0
|
||||||
HKR, , EnumPropPages32, 0, "syssetup.dll,PS2MousePropPageProvider"
|
HKR, , EnumPropPages32, 0, "syssetup.dll,PS2MousePropPageProvider"
|
||||||
HKR, , LocationInformationOverride, 0, %LocationOverride%
|
HKR, , LocationInformationOverride, 0, %LocationOverride%
|
||||||
|
|
||||||
|
;----------------------------- INPORT DRIVER ----------------------------
|
||||||
|
|
||||||
|
[Inp_Inst]
|
||||||
|
CopyFiles = Inp_CopyFiles.NT, Mouclass_CopyFiles.NT
|
||||||
|
|
||||||
|
[Inp_CopyFiles.NT]
|
||||||
|
inport.sys
|
||||||
|
|
||||||
|
[Inp_Inst.Services]
|
||||||
|
AddService = inport, 0x00000002, Inp_Service_Inst
|
||||||
|
AddService = mouclass, , mouclass_Service_Inst
|
||||||
|
|
||||||
|
[Inp_Service_Inst]
|
||||||
|
ServiceType = 1
|
||||||
|
StartType = 1
|
||||||
|
ErrorControl = 1
|
||||||
|
ServiceBinary = %12%\inport.sys
|
||||||
|
LoadOrderGroup = Pointer Port
|
||||||
|
|
||||||
;---------------------------- HID MOUSE DRIVER --------------------------
|
;---------------------------- HID MOUSE DRIVER --------------------------
|
||||||
|
|
||||||
[HID_Inst.NT]
|
[HID_Inst.NT]
|
||||||
|
@ -140,6 +168,8 @@ StdMfg = "(Standard mice)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Standard Serial Mouse"
|
SERIAL_MOUSE.DeviceDesc = "Standard Serial Mouse"
|
||||||
PS2_MOUSE.DeviceDesc = "Standard PS/2 Mouse"
|
PS2_MOUSE.DeviceDesc = "Standard PS/2 Mouse"
|
||||||
HID_MOUSE.DeviceDesc = "HID Mouse"
|
HID_MOUSE.DeviceDesc = "HID Mouse"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 port for PS/2-style mice"
|
*PNP0F13.DeviceDesc = "PS/2 port for PS/2-style mice"
|
||||||
|
|
||||||
IbmMfg = "IBM"
|
IbmMfg = "IBM"
|
||||||
|
@ -148,11 +178,17 @@ IbmMfg = "IBM"
|
||||||
LogMfg = "Logitech"
|
LogMfg = "Logitech"
|
||||||
*PNP0F08.DeviceDesc = "Logitech Serial Mouse"
|
*PNP0F08.DeviceDesc = "Logitech Serial Mouse"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2-style Mouse"
|
*PNP0F12.DeviceDesc = "Logitech PS/2-style Mouse"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
MSMfg = "Microsoft"
|
MSMfg = "Microsoft"
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft Serial Mouse"
|
*PNP0F01.DeviceDesc = "Microsoft Serial Mouse"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2-style Mouse"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2-style Mouse"
|
||||||
|
|
||||||
|
NecMfg = "NEC"
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0405]
|
[Strings.0405]
|
||||||
MouseClassName = "Myši a jiná polohovací zařízení"
|
MouseClassName = "Myši a jiná polohovací zařízení"
|
||||||
|
|
||||||
|
@ -160,16 +196,23 @@ StdMfg = "(Standardní myši)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Standardní sériová myš"
|
SERIAL_MOUSE.DeviceDesc = "Standardní sériová myš"
|
||||||
PS2_MOUSE.DeviceDesc = "Standardní PS/2 myš"
|
PS2_MOUSE.DeviceDesc = "Standardní PS/2 myš"
|
||||||
HID_MOUSE.DeviceDesc = "HID myš"
|
HID_MOUSE.DeviceDesc = "HID myš"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 port pro PS/2 myši"
|
*PNP0F13.DeviceDesc = "PS/2 port pro PS/2 myši"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "IBM PS/2 Trackpoint"
|
*IBM3780.DeviceDesc = "IBM PS/2 Trackpoint"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech sériová myš"
|
*PNP0F08.DeviceDesc = "Logitech sériová myš"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2 myš"
|
*PNP0F12.DeviceDesc = "Logitech PS/2 myš"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft sériová myš"
|
*PNP0F01.DeviceDesc = "Microsoft sériová myš"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2 myš"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2 myš"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0407]
|
[Strings.0407]
|
||||||
MouseClassName = "Mäuse und andere Zeigegeräte"
|
MouseClassName = "Mäuse und andere Zeigegeräte"
|
||||||
LocationOverride = "eingesteckt in PS/2-Mausanschluss"
|
LocationOverride = "eingesteckt in PS/2-Mausanschluss"
|
||||||
|
@ -178,14 +221,21 @@ StdMfg = "(Standard-Maus)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Standard serielle Maus"
|
SERIAL_MOUSE.DeviceDesc = "Standard serielle Maus"
|
||||||
PS2_MOUSE.DeviceDesc = "Standard PS/2 Maus"
|
PS2_MOUSE.DeviceDesc = "Standard PS/2 Maus"
|
||||||
HID_MOUSE.DeviceDesc = "HID Maus"
|
HID_MOUSE.DeviceDesc = "HID Maus"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 Anschluss für PS/2-Maus"
|
*PNP0F13.DeviceDesc = "PS/2 Anschluss für PS/2-Maus"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech serielle Maus"
|
*PNP0F08.DeviceDesc = "Logitech serielle Maus"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2-Maus"
|
*PNP0F12.DeviceDesc = "Logitech PS/2-Maus"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft serielle Maus"
|
*PNP0F01.DeviceDesc = "Microsoft serielle Maus"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2-Maus"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2-Maus"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0408]
|
[Strings.0408]
|
||||||
MouseClassName = "Ποντίκια και άλλες συσκευές εισόδου"
|
MouseClassName = "Ποντίκια και άλλες συσκευές εισόδου"
|
||||||
|
|
||||||
|
@ -193,16 +243,23 @@ StdMfg = "(Πρότυπα ποντίκια)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Πρότυπο Σειριακό Ποντίκι"
|
SERIAL_MOUSE.DeviceDesc = "Πρότυπο Σειριακό Ποντίκι"
|
||||||
PS2_MOUSE.DeviceDesc = "Πρότυπο PS/2 Ποντίκι"
|
PS2_MOUSE.DeviceDesc = "Πρότυπο PS/2 Ποντίκι"
|
||||||
HID_MOUSE.DeviceDesc = "Ποντίκι HID"
|
HID_MOUSE.DeviceDesc = "Ποντίκι HID"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 θύρα για PS/2 ποντίκια"
|
*PNP0F13.DeviceDesc = "PS/2 θύρα για PS/2 ποντίκια"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "IBM PS/2 Trackpoint"
|
*IBM3780.DeviceDesc = "IBM PS/2 Trackpoint"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech Σειριακό Ποντίκι"
|
*PNP0F08.DeviceDesc = "Logitech Σειριακό Ποντίκι"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2 Ποντίκι"
|
*PNP0F12.DeviceDesc = "Logitech PS/2 Ποντίκι"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft Σειριακό Ποντίκι"
|
*PNP0F01.DeviceDesc = "Microsoft Σειριακό Ποντίκι"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2 Ποντίκι"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2 Ποντίκι"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0a]
|
[Strings.0a]
|
||||||
ReactOS = "Equipo de ReactOS"
|
ReactOS = "Equipo de ReactOS"
|
||||||
MouseClassName = "Ratones y otros dispositivos señaladores"
|
MouseClassName = "Ratones y otros dispositivos señaladores"
|
||||||
|
@ -212,16 +269,23 @@ StdMfg = "(Ratón estándar)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Ratón serie estándar"
|
SERIAL_MOUSE.DeviceDesc = "Ratón serie estándar"
|
||||||
PS2_MOUSE.DeviceDesc = "Ratón PS/2 estándar"
|
PS2_MOUSE.DeviceDesc = "Ratón PS/2 estándar"
|
||||||
HID_MOUSE.DeviceDesc = "Ratón oculto"
|
HID_MOUSE.DeviceDesc = "Ratón oculto"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "Puerto PS/2 para ratón PS/2"
|
*PNP0F13.DeviceDesc = "Puerto PS/2 para ratón PS/2"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "Trackpoint PS/2 de IBM"
|
*IBM3780.DeviceDesc = "Trackpoint PS/2 de IBM"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Ratón serie de Logitech"
|
*PNP0F08.DeviceDesc = "Ratón serie de Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Ratón PS/2 de Logitech"
|
*PNP0F12.DeviceDesc = "Ratón PS/2 de Logitech"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Ratón serie de Microsoft"
|
*PNP0F01.DeviceDesc = "Ratón serie de Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Ratón PS/2 de Microsoft"
|
*PNP0F03.DeviceDesc = "Ratón PS/2 de Microsoft"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.040C]
|
[Strings.040C]
|
||||||
MouseClassName = "Souris et autres périphériques de pointage"
|
MouseClassName = "Souris et autres périphériques de pointage"
|
||||||
LocationOverride = "Branché sur le port PS/2"
|
LocationOverride = "Branché sur le port PS/2"
|
||||||
|
@ -230,14 +294,21 @@ StdMfg = "(Souris standards)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Souris série standard"
|
SERIAL_MOUSE.DeviceDesc = "Souris série standard"
|
||||||
PS2_MOUSE.DeviceDesc = "Souris PS/2 standard"
|
PS2_MOUSE.DeviceDesc = "Souris PS/2 standard"
|
||||||
HID_MOUSE.DeviceDesc = "Souris HID"
|
HID_MOUSE.DeviceDesc = "Souris HID"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "Port PS/2 pour souris type PS/2"
|
*PNP0F13.DeviceDesc = "Port PS/2 pour souris type PS/2"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Souris série Logitech"
|
*PNP0F08.DeviceDesc = "Souris série Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Souris PS/2 Logitech"
|
*PNP0F12.DeviceDesc = "Souris PS/2 Logitech"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Souris série Microsoft"
|
*PNP0F01.DeviceDesc = "Souris série Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Souris PS/2 Microsoft"
|
*PNP0F03.DeviceDesc = "Souris PS/2 Microsoft"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0411]
|
[Strings.0411]
|
||||||
MouseClassName = "マウスとその他のポインティング デバイス"
|
MouseClassName = "マウスとその他のポインティング デバイス"
|
||||||
|
|
||||||
|
@ -245,16 +316,23 @@ StdMfg = "(スタンダード マウス)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "スタンダード シリアル マウス"
|
SERIAL_MOUSE.DeviceDesc = "スタンダード シリアル マウス"
|
||||||
PS2_MOUSE.DeviceDesc = "スタンダード PS/2 マウス"
|
PS2_MOUSE.DeviceDesc = "スタンダード PS/2 マウス"
|
||||||
HID_MOUSE.DeviceDesc = "HID マウス"
|
HID_MOUSE.DeviceDesc = "HID マウス"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2接続マウス用のPS/2 ポート"
|
*PNP0F13.DeviceDesc = "PS/2接続マウス用のPS/2 ポート"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "IBM PS/2 トラックポイント"
|
*IBM3780.DeviceDesc = "IBM PS/2 トラックポイント"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech シリアル マウス"
|
*PNP0F08.DeviceDesc = "Logitech シリアル マウス"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2接続マウス"
|
*PNP0F12.DeviceDesc = "Logitech PS/2接続マウス"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft シリアル マウス"
|
*PNP0F01.DeviceDesc = "Microsoft シリアル マウス"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2接続マウス"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2接続マウス"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0415]
|
[Strings.0415]
|
||||||
ReactOS = "Zespół ReactOS"
|
ReactOS = "Zespół ReactOS"
|
||||||
MouseClassName = "Mysz i inne urządzenia wskazujące"
|
MouseClassName = "Mysz i inne urządzenia wskazujące"
|
||||||
|
@ -264,16 +342,23 @@ StdMfg = "(Standardowa mysz)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Standardowa mysz szeregowa"
|
SERIAL_MOUSE.DeviceDesc = "Standardowa mysz szeregowa"
|
||||||
PS2_MOUSE.DeviceDesc = "Standardowa mysz PS/2"
|
PS2_MOUSE.DeviceDesc = "Standardowa mysz PS/2"
|
||||||
HID_MOUSE.DeviceDesc = "Mysz zgodna z HID"
|
HID_MOUSE.DeviceDesc = "Mysz zgodna z HID"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "Port PS/2 dla myszy"
|
*PNP0F13.DeviceDesc = "Port PS/2 dla myszy"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "Trackpoint PS/2 IBM"
|
*IBM3780.DeviceDesc = "Trackpoint PS/2 IBM"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Mysz szeregowa Logitech"
|
*PNP0F08.DeviceDesc = "Mysz szeregowa Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Mysz PS/2 Logitech"
|
*PNP0F12.DeviceDesc = "Mysz PS/2 Logitech"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Mysz szeregowa Microsoft"
|
*PNP0F01.DeviceDesc = "Mysz szeregowa Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Mysz PS/2 Microsoft"
|
*PNP0F03.DeviceDesc = "Mysz PS/2 Microsoft"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0416]
|
[Strings.0416]
|
||||||
MouseClassName = "Mouse e outros dispositivos apontadores"
|
MouseClassName = "Mouse e outros dispositivos apontadores"
|
||||||
|
|
||||||
|
@ -281,16 +366,23 @@ StdMfg = "(Mouse padrão)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Mouse serial padrão"
|
SERIAL_MOUSE.DeviceDesc = "Mouse serial padrão"
|
||||||
PS2_MOUSE.DeviceDesc = "Mouse PS/2 padrão"
|
PS2_MOUSE.DeviceDesc = "Mouse PS/2 padrão"
|
||||||
HID_MOUSE.DeviceDesc = "Mouse interno"
|
HID_MOUSE.DeviceDesc = "Mouse interno"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "Porta PS/2 para mouse PS/2"
|
*PNP0F13.DeviceDesc = "Porta PS/2 para mouse PS/2"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "Trackpoint PS/2 IBM"
|
*IBM3780.DeviceDesc = "Trackpoint PS/2 IBM"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Mouse serial Logitech"
|
*PNP0F08.DeviceDesc = "Mouse serial Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Mouse PS/2 Logitech"
|
*PNP0F12.DeviceDesc = "Mouse PS/2 Logitech"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Mouse serial Microsoft"
|
*PNP0F01.DeviceDesc = "Mouse serial Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Mouse PS/2 Microsoft"
|
*PNP0F03.DeviceDesc = "Mouse PS/2 Microsoft"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0418]
|
[Strings.0418]
|
||||||
ReactOS = "Echipa ReactOS"
|
ReactOS = "Echipa ReactOS"
|
||||||
MouseClassName = "Șoricel și alte dispozitive de indicare"
|
MouseClassName = "Șoricel și alte dispozitive de indicare"
|
||||||
|
@ -299,16 +391,23 @@ StdMfg = "(șoricel standard)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Șoricel serial standard"
|
SERIAL_MOUSE.DeviceDesc = "Șoricel serial standard"
|
||||||
PS2_MOUSE.DeviceDesc = "Șoricel PS/2 standard"
|
PS2_MOUSE.DeviceDesc = "Șoricel PS/2 standard"
|
||||||
HID_MOUSE.DeviceDesc = "Șoricel HID"
|
HID_MOUSE.DeviceDesc = "Șoricel HID"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "Port pentru șoricel PS/2"
|
*PNP0F13.DeviceDesc = "Port pentru șoricel PS/2"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "Rotulă IBM PS/2"
|
*IBM3780.DeviceDesc = "Rotulă IBM PS/2"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Șoricel serial Logitech"
|
*PNP0F08.DeviceDesc = "Șoricel serial Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Șoricel PS/2 Logitech"
|
*PNP0F12.DeviceDesc = "Șoricel PS/2 Logitech"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Șoricel serial Microsoft"
|
*PNP0F01.DeviceDesc = "Șoricel serial Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Șoricel PS/2 Microsoft"
|
*PNP0F03.DeviceDesc = "Șoricel PS/2 Microsoft"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0419]
|
[Strings.0419]
|
||||||
ReactOS = "Команда ReactOS"
|
ReactOS = "Команда ReactOS"
|
||||||
MouseClassName = "Мыши и другие указывающие устройства"
|
MouseClassName = "Мыши и другие указывающие устройства"
|
||||||
|
@ -318,14 +417,21 @@ StdMfg = "(Стандартная мышь)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Стандартная последовательная мышь"
|
SERIAL_MOUSE.DeviceDesc = "Стандартная последовательная мышь"
|
||||||
PS2_MOUSE.DeviceDesc = "Стандартная мышь PS/2"
|
PS2_MOUSE.DeviceDesc = "Стандартная мышь PS/2"
|
||||||
HID_MOUSE.DeviceDesc = "HID-мышь"
|
HID_MOUSE.DeviceDesc = "HID-мышь"
|
||||||
|
*PNP0F0D.DeviceDesc = "Стандартная мышь InPort"
|
||||||
|
*PNP0F11.DeviceDesc = "Стандартная шинная мышь"
|
||||||
*PNP0F13.DeviceDesc = "PS/2-порт на мыши PS/2-вида"
|
*PNP0F13.DeviceDesc = "PS/2-порт на мыши PS/2-вида"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Последовательная мышь Logitech"
|
*PNP0F08.DeviceDesc = "Последовательная мышь Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Мышь Logitech PS/2-вида"
|
*PNP0F12.DeviceDesc = "Мышь Logitech PS/2-вида"
|
||||||
|
*PNP0F15.DeviceDesc = "Шинная мышь Logitech"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Шинная мышь Microsoft"
|
||||||
*PNP0F01.DeviceDesc = "Последовательная мышь Microsoft"
|
*PNP0F01.DeviceDesc = "Последовательная мышь Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Мышь Microsoft InPort"
|
||||||
*PNP0F03.DeviceDesc = "Мышь Microsoft PS/2-вида"
|
*PNP0F03.DeviceDesc = "Мышь Microsoft PS/2-вида"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "Шинная мышь для NEC PC-98"
|
||||||
|
|
||||||
[Strings.041B]
|
[Strings.041B]
|
||||||
MouseClassName = "Myši a iné polohovacie zariadenia"
|
MouseClassName = "Myši a iné polohovacie zariadenia"
|
||||||
|
|
||||||
|
@ -333,14 +439,21 @@ StdMfg = "(Štandardná myš)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Štandardná sériová myš"
|
SERIAL_MOUSE.DeviceDesc = "Štandardná sériová myš"
|
||||||
PS2_MOUSE.DeviceDesc = "Štandardná PS/2 myš"
|
PS2_MOUSE.DeviceDesc = "Štandardná PS/2 myš"
|
||||||
HID_MOUSE.DeviceDesc = "HID myš"
|
HID_MOUSE.DeviceDesc = "HID myš"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 port pre myši typu PS/2"
|
*PNP0F13.DeviceDesc = "PS/2 port pre myši typu PS/2"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech sériová myš"
|
*PNP0F08.DeviceDesc = "Logitech sériová myš"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2 myš"
|
*PNP0F12.DeviceDesc = "Logitech PS/2 myš"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft sériová myš"
|
*PNP0F01.DeviceDesc = "Microsoft sériová myš"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2 myš"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2 myš"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.041f]
|
[Strings.041f]
|
||||||
ReactOS = "ReactOS Takımı"
|
ReactOS = "ReactOS Takımı"
|
||||||
MouseClassName = "Fâre ve Başka İmleme Aygıtları"
|
MouseClassName = "Fâre ve Başka İmleme Aygıtları"
|
||||||
|
@ -350,16 +463,23 @@ StdMfg = "(Ölçünlü Fâre)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Ölçünlü Dizilik Fâre"
|
SERIAL_MOUSE.DeviceDesc = "Ölçünlü Dizilik Fâre"
|
||||||
PS2_MOUSE.DeviceDesc = "Ölçünlü PS/2 Fâre"
|
PS2_MOUSE.DeviceDesc = "Ölçünlü PS/2 Fâre"
|
||||||
HID_MOUSE.DeviceDesc = "HID Fâre"
|
HID_MOUSE.DeviceDesc = "HID Fâre"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 Türünde Fâre İçin PS/2 Girişi"
|
*PNP0F13.DeviceDesc = "PS/2 Türünde Fâre İçin PS/2 Girişi"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "IBM PS/2 Trackpoint"
|
*IBM3780.DeviceDesc = "IBM PS/2 Trackpoint"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech Dizilik Fâre"
|
*PNP0F08.DeviceDesc = "Logitech Dizilik Fâre"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2 Türünde Fâre"
|
*PNP0F12.DeviceDesc = "Logitech PS/2 Türünde Fâre"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft Dizilik Fâre"
|
*PNP0F01.DeviceDesc = "Microsoft Dizilik Fâre"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2 Türünde Fâre"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2 Türünde Fâre"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0422]
|
[Strings.0422]
|
||||||
ReactOS = "Команда ReactOS"
|
ReactOS = "Команда ReactOS"
|
||||||
MouseClassName = "Миші та інші вказівні пристрої"
|
MouseClassName = "Миші та інші вказівні пристрої"
|
||||||
|
@ -369,16 +489,23 @@ StdMfg = "(Стандартні миші)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Стандартна послідовна миша"
|
SERIAL_MOUSE.DeviceDesc = "Стандартна послідовна миша"
|
||||||
PS2_MOUSE.DeviceDesc = "Стандартна миша PS/2"
|
PS2_MOUSE.DeviceDesc = "Стандартна миша PS/2"
|
||||||
HID_MOUSE.DeviceDesc = "HID-миша"
|
HID_MOUSE.DeviceDesc = "HID-миша"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "Порт PS/2 для миші PS/2-типу"
|
*PNP0F13.DeviceDesc = "Порт PS/2 для миші PS/2-типу"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "Трекпойнт IBM PS/2"
|
*IBM3780.DeviceDesc = "Трекпойнт IBM PS/2"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Послідовна миша Logitech"
|
*PNP0F08.DeviceDesc = "Послідовна миша Logitech"
|
||||||
*PNP0F12.DeviceDesc = "Миша Logitech PS/2-типу"
|
*PNP0F12.DeviceDesc = "Миша Logitech PS/2-типу"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Послідовна миша Microsoft"
|
*PNP0F01.DeviceDesc = "Послідовна миша Microsoft"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Миша Microsoft PS/2-типу"
|
*PNP0F03.DeviceDesc = "Миша Microsoft PS/2-типу"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0427]
|
[Strings.0427]
|
||||||
MouseClassName = "Pelės ir kiti manipuliatoriai"
|
MouseClassName = "Pelės ir kiti manipuliatoriai"
|
||||||
|
|
||||||
|
@ -386,25 +513,39 @@ StdMfg = "(Standartinė pelė)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "Standartinė nuoseklioji pelė"
|
SERIAL_MOUSE.DeviceDesc = "Standartinė nuoseklioji pelė"
|
||||||
PS2_MOUSE.DeviceDesc = "Standartinė PS/2 pelė"
|
PS2_MOUSE.DeviceDesc = "Standartinė PS/2 pelė"
|
||||||
HID_MOUSE.DeviceDesc = "HID pelė"
|
HID_MOUSE.DeviceDesc = "HID pelė"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "PS/2 jungtis PS/2 tipo pelei"
|
*PNP0F13.DeviceDesc = "PS/2 jungtis PS/2 tipo pelei"
|
||||||
|
|
||||||
*IBM3780.DeviceDesc = "IBM PS/2 rutulinis manipuliatorius"
|
*IBM3780.DeviceDesc = "IBM PS/2 rutulinis manipuliatorius"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech nuoseklioji pelė"
|
*PNP0F08.DeviceDesc = "Logitech nuoseklioji pelė"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2 tipo pelė"
|
*PNP0F12.DeviceDesc = "Logitech PS/2 tipo pelė"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft nuoseklioji pelė"
|
*PNP0F01.DeviceDesc = "Microsoft nuoseklioji pelė"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2 tipo pelė"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2 tipo pelė"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
||||||
[Strings.0804]
|
[Strings.0804]
|
||||||
StdMfg = "(标准鼠标)"
|
StdMfg = "(标准鼠标)"
|
||||||
SERIAL_MOUSE.DeviceDesc = "标准串口鼠标"
|
SERIAL_MOUSE.DeviceDesc = "标准串口鼠标"
|
||||||
PS2_MOUSE.DeviceDesc = "标准 PS/2 鼠标"
|
PS2_MOUSE.DeviceDesc = "标准 PS/2 鼠标"
|
||||||
HID_MOUSE.DeviceDesc = "HID 鼠标"
|
HID_MOUSE.DeviceDesc = "HID 鼠标"
|
||||||
|
*PNP0F0D.DeviceDesc = "Standard InPort Mouse"
|
||||||
|
*PNP0F11.DeviceDesc = "Standard Bus Mouse"
|
||||||
*PNP0F13.DeviceDesc = "用于 PS/2 风格鼠标的 PS/2 端口"
|
*PNP0F13.DeviceDesc = "用于 PS/2 风格鼠标的 PS/2 端口"
|
||||||
|
|
||||||
*PNP0F08.DeviceDesc = "Logitech 串口鼠标"
|
*PNP0F08.DeviceDesc = "Logitech 串口鼠标"
|
||||||
*PNP0F12.DeviceDesc = "Logitech PS/2 风格鼠标"
|
*PNP0F12.DeviceDesc = "Logitech PS/2 风格鼠标"
|
||||||
|
*PNP0F15.DeviceDesc = "Logitech Bus Mouse"
|
||||||
|
|
||||||
|
*PNP0F00.DeviceDesc = "Microsoft Bus Mouse"
|
||||||
*PNP0F01.DeviceDesc = "Microsoft 串口鼠标"
|
*PNP0F01.DeviceDesc = "Microsoft 串口鼠标"
|
||||||
|
*PNP0F02.DeviceDesc = "Microsoft InPort Mouse"
|
||||||
*PNP0F03.DeviceDesc = "Microsoft PS/2 风格鼠标"
|
*PNP0F03.DeviceDesc = "Microsoft PS/2 风格鼠标"
|
||||||
|
|
||||||
|
*nEC1F00.DeviceDesc = "NEC PC-98 Bus Mouse"
|
||||||
|
|
Loading…
Reference in a new issue