JIURL keyboard driver of 3: JIURL Home: http://jiurl.yeah.net Date: 2003-12-13
4 Introduction to Compilation and Debugging Environment 4.1 Source PS / 2 Keyboard Drive Take 3 floors, the driver of the most underlying device object is ACPI, the drive of the intermediate layer device object is I8042PRT, the driver of the highest layer device object is KBDClass. The source code of the DDK has I8042PRT and KBDCLASS, located in ... / NTDDK / SRC / INPUT / PNPI8042, ... / NTDDK / SRC / INPUT / KBDCLASS. Note that there is no source code of the ACPI in the source code attached to the DDK, but ACPI has little effect on the keyboard driver. A directory called ACPI can be found in DDK, but the following is not the source code of ACPI.sys, but the source code of ACPIEC.SYS, no use. 4.2 Closing the Document Protection Replacement System We want to use our own Debug version of the I8042PRT.SYS and KBDClass.sys to replace these two SYS files under the system under ... / Winnt / System32 / Drivers. However, due to document protection, after we replace, the system will automatically replace it. So we turn off Win2K's document protection. Replacing the driver files There are other methods, but the file protection is turned off here, replacing the driver file directly, which is the most appropriate. 4.3 Change the source code to generate debugging information To get debugging information, we modify a small amount of source. Modifying a lot of places may all be achieved. It is only a way to introduce here. 4.3.1 kbdclass kbdclass.h changes in #define DEFAULT_DEBUG_LEVEL 0 to #define DEFAULT_DEBUG_LEVEL 3 // # define DEFAULT_DEBUG_LEVEL 04.3.2 i8042prti8042prt.h changes in #define Print (_flags_, _x_) / if (Globals.DebugFlags & (_flags_) ||! (_ Flags_)) {/ dbgprint (PDRIVERNAME); / dbgprint _x_; /} # define isrprint (_flags_, _x_) / if (Globals.Isrdebugflags & (_Flags_) ||! (_ Flags_)) {/ dBGPrint (ULONG)> = 0x0001000? Pisrmou: pisrkb); / dbgprint _x_; /} Change to #define print (_flags_, _x_) / {/ dbgprint (pdrivername); / dbgprint _x_; /} # define isrprint _flags_, _x_) / {/ dbgprint ((ULONG) (_ Flags_))> = 0x0001000? Pisrmou: Pisrkb); / dBgPrint _x_; /} Since I use Windbg to debug, when I want to get debugging information on a key I found that the debugging information caused by the mouse keeps the appearance, so that I have no way to press a key in the target system, so I removed some statements that print debug information to get the opportunity to press a key in the target system. Note All debug print statements in I8042MouseInterruptService, i8042MouseISRDPC, I8XWRITASRDPC, I8XWRITASYQUE, I8XGetByteasynchronous. 4.4 Source level debugging uses WindBG to make source level debugging. Single machine uses Windbg, you can refer to the article "Use the VMware to implement a single machine using Windbg", this article can be found on my homepage.
5 Keyboard Drive Overview The keyboard drive is located between the application layer WIN32K! RAWINPUTTHREAD and the hardware I8042. Win32k! RawinputThread always sends an IRP_MJ_READ IRP to the top of the keyboard device stack, waiting for data from the keyboard. When I8042 has data to be taken away, the interrupt is triggered. This interrupt interrupt service routine is a function in the keyboard drive, so the keyboard driver can read data from i8042. After a series of processing, finally complete the waiting waiting IRP. 5.1 Keyboard Equipment Stack We first take a look at the keyboard driven equipment stack. After the initialization is completed, the system is in operation, and inserts a PS / 2 keyboard, let's see what it looks like. We look at the object manager namespace (Object Manager Namespace), which can see the drive object called KBDClass in / Driver / Lower. In the system in operation, interrupt to WindBG, we use Windbg! DrvObj command, you can get its device object list. kd> drvobj / driver / kbdclassDriver object (fe4f6330) is for:! / Driver / KbdclassDriver Extension List: (id, addr) Device Object list: fe4f5df0 device object is only one address fe4f5df0, use the WinDbg devobj order to obtain! Some information about this device object. ! Kd> devobj fe4f5df0Device object (fe4f5df0) is for: KeyboardClass0 / Driver / Kbdclass DriverObject fe4f6330Current Irp fe43e6c8 RefCount 0 Type 0000000b Flags 00002044DevExt fe4f5ea8 DevObjExt fe4f5fd8 ExtensionFlags (0000000000) AttachedTo (Lower) fe4f5020 / Driver / i8042prtDevice queue is busy - Queue empty . See that this device object has a name called KeyboardClass0, we can use WinObj to see this device object in / device / down. Use the WinDbg! Devstack command to see if the device stack kd device object fe4f5df0 is / Device / KeyboardClass0 where>! Devstack fe4f5df0! DevObj! DrvObj! DevExt ObjectName> fe4f5df0 / Driver / Kbdclass fe4f5ea8 KeyboardClass0fe4f5020 / Driver / i8042prt fe4f50d8 fe4dd730 / driver / ACPI fe507468 0000000e devNode fe4fed68:! DeviceInst is "ACPI / PNP0303 / 4 & 5289e18 & 0" ServiceName is "i8042prt" we see device stack topmost device object is fe4f5df0, has a name, called KeyboardClass0, belonging to the drive Kbdclass. The device object of the equipment stack intermediate layer is Fe4F5020, no name, belongs to the driver I8042PRT. The bottom of the equipment stack is FE4DD730, with name, 0000000E, belongs to the drive ACPI. And the contents of the devNode section are related to the registry, we will discuss later.
It should be noted that the ACPI is used for the name of the device object that is driven by the keyboard. It is related to your computer. It is 0000000E here, which is likely not. We see / Driver / KBDClass, / Driver / I8042PRT, / Driver / ACPI is the name of the drive object. A drive object corresponds to a driver file. Let's take a look at the list of equipment objects of / driver / i8042prt. Kd>! drvobj / driver / i8042prtdriver object (Fe4f69f0) is for: / driver / i8042prtdriver extension list: (id, addr) Device Object List: Fe4d3ba0 Fe4F5020 You can see two device objects. Use! DevObj We can know that one is the device object for the PS / 2 keyboard drive, one is the device object for the PS / 2 mouse drive. ACPI has multiple device objects. The earliest, I saw the name of KBDClass, guess this is the keyboard driver, and then seeing its equipment stack. I saw I8042PRT, ACPI, and later practices also proved KBDClass, i8042PRT is the keyboard drive. The equipment stack of the PS / 2 keyboard we see here is that there is no such additional other keyboard filtering. The topmost device object is a device object that drives KBDCLASS. The intermediate layer device object is a device object that drives I8042PRT. The bottom of the device is a device object that drives ACPI. 5.2 Introduction to each layer of the KBDClass keyboard equipment stack top, all IRPs issued by the application layer are first sent here. For the IRP of the IRP_MJ_READ waiting for keyboard data, it is completely processed by this layer, and does not pass. I8042PRT is done at this layer on all operations of hardware I8042. The interrupt service routine that the keyboard interrupt is also a function of this layer. Use Windbg! The IDT command can see this. KD>! IDTIDT for Processor # 000: 804625E6 (NT! Kitrap00) 01: 80462736 (NT! Kitrap01) ... B3: Fe4CF264 (Vector: B3, Irql: A, SyncIRQL: A, Connected: true, no: 0, ShareVector: FALSE, Mode: Latched, ISR:! i8042prt I8042KeyboardInterruptService (fe1c1750)) ... ff:! 804613f0 (nt KiUnexpectedInterrupt207) can be seen as b3 interrupt vector interrupt service routine for the final i8042prt I8042KeyboardInterruptService, namely i8042prt in! Function I8042keyboardInterruptService. Driven interrupts and general interruptions are different, we will discuss later. ACPI is hard to do. 5.3 Keyboard Drive Operation Keyboard Drive Main Work is, when the keyboard is pressed, the keyboard drives the scan code of the button from the port, and finally handles it to the top of the keyboard device stack. IRP of IRP_MJ_READ. In order to complete this task, the keyboard drive uses two buffers used in two cycles. I8042PRT and KBDClass have one of themselves, cycles and buffers. Each of them is a keyboard_input_data structure that stores a scan code and its related information.
In the keyboard driven comments, the buffer used by this loop is called the input data queue (I8042PRT's buffer called Port Keyboard Input Data Queue, the buffer of KBDClass is called Class Input Data Queue. Enter the data queue more image, we also use this called. In a custom device extension of i8042PRT, some pointers and count values are saved to use it to enter the data queue. PKEYBOARD_INPUT_DATA type INPUTDATA, DATAIN, DATAOUT, DATAEND. Ulong type INPUTCOUNT. InputData, this pointer, points to the beginning of the input data queue. DataEnd This pointer points to the end of the input data queue. DataIN this pointer, pointing to the new data to enter the queue, it will be placed in the queue. DataOut This pointer points to the data you want to queue and start in the queue. InputCount This value is in the input data queue, the number of data. In the custom device extension of KBDClass, some pointers and count values are saved to use it to enter the data queue. PKEYBOARD_INPUT_DATA type INPUTDATA, DATAIN, DATAOUT, DATAEND. Ulong type INPUTCOUNT. InputData, this pointer, points to the beginning of the input data queue. DataEnd This pointer points to the end of the input data queue. DataIN this pointer, pointing to the new data to enter the queue, it will be placed in the queue. DataOut This pointer points to the data you want to queue and start in the queue. InputCount This value is in the input data queue, the number of data. For these two input data queues, put into one data, this data should be placed at the DataIN, then DataIN is moved behind, INPUTCOUNT plus 1. When Data is moved to the end of the queue, it will start from the beginning of the queue. Remove a data, this data should be removed from the DataUT, then DataOut is moved behind, and the InputCount minus 1. When Dataout is moved to the end of the queue, it will start from the beginning of the queue. For I8042PRT input data queues. In the keyboard interrupt service routine, the button information read from the I8042 is placed in the input data queue of I8042PRT. In the callback function of the upper processing input, the data in the input data queue of the I8042PRT is removed. For the input data queue of KBDClass. It is used only when the size of the IRP_MJ_READ IRP is required to read the size of the I8042PRT. That is, only the input data queue of KBDClass is only used when the one waiting for IRP reads the input data. When the data waiting to read IRP After reading the required data, the remaining data is put into the input data queue of KBDClass. The next application layer IRP_MJ_READ IRP, when there is data in the input data queue of KBDCLASS, read data directly from the input data queue of KBDCLASS. Below we do a general introduction to the process of the keyboard driver to handle the keyboard button. When a button on the keyboard is released, a BREAK code is generated to initiate a keyboard interrupt. The keyboard interrupt causes the keyboard interrupt service routine to be executed. The i8042keyboardInterRuptService, which leads to the final I8042PRT.
In i8042keyboardInterRuptService, read the scan code of the button from the port, put it in a keyboard_input_data. Put this keyboard_input_data into the input data queue of i8042PRT, one interrupt is put into one data, and the data is moved behind, and the inputcount plus 1. Finally, KeinsertQueuedPC will make more processing DPC (delay process call). In the DPC, the callback function of the upper processing input is called (that is, the function of KBDClass processing input data), takes the data in the input data queue of i8042PRT. Since the device extension saves the entry address of the callback function of the input data, he knows who the call is called. After the upper processing input callback function (which is a function of KBDClass processing input data) After the data is removed, the DataOUt of the input data queue of the I8042PRT is moved back, and the InputCount is reduced accordingly. In the function of the input data, the KBDCLASS process is satisfied with the IRP of the application layer. When IRP requires the size of the data, it is greater than or equal to the data in the input data queue in I8042PRT, IRP reads all input data directly from the input data queue of I8042PRT, and does not use the input data queue of KBDClass. Most of the cases are this. When IRP requires the size of the data, less than the data in the input data queue of I8042PRT, IRP reads directly from the input data queue of I8042PRT, and then this IRP is completed. The remaining data in the input data queue of i8042PRT is placed in the input data queue of KBDClass. When the application layer issues the next read data IRP, the IRP will read data directly from the KBDClass input data queue, and do not wait. The device object of the keyboard drives the layers is created during the initialization process. The keyboard drive device is constructed in the initialization process. The keyboard interrupt is connected during the initialization process. KBDClass handles the entry address of the callback function of the input data, tells I8042PRT during the initialization process, and I8042PRT saves this entry address. I8042PRT and KBDClass input data queues are memory allocated during initialization. Their INPUTDATA, DATAIN, DATAOUT, DATAEND, INPUTCOUNT set at the beginning of initialization. Detailed keyboard drives the processing of keyboard buttons, discussed later. 6 Keyboard Drive Initialization 6.1 Keyboard Drive Initialization Debug Information The following is the output of debug printing in the initialization process using the debug version of the debug version of the WINDBG. The content after symbol [comment] is the simple comment I added. The statement starting with JIURL is the debug print statement I added in KBDClass.
[Comment] i8042prt DriverEntry8042:! I8xServiceParameters: / Parameters path is / REGISTRY / MACHINE / SYSTEM / ControlSet001 / Services / i8042prt / Parameters8042: breaking on SysRq8042: I8xServiceParameters results..8042: Debug flags are 0x88888808, Isr Debug flags are 0x08042: Interrupts are not shared8042: StallMicroseconds = 508042: ResendIterations = 38042: PollingIterations = 120008042: PollingTerationsMaximum = 120008042: DriverEntry (0x0) [Note] kbdclass DriverEntryjiurl DriverEntryKBDCLASS-KbdConfiguration:! parameters path is / REGISTRY / MACHINE / SYSTEM / ControlSet001 / Services / kbdclass / ParametersKBDCLASS-KbdConfiguration: Keyboard class base name = KeyboardClassKBDCLASS-KbdConfiguration: KeyboardInputDataQueueLength = 0x4b0KBDCLASS-KbdConfiguration: MaximumPortsServiced = 3KBDCLASS-KbdConfiguration: Connection Type =
1jiurl KbdDeterminePortsServicedKBDCLASS-KbdDeterminePortsServiced: RtlQueryRegistryValues failed with 0xc0000034KBDCLASS-KeyboardClassInitialize: Will service 0 port devicesKBDCLASS-KeyboardClassInitialize: exit [Note] i8042prt I8xAddDevice8042:! Enter Add Device 8042:! Add Device (0x0) [Note] kbdclass KeyboardAddDevicejiurl KeyboardAddDevicejiurl KbdCreateClassObjectKBDCLASS-KbdCreateClassObject: enterKBDCLASS -KbdCreateClassObject: Creating device object named / Device / KeyboardClass0jiurl KbdInitializeDataQueueKBDCLASS-KbdInitializeDataQueue: enterKBDCLASS-KbdInitializeDataQueue: exitKBDCLASS-KbdCreateClassObject: exitjiurl KeyboardQueryDeviceKeyjiurl KeyboardQueryDeviceKeyjiurl KeyboardQueryDeviceKeyjiurl KeyboardAddDeviceExjiurl KbdSendConnectRequestKBDCLASS-KbdSendConnectRequest: enter8042: IOCTL: enter8042: IOCTL: keyboard connectjiurl KeyboardClassPassThrough8042: IOCTL: enter8042: hook keyboard Received! 8042: ioctl: EXIT (0x0) 8042: Result of sending 0xB3FC3 WAS 0x08042: ioctl: exit (0x0 ) KBDCLASS-KbdSendConnectRequest: exitKBDCLASS-KeyboardClassInitialize: Stored / Device / KeyboardClass0 in DeviceMap [Note] IRP_MJ_PNP IRP_MN_QUERY_LEGACY_BUS_INFORMATIONjiurl KeyboardPnP8042: I8xPnP (kb), enter (min func = 0x18) 8042: I8xPnP (kb) exit (status = 0xc00000bb) [Notes] debugging information ps / 2 mouse, we do not care 8042: enter Add Device 8042: Add Device (0x0) 8042: IOCTL: enter8042: IOCTL: mouse connect8042: IOCTL: enter8042: hook mouse received 8042:! Mou Hook Routine 0xf91ff2fa8042: IOCTL : EXIT (0x0) 8042: Result of sending 0xf3fc3 WAS 0x08042: ioctl: exit (0x0) 8042: i8xpnp (mou), ENTER (min func = 0x18) 8042: i8xpnp (mou) exit (status =
0xC00000BB) [Note] IRP_MJ_PNP IRP_MN_FILTER_RESOURCE_REQUIREMENTSjiurl KeyboardPnP8042: I8xPnP (kb), enter (min func = 0xd) 8042: Received IRP_MN_FILTER_RESOURCE_REQUIREMENTS for kb8042: option = 0x1, flags = 0x118042: Saw port [0x00000000 00000060] - [0x00000000 00000060] 8042: option = 0x1, flags = 0x118042: SAW port [0x00000000 0000000064] - [0x00000000 00000064] 8042: i8XPNP (KB) EXIT (status = 0x0) [Note] PS / 2 mouse debugging information, we don't care 8042: i8xpnp (mou) , enter (min func = 0xd) 8042: Received IRP_MN_FILTER_RESOURCE_REQUIREMENTS for mouse8042: I8xPnP (mou) exit (status = 0x0) [Note] IRP_MJ_PNP IRP_MN_START_DEVICEjiurl KeyboardPnPjiurl KeyboardSendIrpSynchronously8042: I8xPnP (kb), enter (min func = 0x0) 8042: I8xKeyboardStartDevice, enter8042 : port is io.8042: port is io.8042: Keyboard interrupt config --NonSharable, Latched, Irq = 0xb38042: Using default keyboard type8042: Keyboard device specific data --Type = 4, Subtype = 0, Initial LEDs = 0x08042: I8xkeyboardServiceParameters resultS..8042: PollStatusItems = 12 0008042: PowerCapabilities = 0x08042: I8xServiceCrashDump: crashdump path is / REGISTRY / MACHINE / SYSTEM / ControlSet001 / Services / i8042prt / Crashdump8042: I8xServiceCrashDump: RtlQueryRegistryValues failed with 0xc00000348042: I8xServiceCrashDump: Dump1Keys = 08042: I8xServiceCrashDump: Dump2Key = 08042: I8xInitializeDataQueue: enter8042: I8xInitializeDataQueue : keyboard8042: I8xInitializeDataQueue: exit8042: skipping init until mouse8042: I8xKeyboardStartDevice successful8042: I8xKeyboardStartDevice exit (0x0) jiurl KbdSyncComplete8042: I8xPnP (kb) exit (status = 0x0) jiurl KeyboardSendIrpSynchronously8042: I8xPnP (kb), enter (min func =
0x9) jiurl KbdSyncComplete8042: I8xPnP (kb) exit (status = 0x0) [Note] IRP_MJ_PNP IRP_MN_QUERY_CAPABILITIESjiurl KeyboardPnP8042: I8xPnP (kb), enter (min func = 0x9) 8042: I8xPnP (kb) exit (status = 0x0) [Notes] IRP_MJ_PNP IRP_MN_QUERY_PNP_DEVICE_STATEjiurl KeyboardPnPjiurl KeyboardSendIrpSynchronously8042: I8xPnP (kb), enter (min func = 0x14) jiurl KbdSyncComplete8042: I8xPnP (kb) exit (status = 0x0) [Note] IRP_MJ_PNP IRP_MN_QUERY_DEVICE_RELATIONSjiurl KeyboardPnP8042: I8xPnP (kb), enter (min func = 0x7) 8042: I8xPnP (kb) exit (status = 0x0) [Notes] mouse IRP_MJ_PNP IRP_MN_START_DEVICE8042: I8xPnP (mou), enter (min func = 0x0) 8042: I8xMouseStartDevice, enter8042: mouse interrupt config --NonSharable, Latched, Irq = 0x528042: results from services key: mouse queue length = 100number of buttons = 0sample rate = 60resolution = 3synch tick count = 10000000wheel detection = 1detection timeout = 0intiailize polled = 0reset stall time = 10008042: results from devnode key: mouse queue length = 100number of buttons = 0sample Rate = 60resolution = 3synch tick count = 20000000wheel detection = 2initialize polled = 0detection timeout = 15008042: wheel id: MSH00028042: wheel id: MSH00058042: wheel id: MSH00108042: I8xMouseServiceParameters results..8042: EnableWheelDetection = 0x28042: MouseDataQueueSize = 0x9608042: NumberOfButtons = 28042 : SampleRate = 608042: MouseResolution = 38042: MouseResetStallTime = 10008042: WheelDetectionTimeout = 968042: MouseSynchIn100ns = 0x808042: I8xInitializeDataQueue: enter8042: I8xInitializeDataQueue: mouse8042: I8xInitializeDataQueue:! exit [Note] i8042prt I8xMouseStartDevice->
I8xMouseInitializeHardware-> [unfinished] [Connect] I8xInitializeHardwareAtBoot-> I8xSanityCheckResources8042: NonSharable, Ports (# 0) 0x60 - 0x608042: NonSharable, Ports (# 1) 0x64 - 0x64 [Note] i8042prt I8xMouseStartDevice-> I8xMouseInitializeHardware-> [unfinished]! [connect] I8xInitializeHardwareAtBoot-> I8xToggleInterrupts (FALSE) 8042: I8xToggleInterrupts (FALSE), enter8042: I8xTransmitControllerCommand: enter8042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x478042: I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand: current CCB 0x478042: I8xPutControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x60 to command Port8042: i8XputBytepolled: EXI t8042: I8xPutControllerCommand: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x44 to data port8042: I8xPutBytePolled: exit8042: I8xTransmitControllerCommand: new CCB 0x448042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x448042: I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand:! exit [comment] i8042prt I8xMouseStartDevice-> I8xMouseInitializeHardware->
[Unfinished] [connect] I8xInitializeHardwareAtBoot-> I8xInitializeHardware8042: I8xInitializeHardware: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit [Comment] i8042prt I8xMouseStartDevice-> I8xMouseInitializeHardware-> [unfinished] [connect] I8xInitializeHardwareAtBoot! -> i8Xinitializehardware->
I8xInitializeKeyboard8042: I8xInitializeKeyboard, enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xff to data port8042: I8xPutBytePolled: waiting for ACK8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: keyboard8042: I8xGetBytePolled: exit with Byte 0xfa8042: I8xPutBytePolled: got ACK8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: keyboard8042: I8xGetBytePolled: exit with Byte 0xaa8042: I8xTransmitControllerCommand: enter8042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled : exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x448042: I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand: current CCB 0x448042: I8xPutControllerCommand: enter8042: I8xPu tBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x60 to command port8042: I8xPutBytePolled: exit8042: I8xPutControllerCommand: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x4 to data port8042: I8xPutBytePolled: exit8042: I8xTransmitControllerCommand: new CCB 0x48042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x48042:
I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xf3 to data port8042: I8xPutBytePolled: waiting for ACK8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: keyboard8042: I8xGetBytePolled: exit with Byte 0xfa8042: I8xPutBytePolled : got ACK8042: I8xPutBytePolled: exit8042: I8xConvertTypematicParameters: enter8042: I8xConvertTypematicParameters: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x0 to data port8042: I8xPutBytePolled: waiting for ACK8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: keyboard8042: I8xGetBytePolled: exit with Byte 0xfa8042: I8xPutBytePolled: got ACK8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xed to data port8042: I8xPutByte Polled: waiting for ACK8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: keyboard8042: I8xGetBytePolled: exit with Byte 0xfa8042: I8xPutBytePolled: got ACK8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x0 to data port8042: I8xPutBytePolled: waiting for ACK8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: keyboard8042: I8xGetBytePolled: exit with Byte 0xfa8042: I8xPutBytePolled: got ACK8042: I8xPutBytePolled: exit8042: I8xTransmitControllerCommand: enter8042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8XPUTBYTEPOLLED:
sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x48042: I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand: current CCB 0x48042: I8xPutControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x60 to command port8042: I8xPutBytePolled: exit8042: I8xPutControllerCommand: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x44 to data port8042: I8xPutBytePolled: exit8042: I8xTransmitControllerCommand: new CCB 0x448042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x448042: I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand: exit8042: I8xInitializeKeyboard (0x0) [Comment] i8042prt I8xMouseStartDevice-> I8xMouseInitializeHardware-> [unfinished] [connect] I8xInitializeHardwareAtBoot-> I8xInitializeHardware->!
I8xInitializeMouse8042: I8xInitializeMouse enter8042: I8xPutBytePolled: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xd4 to command port8042: I8xPutBytePolled: exit8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xff to data port8042: I8xPutBytePolled : waiting for ACK8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: mouse8042: I8xGetBytePolled: exit with Byte 0xfa8042: I8xPutBytePolled: got ACK8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0xaa8042: I8xGetBytePolled: enter8042: I8xGetBytePolled : 8042 controller8042: I8xGetBytePolled: exit with Byte 0x08042: Initializing via the interrupt8042: I8xInitializeMouse: status = 0x0, FirstInit = 1 [Note] i8042prt I8xMouseStartDevice-> I8xMouseInitializeHardware-> [unfinished] [connect] I8xInitializeHardwareAtBoot-> I8xInitializeHardware8! 042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xae to command port8042: I8xPutBytePolled: exit8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xa8 to command port8042: I8xPutBytePolled: exit8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit [Note] I8xInitializeHardware this end 8042:! I8xInitializeHardware (k 0x0, m 0x0) [Note] i8042prt I8xMouseStartDevice-> I8xMouseInitializeHardware-> [unfinished] [connected] I8XInitializehardwareATBOOT->
I8xToggleInterrupts (TRUE) 8042: I8xToggleInterrupts (TRUE), enter8042: I8xTransmitControllerCommand: enter8042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xad to command port8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer : enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xa7 to command port8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x748042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xae to command port8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuff er: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xa8 to command port8042: I8xPutBytePolled: exit8042: I8xGetControllerCommand: exit8042: I8xTransmitControllerCommand: current CCB 0x448042: I8xPutControllerCommand: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x60 to command port8042: I8xPutBytePolled: exit8042: I8xPutControllerCommand: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x47 to data port8042: I8xPutBytePolled: exit8042: I8xTransmitControllerCommand: new CCB 0x478042: I8xGetControllerCommand: enter8042: I8xPutBytePolled: enter8042:
I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xad to command port8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xa7 to command port8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0x20 to command port8042: I8xPutBytePolled: exit8042: I8xGetBytePolled: enter8042: I8xGetBytePolled: 8042 controller8042: I8xGetBytePolled: exit with Byte 0x778042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xae to command port8042: I8xPutBytePolled: exit8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xa8 to command port8042: I8xPutBytePolled: exit8042: I8xGetControllerCommand: exit8042: I8xTransmitCo ntrollerCommand: exit [Note] i8042prt I8xMouseStartDevice-> i8042prt I8xMouseInitializeHardware8042:!! I8xKeyboardConnectInterrupt: FDO = 0xfe4f5020Vector = 0xb3Irql = 0xaSynchIrql = 0xaIntterupt Mode = LatchedShared int: falseAffinity = 0x1Floating Save = nojiurl KeyboardClassPassThrough8042: IOCTL: enter8042: IOCTL: exit (0x0) 8042 : result of sending 0xb3fcf was 0x0 [comment] debugging information ps / 2 mouse, we do not care 8042: I8xMouseConnectInterruptAndEnable: FDO = 0xfe4d3ba0Vector = 0x52Irql = 0x4SynchIrql = 0xaIntterupt Mode = LatchedShared int: falseAffinity = 0x1Floating Save = no8042: IOCTL: enter8042: IOCTL: EXIT (0x0) 8042: Result of sending 0xf3fcf WAS 0x08042: reset count =
2558042: I8042StartIo: enter8042: I8xControllerRoutine: internal reset mouse8042: I8xPutBytePolled: enter8042: I8xPutBytePolled: enter8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xd4 to command port8042: I8xPutBytePolled: exit8042: I8xDrainOutputBuffer: enter8042: I8xDrainOutputBuffer: exit8042: I8xPutBytePolled: sending 0xff to data porti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (0) i8042 isr (mou ): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xaai8042 isr (mou): byte 0xaai8042 isr (mou): state (5) substate (0) i8042 isr (mou): EXITI8042 ISR (MOU): ENTER8042: I8xGetByteasynchronous: ENTER8042: I8XGetByteasynchronous: mouse8042: i8xgetbyteasynchronous: exit with byte 0x0i8042 ISR ( mou): byte 0x0i8042 isr (mou): received id 08042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf2 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (2) i8042 isr (mou): expecting ID ACK (0xfa), got 0xfai8042 ISR (MOU): EXITI8042 ISR (MOU): Enter8042: i8xgetbyteasynchronous: Enter8042: i8xgetByteasynchronous: mouse8042: i8xgetbyteness, @Teteness: Exit with Byte 0x0i8042 ISR (mou):
byte 0x0i8042 isr (mou): state (5) substate (3) i8042 isr (mou): id from get device id is 08042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous : sending 0xe8 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (6) i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x0 to data port8042 : I8XputByteasynchronous: EXITI8042 ISR (MOU): EXITI8042 ISR (MOU): ENTER8042: I8xGetByteasynchronous: ENTER8042: I8xgetByteasynchronous: mouse8042: i8xgetbytea synchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (7) i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xe6 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 ISR (mou): Byte 0xfai8042 ISR (MOU): State (5) Substate (8) i8042 ISR (MOU): Expecting ID ACK (0xfa), Got 0xfa8042: i8XputByteasynchronous: Enter8042: i8XputByteasynchronous:
sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xe6 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (9) i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xe6 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou) : byte 0xfai8042 isr (mou): State (5) Substate (10) i8042 isr (mou): Expecting ID ACK (0xfa), got 0xfa8042: i 8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xe9 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (11) i8042 isr (mou): expecting ID ACK (0xfa), got 0xfai8042 isr (mou): exiti8042 isr (mou): ENTER8042: I8XGetByteasynchronous: entry8042: i8xgetbyteasynchronous: mouse8042: i8xgetbyteasynchronous: exit with byte 0x10i8042 isr (mou): byte 0x10i8042 isr (mou):
state (5) substate (12) i8042 isr (mou): expecting (0x0), got 0x10i8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0x0i8042 isr ( mou): byte 0x0i8042 isr (mou): state (5) substate (13) i8042 isr (mou): expecting (0x0), got 0x0i8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0x64i8042 isr (mou): byte 0x64i8042 isr (mou): state (5) substate (14) i8042 isr (mou): expecting (0x0), got 0x648042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xe8 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (4) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou) : Byte 0xfai8042 ISR (MOU): State (5) Substate (5) i8042 ISR (MOU): Expecting Ack (0xfa), Got 0xfa8042: i8XputByteasynchronous: Enter8042: i8xputByteasynchronous:
sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (16) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous : exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xc8 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou): Byte 0xfai8042 isr (mou): State (5) Substate (17) i8042 ISR (MOU): Expecting Ack (0xfa), Got 0xfai8042 ISR (Mo u): (200) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (16) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042 : I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous:
sending 0x64 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state ( 5) substate (17) i8042 isr (mou): expecting ACK (0xfa), got 0xfai8042 isr (mou): (100) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): State (5) Substate (16) i8042 ISR (MOU): EXPECTING ACK (0xfa), Got 0xfa8042: i8xputByteasynchronous: Enter8042: i8xputByteasynchronous: sending 0xd4 to command port8042: i8xputbyteasynchron ous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x50 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou) : byte 0xfai8042 isr (mou): state (5) substate (17) i8042 isr (mou): expecting ACK (0xfa), got 0xfai8042 isr (mou): (80) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042:
I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (16) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous : enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xc8 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042 : I8xgetbyteasynchronous: exit with byte 0xfai8042 isr (mou): Byte 0xfai8042 ISR (mou): State (5) Substate (17) i8042 ISR (MOU): Expecting Ack (0xfa), Got 0xfai8042 ISR (MOU): (200) 8042 : I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8x PutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (16) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xc8 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou) : EXITI8042 ISR (MOU): ENTER8042: I8XGetByteasynchronous: Enter8042: i8xgetbyteasynchronous: mouse8042: i8xgetbyteasynchronous: exit with byte 0xfai8042 ISR (mou):
byte 0xfai8042 isr (mou): state (5) substate (17) i8042 isr (mou): expecting ACK (0xfa), got 0xfai8042 isr (mou): (200) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042 : I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou ): byte 0xfai8042 isr (mou): state (5) substate (16) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x50 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronou S: mouse8042: i8xgetbyteasynchronous: exit with byte 0xfai8042 isr (mou): Byte 0xfai8042 ISR (mou): State (5) Substate (17) i8042 ISR (MOU): Expecting Ack (0xfa), Got 0xfai8042 ISR (MOU): 80) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf2 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (27) i8042 isr (mou): expecting ACK (0xfa), got 0xfai8042 isr (mou) :
exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0x3i8042 isr (mou): byte 0x3i8042 isr (mou): state (5) substate (28) i8042 isr (mou): got a device ID of 38042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous : enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (29) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x3c to data port8042: I8xPu tByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (30) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xe8 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou) : EXITI8042 ISR (MOU): ENTER8042: I8XGetByteasynchronous: Enter8042: i8xgetbyteasynchronous: mouse8042: i8xgetbyteasynchronous: exit with byte 0xfai8042 ISR (mou):
byte 0xfai8042 isr (mou): state (5) substate (32) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x3 to data port8042: I8xPutByteAsynchronous: exiti8042 isr (mou): exiti8042 isr (mou): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: mouse8042: I8xGetByteAsynchronous: exit with byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (33) i8042 isr (mou): expecting ACK (0xfa), got 0xfa8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xd4 to command port8042: I8xPutByteAsynchronous: exit8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf4 to data port8042 : I8XputByteasynchronous: EXITI8042 ISR (MOU): EXITI8042 ISR (mou): Enter8042: i8xgetbyteasynchronous: ENTER8042: I8xGetByteasynchronous: mouse8042: i8xgetbyt eAsynchronous: exit with Byte 0xfai8042 isr (mou): byte 0xfai8042 isr (mou): state (5) substate (31) i8042 isr (mou): expecting ACK (0xfa), got 0xfai8042 isr (mou): exit8042: I8xPutBytePolled: exit8042 : I8042StartIo: exit8042: synch routine enter8042: I8042CompletionDpc: enter8042: I8042CompletionDpc: mouse reset complete8042: I8042CompletionDpc: exit8042: I8xMouseStartDevice successful8042: I8xMouseStartDevice exit (0x0) 8042: I8xPnP (mou) exit (status = 0x0) 8042: I8xPnP (mou), ENTER (min func = 0x9) 8042: i8xpnp (mou) EXIT (status = 0x0) 8042: i8xpnp (mou), ENTER (min func = 0x9) 8042: i8XPNP (mou) EXIT (status = 0x0) 8042: i8xpnp (mou ), ENTER (min func = 0x14) 8042: i8xpnp (mou) exit (status =
0x0) 8042: I8xPnP (mou), enter (min func = 0x7) 8042: I8xPnP (mou) exit (status = 0x0) [Note] kbdclass KeyboardClassFindMorePortsjiurl KeyboardClassFindMorePortsjiurl KbdDeterminePortsServicedKBDCLASS-KbdDeterminePortsServiced:! RtlQueryRegistryValues failed with 0xc0000034 [Note] ps / 2 Mouse Debugging information, we don't care 8042: Create Enter8042: Enabling mouse (1) 8042: Create (0) 8042: ioctl: ENTER8042: IOCTL: Mouse query attributes8042: ioctl: exit (0x0) 8042: i8xpnp (mou), ENTER min func = 0x7) 8042: I8xPnP (mou) exit (status = 0x0) [Note] IRP_MJ_CREATEjiurl KeyboardClassCreateKBDCLASS-KeyboardClassCreate: enterjiurl KbdEnableDisablePortKBDCLASS-KbdEnableDisablePort: enterjiurl KeyboardSendIrpSynchronously8042: Create enter8042: Enabling Keyboard (1) jiurl KbdSyncComplete8042: Create (0) KBDCLASS- KbdEnableDisablePort: exitKBDCLASS-KeyboardClassOpenClose: exit [Note] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_QUERY_ATTRIBUTESjiurl KeyboardClassDeviceControlKBDCLASS-KeyboardClassDeviceControl: enter8042: IOCTL: enter8042: IOCTL: key board query attributes8042: IOCTL: exit (0x0) KBDCLASS-KeyboardClassDeviceControl: exit [Note] IRP_MJ_PNP IRP_MN_QUERY_DEVICE_RELATIONSjiurl KeyboardPnP8042: I8xPnP (kb), enter (min func = 0x7) 8042: I8xPnP (kb) exit (status =
0x0) [Note] IRP_MJ_READjiurl KeyboardClassReadKBDCLASS-KeyboardClassRead: enterjiurl KeyboardClassStartIoKBDCLASS-KeyboardClassStartIo: enterKBDCLASS-KeyboardClassStartIo: DataIn 0xfe4f5908, DataOut 0xfe4f5908KBDCLASS-KeyboardClassStartIo: entries in queue 0KBDCLASS-KeyboardClassStartIo: exitKBDCLASS-KeyboardClassRead: exit [Note] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_QUERY_INDICATORSjiurl KeyboardClassDeviceControlKBDCLASS-KeyboardClassDeviceControl: enter8042: IOCTL: enter8042: IOCTL: keyboard query indicators8042: IOCTL: exit (0x0) kBDCLASS-KeyboardClassDeviceControl: exit [Note] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_INDICATORSjiurl KeyboardClassDeviceControlKBDCLASS-KeyboardClassDeviceControl: enter8042: IOCTL: enter8042: IOCTL: keyboard set indicators8042: I8042StartIo: enter8042: I8xControllerRoutine: keyboard set indicators8042: I8042StartIo: exit8042: IOCTL: exit (0x103) kBDCLASS-KeyboardClassDeviceControl: exit [Note] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_TYPEMATIC jiurl KeyboardClassDeviceControlKBDCLASS-KeyboardClassDeviceControl: enter8042: IOCTL: enter8042: IOCTL: keyboard set typematic8042: I8042StartIo: enter8042: I8xControllerRoutine: keyboard set typematic8042: I8xConvertTypematicParameters: enter8042: I8xConvertTypematicParameters: exit8042: I8xInitiateIo: enter8042: I8xInitiateIo: sending byte # 0 (0xf3) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exit8042: I8xInitiateIo: exiti8042 isr (kb): enter8042: I8xGetByteAsynchronous: enter8042: I8xGetByteAsynchronous: keyboard8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (kb): scanCode 0xfai8042 isr (kb :: ACK, I8042 ISR (KB): Now Initiate Send of Byte # 18042:
I8xInitiateIo: enter8042: I8xInitiateIo: sending byte # 1 (0x20) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0x20 to data port8042: I8xPutByteAsynchronous: exit8042: I8xInitiateIo: exiti8042 isr (kb): exiti8042 isr (kb): enter8042: I8xGetByteAsynchronous: enter8042 : I8xGetByteAsynchronous: keyboard8042: I8xGetByteAsynchronous: exit with Byte 0xfai8042 isr (kb): scanCode 0xfai8042 isr (kb):: ACK, i8042 isr (kb): all bytes have been senti8042 isr (kb): exit8042: I8042StartIo: exit8042: I8042CompletionDpc: enter8042: I8042CompletionDpc: keyboard set typematic updated8042: I8042CompletionDpc: new rate / delay 0x1e / 1f48042: I8042CompletionDpc: exit8042: IOCTL: exit (0x103) kBDCLASS-KeyboardClassDeviceControl: exit [Note] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_INDICATORSjiurl KeyboardClassDeviceControlKBDCLASS-KeyboardClassDeviceControl: enter8042: IOCTL: enter8042 : Ioctl: Keyboard Set Indicators8042: i8042Startio: Enter8042: i8xControllerRoutine: keyboard set indicators8042: I8042StartIo: exit8042: IOCTL: exit (0x103) KBDCLASS-KeyboardClassDeviceControl: exit [Note] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_TYPEMATICjiurl KeyboardClassDeviceControlKBDCLASS-KeyboardClassDeviceControl: enter8042: IOCTL: enter8042: IOCTL: keyboard set typematic8042: I8042StartIo: enter8042: I8xControllerRoutine: keyboard set typematic8042: I8xConvertTypematicParameters: enter8042: I8xConvertTypematicParameters: exit8042: I8xInitiateIo: enter8042: I8xInitiateIo: sending byte # 0 (0xf3) 8042: I8xPutByteAsynchronous: enter8042: I8xPutByteAsynchronous: sending 0xf3 to data port8042: I8xPutByteAsynchronous: exit8042: I8xInitiateIo: exiti8042 isr (kb): enter8042: I8xGetByteAsynchronous : ENTER8042: I8xGetByteasynchronous: