39 ULONG DeviceExtensionSize;
66 WARN_(I8042PRT,
"IoCreateDevice() failed with status 0x%08lx\n",
Status);
73 DeviceExtension->
Fdo =
Fdo;
74 DeviceExtension->
Pdo =
Pdo;
79 WARN_(I8042PRT,
"IoAttachDeviceToDeviceStackSafe() failed with status 0x%08lx\n",
Status);
88 Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
92 if (DeviceExtension && DeviceExtension->
LowerDevice)
144 ERR_(I8042PRT,
"Unknown FDO type %u\n", FdoDeviceExtension->
Type);
167 WARN_(I8042PRT,
"IoBuildDeviceIoControlRequest() failed\n");
185 WARN_(I8042PRT,
"IoCallDriver() failed with status 0x%08lx\n",
Status);
205 WARN_(I8042PRT,
"KeyboardHook.InitializationRoutine() failed with status 0x%08lx\n",
Status);
215 if (TopOfStack !=
NULL)
238 ERR_(I8042PRT,
"Unknown FDO type %u\n", DeviceExtension->
Type);
251 UCHAR Port = DeviceExtension->PacketPort;
256 DeviceExtension->ControlPort,
260 WARN_(I8042PRT,
"Failed to send packet byte!\n");
266 DeviceExtension->DataPort,
267 DeviceExtension->Packet.Bytes[DeviceExtension->Packet.CurrentByte]);
275 if (DeviceExtension->Packet.State ==
Idle)
281 DeviceExtension->PacketResends++;
282 if (DeviceExtension->PacketResends > DeviceExtension->Settings.ResendIterations)
284 DeviceExtension->Packet.State =
Idle;
285 DeviceExtension->PacketComplete =
TRUE;
287 DeviceExtension->PacketResends = 0;
290 DeviceExtension->Packet.CurrentByte--;
294 DeviceExtension->Packet.State =
Idle;
295 DeviceExtension->PacketComplete =
TRUE;
297 DeviceExtension->PacketResends = 0;
301 DeviceExtension->PacketResends = 0;
304 if (DeviceExtension->Packet.CurrentByte >= DeviceExtension->Packet.ByteCount)
306 DeviceExtension->Packet.State =
Idle;
307 DeviceExtension->PacketComplete =
TRUE;
314 DeviceExtension->Packet.State =
Idle;
315 DeviceExtension->PacketComplete =
TRUE;
319 DeviceExtension->Packet.CurrentByte++;
341 if (DeviceExtension->Packet.State !=
Idle)
347 switch (FdoDeviceExtension->Type)
349 case Keyboard: DeviceExtension->PacketPort = 0;
break;
352 ERR_(I8042PRT,
"Unknown FDO type %u\n", FdoDeviceExtension->Type);
358 DeviceExtension->Packet.Bytes =
Bytes;
359 DeviceExtension->Packet.CurrentByte = 0;
360 DeviceExtension->Packet.ByteCount =
ByteCount;
363 DeviceExtension->CurrentIrp =
Irp;
364 DeviceExtension->CurrentIrpDevice = FdoDeviceExtension->Fdo;
369 DeviceExtension->Packet.State =
Idle;
374 DeviceExtension->Packet.CurrentByte++;
381 DeviceExtension->CurrentIrp =
NULL;
382 DeviceExtension->CurrentIrpDevice =
NULL;
450 ERR_(I8042PRT,
"Unknown FDO type %u\n", DeviceExtension->
Type);
470 return PoCallDriver(LowerDevice,
Irp);
496 WARN_(I8042PRT,
"IoAllocateDriverObjectExtension() failed with status 0x%08lx\n",
Status);
510 WARN_(I8042PRT,
"DuplicateUnicodeString() failed with status 0x%08lx\n",
Status);
517 WARN_(I8042PRT,
"ReadRegistryEntries() failed with status 0x%08lx\n",
Status);
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define _Dispatch_type_(a)
#define FILE_DEVICE_SECURE_OPEN
#define NT_SUCCESS(StatCode)
static void cleanup(void)
DRIVER_INITIALIZE DriverEntry
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE
VOID NTAPI i8042InitializeHwHacks(VOID)
static DRIVER_STARTIO i8042StartIo
static NTSTATUS NTAPI i8042InternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
static NTSTATUS NTAPI i8042SystemControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS i8042StartPacket(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN PFDO_DEVICE_EXTENSION FdoDeviceExtension, IN PUCHAR Bytes, IN ULONG ByteCount, IN PIRP Irp)
static NTSTATUS NTAPI i8042Power(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN i8042PacketIsr(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN UCHAR Output)
static BOOLEAN i8042PacketWrite(IN PPORT_DEVICE_EXTENSION DeviceExtension)
static NTSTATUS NTAPI i8042DeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _I8042_HOOK_WORKITEM * PI8042_HOOK_WORKITEM
NTSTATUS NTAPI i8042SynchWritePortKbd(IN PVOID Context, IN UCHAR Value, IN BOOLEAN WaitForAck)
DRIVER_DISPATCH i8042KbdDeviceControl
DRIVER_DISPATCH i8042KbdInternalDeviceControl
DRIVER_STARTIO i8042KbdStartIo
DRIVER_DISPATCH i8042MouInternalDeviceControl
NTSTATUS DuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
struct _I8042_MOUSE_EXTENSION * PI8042_MOUSE_EXTENSION
NTSTATUS NTAPI i8042SynchReadPort(IN PVOID Context, OUT PUCHAR Value, IN BOOLEAN WaitForAck)
IO_WORKITEM_ROUTINE i8042SendHookWorkItem
NTSTATUS ReadRegistryEntries(IN PUNICODE_STRING RegistryPath, OUT PI8042_SETTINGS Settings)
struct _I8042_KEYBOARD_EXTENSION * PI8042_KEYBOARD_EXTENSION
DRIVER_DISPATCH ForwardIrpAndForget
struct _I8042_DRIVER_EXTENSION * PI8042_DRIVER_EXTENSION
DRIVER_ADD_DEVICE i8042AddDevice
BOOLEAN i8042Write(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN PUCHAR addr, IN UCHAR data)
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
#define IOCTL_INTERNAL_KEYBOARD_CONNECT
#define IOCTL_INTERNAL_MOUSE_CONNECT
#define ExFreePoolWithTag(_P, _T)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
DRIVER_DISPATCH(nfs41_FsdDispatch)
#define IOCTL_INTERNAL_I8042_HOOK_MOUSE
#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD
struct _INTERNAL_I8042_HOOK_KEYBOARD INTERNAL_I8042_HOOK_KEYBOARD
struct _INTERNAL_I8042_HOOK_MOUSE INTERNAL_I8042_HOOK_MOUSE
#define IoSkipCurrentIrpStackLocation(Irp)
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice, IN OUT PDEVICE_OBJECT *AttachedToDeviceObject)
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
#define IoCompleteRequest
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
KIRQL NTAPI KeAcquireInterruptSpinLock(IN PKINTERRUPT Interrupt)
VOID NTAPI KeReleaseInterruptSpinLock(IN PKINTERRUPT Interrupt, IN KIRQL OldIrql)
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
#define STATUS_INTERNAL_ERROR
#define STATUS_UNEXPECTED_IO_ERROR
PPCI_DRIVER_EXTENSION DriverExtension
#define IRP_MJ_DEVICE_CONTROL
PDEVICE_OBJECT LowerDevice
PPORT_DEVICE_EXTENSION PortDeviceExtension
INTERNAL_I8042_HOOK_KEYBOARD KeyboardHook
INTERNAL_I8042_HOOK_MOUSE MouseHook
OUT PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine
struct _IO_STACK_LOCATION::@1605::@1606 DeviceIoControl
union _IO_STACK_LOCATION::@1605 Parameters
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_IO_TIMEOUT
#define STATUS_DEVICE_BUSY
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE Fdo
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT Pdo
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
#define IRP_MJ_SYSTEM_CONTROL
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
#define ObDereferenceObject