分享
 
 
 

JIURL键盘驱动 3

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

JIURL键盘驱动 3

作者: JIURL

主页: http://jiurl.yeah.net

日期: 2003-12-13

4 编译与调试环境简介

4.1 源码

ps/2键盘驱动的设备栈有3层,最底层设备对象的驱动是 acpi,中间层设备对象的驱动是 i8042prt,最高层设备对象的驱动是 kbdclass。

DDK 所附的源码中有 i8042prt 和 kbdclass 的源码,分别位于 ...\NTDDK\src\input\pnpi8042 ,...\NTDDK\src\input\kbdclass 。

注意,在目前DDK所附的源码中没有 acpi 的源码,不过 acpi 对于键盘驱动几乎没有起什么作用。在DDK中可以找到一个叫acpi的目录,但那个下面并不是acpi.sys的源码,而是acpiec.sys的源码,没有用处。

4.2 关闭文件保护替换系统中的驱动

我们要用我们自己编译的 debug 版本的 i8042prt.sys 和 kbdclass.sys 替换在 ...\WINNT\system32\drivers 下系统原来的这两个sys文件。

不过由于有文件保护,我们替换之后,系统会立刻自动替换会原来的。因此我们关闭了win2k的文件保护。

替换驱动文件还有其他的方法,不过在这里关闭文件保护,直接替换驱动文件,对我们最合适。

4.3 改动源码以产生调试信息

为了得到调试信息,我们修改了少量的源码。修改很多地方可能都可以达到这个目的。这里介绍的只是一种方法。

4.3.1 改动 kbdclass

kbdclass.h 中

#define DEFAULT_DEBUG_LEVEL 0

改为

#define DEFAULT_DEBUG_LEVEL 3 //#define DEFAULT_DEBUG_LEVEL 0

4.3.2 改动 i8042prt

i8042prt.h 中

#define Print(_flags_, _x_) if (Globals.DebugFlags & (_flags_) || !(_flags_)) { DbgPrint (pDriverName); DbgPrint _x_; }

#define IsrPrint(_flags_, _x_) if (Globals.IsrDebugFlags & (_flags_) || !(_flags_)) { DbgPrint (((ULONG)(_flags_)) >= 0x0001000 ? pIsrMou : pIsrKb); DbgPrint _x_; }

改为

#define Print(_flags_, _x_) { DbgPrint (pDriverName); DbgPrint _x_; }

#define IsrPrint(_flags_, _x_) { DbgPrint (((ULONG)(_flags_)) >= 0x0001000 ? pIsrMou : pIsrKb); DbgPrint _x_; }

由于我使用 WinDbg 单机调试,当我要获得按一个键的调试信息时,发现鼠标导致的调试信息不停的出现,使我没有办法在目标系统中按一个键,所以我去掉了一些打印调试信息的语句,来获得在目标系统中按一个键的机会。

注释掉 I8042MouseInterruptService,I8042MouseIsrDpc,I8xWriteDataToMouseQueue,I8xGetByteAsynchronous 中的所有调试打印语句。

4.4 源码级调试

使用 WinDbg 进行源码级调试。单机使用 WinDbg ,可以参考文章《借助VMware实现单机使用WinDbg》,这篇文章可以在我的主页上找到。

5 键盘驱动概述

键盘驱动位于应用层win32k!RawInputThread和硬件i8042之间。win32k!RawInputThread 总是发一个 IRP_MJ_READ 的 IRP 到键盘设备栈的顶端,等待着来自键盘的数据。当i8042有数据要键盘驱动取走的时候,就会触发中断,这个中断的中断服务例程是键盘驱动中的函数,于是键盘驱动就可以从i8042读取数据,经过一系列处理最终完成那个等待的 IRP。

5.1 键盘设备栈

我们首先来看看键盘驱动的设备栈。对于初始化完成之后,处于运行状态,并且插有 ps/2 键盘的系统,我们看看它的键盘设备栈是什么样子。

我们通过 WinObj 之类的工具查看对象管理器命名空间 (Object Manager Namespace),可以看到在 \driver\ 下的名叫 kbdclass 的驱动对象。在处于运行状态下的系统中,打断进入WinDbg,我们使用WinDbg 的 !drvobj 命令,可以得到它的设备对象列表。

kd> !drvobj \driver\kbdclass

Driver object (fe4f6330) is for:

\Driver\Kbdclass

Driver Extension List: (id , addr)

Device Object list:

fe4f5df0

设备对象只有一个,地址为 fe4f5df0,使用WinDbg 的 !devobj 命令,来获得一些这个设备对象的信息。

kd> !devobj fe4f5df0

Device object (fe4f5df0) is for:

KeyboardClass0 \Driver\Kbdclass DriverObject fe4f6330

Current Irp fe43e6c8 RefCount 0 Type 0000000b Flags 00002044

DevExt fe4f5ea8 DevObjExt fe4f5fd8

ExtensionFlags (0000000000)

AttachedTo (Lower) fe4f5020 \Driver\i8042prt

Device queue is busy -- Queue empty.

看到这个设备对象有个名字叫 KeyboardClass0,我们用 WinObj 也可以在 \Device\ 下看到这个设备对象。

使用 WinDbg 的 !devstack 命令,来看看设备对象 fe4f5df0 也就是 \Device\KeyboardClass0 所在的设备栈

kd> !devstack fe4f5df0

!DevObj !DrvObj !DevExt ObjectName

> fe4f5df0 \Driver\Kbdclass fe4f5ea8 KeyboardClass0

fe4f5020 \Driver\i8042prt fe4f50d8

fe4dd730 \Driver\ACPI fe507468 0000000e

!DevNode fe4fed68 :

DeviceInst is "ACPI\PNP0303\4&5289e18&0"

ServiceName is "i8042prt"

我们看到

设备栈最顶层的设备对象是 fe4f5df0,有名字,叫做 KeyboardClass0,属于驱动 Kbdclass。

设备栈中间层的设备对象是 fe4f5020,没有名字,属于驱动 i8042prt。

设备栈最底层的设备对象是 fe4dd730,有名字,0000000e,属于驱动 ACPI。

!DevNode 部分的内容和注册表有关,我们会在后面讨论。

要注意的是,ACPI用于键盘驱动的那个设备对象的名字,和你计算机上安了多少外设有关,在我这里是 0000000e,在你那里很可能不是。

我们看到的 \Driver\Kbdclass,\Driver\i8042prt,\Driver\ACPI 是驱动对象的名字。一个驱动对象就对应着一个驱动程序文件。

我们再看一下 \Driver\i8042prt 的设备对象列表。

kd> !drvobj \driver\i8042prt

Driver object (fe4f69f0) is for:

\Driver\i8042prt

Driver Extension List: (id , addr)

Device Object list:

fe4d3ba0 fe4f5020

可以看到有两个设备对象。使用 !devobj 我们可以知道,一个是用于ps/2键盘驱动的设备对象,一个是用于ps/2鼠标驱动的设备对象。

acpi 更是有多个设备对象。

最早我就是看到 kbdclass 的名字,猜测这就是键盘的驱动程序,进而看到了它的设备栈,看到了 i8042prt,acpi,后来实践也证明了 kbdclass ,i8042prt 就是键盘驱动。

我们这里看到的 ps/2 键盘的设备栈,是没有自己另外安装其他键盘过滤程序的情况。

最顶层的设备对象是 驱动 Kbdclass 的设备对象。

中间层的设备对象是 驱动 i8042prt 的一个设备对象。

最底层的设备对象是 驱动 ACPI 的一个设备对象。

5.2 各层简介

Kbdclass

键盘设备栈的栈顶,应用层发出的所有 IRP,都首先发到这里。对于那个等待键盘数据的 IRP_MJ_READ 的 IRP,完全由这一层处理,不向下传。

i8042prt

对硬件i8042的所有操作都在这一层完成。键盘中断的中断服务例程也是这一层的函数。使用 WinDbg 的 !idt 命令可以看到这一点。

kd> !idt

IDT for processor #0

00: 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)

可以看到中断向量为 b3 的中断服务例程最终为 i8042prt!I8042KeyboardInterruptService,即 i8042prt 中的函数 I8042KeyboardInterruptService 。

驱动的中断和一般的中断有所不同,我们将在后面做讨论。

ACPI

这一层几乎不起什么作用。

5.3 键盘驱动的运作

键盘驱动的主要工作就是,当键盘上有键按下引发中断时,键盘驱动从端口读出按键的扫描码,最终顺利的将它交给在键盘设备栈栈顶等待的那个 IRP_MJ_READ 的 IRP。为了完成这个任务,键盘驱动使用了两个循环使用的缓冲区。

i8042prt 和 kbdclass 各有自己的一个,循环使用的缓冲区。他们的每个单元是一个 KEYBOARD_INPUT_DATA 结构,用来存放一个扫描码及其相关信息。在键盘驱动的注释中,把这个循环使用的缓冲区叫做输入数据队列(input data queue),i8042prt 的那个缓冲区被叫做 port keyboard input data queue,kbdclass 的那个缓冲区被叫做 class input data queue。输入数据队列更形象一些,我们也会使用这种叫法。

i8042prt 的自定义的设备扩展中,保存着一些指针和计数值,用来使用它的那个输入数据队列。

PKEYBOARD_INPUT_DATA 类型的 InputData , DataIn , DataOut , DataEnd。ULONG 类型的 InputCount。

InputData 这个指针,指向输入数据队列的开头。

DataEnd 这个指针,指向输入数据队列的结尾。

DataIn 这个指针,指向要进入队列的新数据,将要被放在队列中的位置。

DataOut 这个指针,指向要出队列的数据,在队列中开始的位置。

InputCount 这个值为输入数据队列中,数据的个数。

kbdclass 的自定义的设备扩展中,保存着一些指针和计数值,用来使用它的那个输入数据队列。

PKEYBOARD_INPUT_DATA 类型的 InputData , DataIn , DataOut , DataEnd。ULONG 类型的 InputCount。

InputData 这个指针,指向输入数据队列的开头。

DataEnd 这个指针,指向输入数据队列的结尾。

DataIn 这个指针,指向要进入队列的新数据,将要被放在队列中的位置。

DataOut 这个指针,指向要出队列的数据,在队列中开始的位置。

InputCount 这个值为输入数据队列中,数据的个数。

对于这两个输入数据队列,

放入一个数据,这个数据应该被放在 DataIn 处,然后DataIn 后移一格,InputCount 加 1。当 DataIn 移到队列的结尾时,将从队列的开头重新开始。

取出一个数据,这个数据应该从 DataOut 处取出,然后 DataOut 后移一格,InputCount 减 1。当 DataOut 移到队列的结尾时,将从队列的开头重新开始。

对于 i8042prt 的输入数据队列。键盘中断服务例程中,从i8042读出的按键信息,放入i8042prt的输入数据队列。上层处理输入的回调函数中,取出i8042prt的输入数据队列中的数据。

对于 kbdclass 的输入数据队列。只有当那个等待的 IRP_MJ_READ IRP 要求读的大小,小于i8042prt的输入队列中放入的数据时,才被使用。也就是说,只有当那个等着读的 IRP 读不完输入数据时,才使用 kbdclass 的输入数据队列。当那个等着读的 IRP 读完要求的数据后,还有剩余时,剩余的数据放入kbdclass的输入数据队列。下一次的应用层发来的 IRP_MJ_READ IRP,当发现kbdclass的输入数据队列中有数据时,直接从kbdclass的输入数据队列中读出数据。

下面我们对键盘驱动处理键盘按键的过程做一个概括介绍

当键盘上一个键被按下时,产生一个 Make Code ,引发键盘中断。

当键盘上一个键被松开时,产生一个 Break Code,引发键盘中断。

键盘中断导致键盘中断服务例程被执行。导致最终 i8042prt 的I8042KeyboardInterruptService 被执行。I8042KeyboardInterruptService 中,从端口读出按键的扫描码,放在一个 KEYBOARD_INPUT_DATA 中。将这个 KEYBOARD_INPUT_DATA 放入 i8042prt 的输入数据队列中,一个中断放入一个数据,DataIn 后移一格,InputCount 加 1。最后会 KeInsertQueueDpc 一个进行更多处理的 DPC(延迟过程调用)。

DPC 中,调用上层处理输入的回调函数(也就是 kbdclass 处理输入数据的函数),取走i8042prt的输入数据队列里的数据。因为设备扩展中保存着上层处理输入数据的回调函数的入口地址,所以他知道该调用谁。上层处理输入的回调函数(也就是 kbdclass 处理输入数据的函数)取走数据之后,i8042prt 的输入数据队列的 DataOut 相应后移,InputCount 相应减少。

kbdclass 处理输入数据的函数中,满足那个应用层发来的等着读数据的 IRP。

当 IRP 要求读的数据的大小,大于等于,i8042prt的输入数据队列中的数据时,IRP 直接从 i8042prt的输入数据队列中,读出所有输入数据,不使用kbdclass的输入数据队列。大多数情况下都是这样。

当 IRP 要求读的数据的大小,小于,i8042prt的输入数据队列中的数据时,IRP 直接从 i8042prt的输入数据队列中,读出它所要求的大小,然后这个 IRP 被完成。i8042prt的输入数据队列中剩余的数据,被放入kbdclass的输入数据队列中。当应用层发来下一个读数据的 IRP 时,那个 IRP 将直接从 kbdclass 的输入数据队列中,读取数据,不需要等待。

键盘驱动各层的设备对象是在初始化过程中创建的。键盘驱动设备栈是在初始化过程中构造的。键盘中断是在初始化过程中连接的。kbdclass 处理输入数据的回调函数的入口地址,是在初始化过程中告诉 i8042prt的,i8042prt把这个入口地址保存起来。i8042prt 和 kbdclass 的输入数据队列是在初始化过程中分配的内存。他们的 InputData , DataIn , DataOut , DataEnd , InputCount 在初始化的时候设置的初值。

详细的键盘驱动对键盘按键的处理,在以后讨论。

6 键盘驱动的初始化

6.1 键盘驱动初始化调试信息

以下是使用 WinDbg 获得的调试版键盘驱动在初始化过程中的调试打印的输出。

符号 [注释] 后的内容,是我加的简单注释。

以 jiurl 开头的语句,是我自己在 kbdclass 中加的调试打印语句。

[注释] i8042prt!DriverEntry

8042: I8xServiceParameters: \Parameters path is \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\i8042prt\Parameters

8042: breaking on SysRq

8042: I8xServiceParameters results..

8042: Debug flags are 0x88888808, Isr Debug flags are 0x0

8042: Interrupts are not shared

8042: StallMicroseconds = 50

8042: ResendIterations = 3

8042: PollingIterations = 12000

8042: PollingTerationsMaximum = 12000

8042: DriverEntry (0x0)

[注释] kbdclass!DriverEntry

jiurl DriverEntry

KBDCLASS-KbdConfiguration: parameters path is \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\kbdclass\Parameters

KBDCLASS-KbdConfiguration: Keyboard class base name = KeyboardClass

KBDCLASS-KbdConfiguration: KeyboardInputDataQueueLength = 0x4b0

KBDCLASS-KbdConfiguration: MaximumPortsServiced = 3

KBDCLASS-KbdConfiguration: Connection Type = 1

jiurl KbdDeterminePortsServiced

KBDCLASS-KbdDeterminePortsServiced: RtlQueryRegistryValues failed with 0xc0000034

KBDCLASS-KeyboardClassInitialize: Will service 0 port devices

KBDCLASS-KeyboardClassInitialize: exit

[注释] i8042prt!I8xAddDevice

8042: enter Add Device

8042: Add Device (0x0)

[注释] kbdclass!KeyboardAddDevice

jiurl KeyboardAddDevice

jiurl KbdCreateClassObject

KBDCLASS-KbdCreateClassObject: enter

KBDCLASS-KbdCreateClassObject: Creating device object named \Device\KeyboardClass0

jiurl KbdInitializeDataQueue

KBDCLASS-KbdInitializeDataQueue: enter

KBDCLASS-KbdInitializeDataQueue: exit

KBDCLASS-KbdCreateClassObject: exit

jiurl KeyboardQueryDeviceKey

jiurl KeyboardQueryDeviceKey

jiurl KeyboardQueryDeviceKey

jiurl KeyboardAddDeviceEx

jiurl KbdSendConnectRequest

KBDCLASS-KbdSendConnectRequest: enter

8042: IOCTL: enter

8042: IOCTL: keyboard connect

jiurl KeyboardClassPassThrough

8042: IOCTL: enter

8042: hook keyboard received!

8042: IOCTL: exit (0x0)

8042: result of sending 0xb3fc3 was 0x0

8042: IOCTL: exit (0x0)

KBDCLASS-KbdSendConnectRequest: exit

KBDCLASS-KeyboardClassInitialize: Stored \Device\KeyboardClass0 in DeviceMap

[注释] IRP_MJ_PNP IRP_MN_QUERY_LEGACY_BUS_INFORMATION

jiurl KeyboardPnP

8042: I8xPnP (kb), enter (min func=0x18)

8042: I8xPnP (kb) exit (status=0xc00000bb)

[注释] ps/2 鼠标的调试信息,我们不关心

8042: enter Add Device

8042: Add Device (0x0)

8042: IOCTL: enter

8042: IOCTL: mouse connect

8042: IOCTL: enter

8042: hook mouse received!

8042: Mou Hook Routine 0xf91ff2fa

8042: IOCTL: exit (0x0)

8042: result of sending 0xf3fc3 was 0x0

8042: IOCTL: exit (0x0)

8042: I8xPnP (mou), enter (min func=0x18)

8042: I8xPnP (mou) exit (status=0xc00000bb)

[注释] IRP_MJ_PNP IRP_MN_FILTER_RESOURCE_REQUIREMENTS

jiurl KeyboardPnP

8042: I8xPnP (kb), enter (min func=0xd)

8042: Received IRP_MN_FILTER_RESOURCE_REQUIREMENTS for kb

8042: option = 0x1, flags = 0x11

8042: Saw port [0x00000000 00000060] - [0x00000000 00000060]

8042: option = 0x1, flags = 0x11

8042: Saw port [0x00000000 00000064] - [0x00000000 00000064]

8042: I8xPnP (kb) exit (status=0x0)

[注释] ps/2 鼠标的调试信息,我们不关心

8042: I8xPnP (mou), enter (min func=0xd)

8042: Received IRP_MN_FILTER_RESOURCE_REQUIREMENTS for mouse

8042: I8xPnP (mou) exit (status=0x0)

[注释] IRP_MJ_PNP IRP_MN_START_DEVICE

jiurl KeyboardPnP

jiurl KeyboardSendIrpSynchronously

8042: I8xPnP (kb), enter (min func=0x0)

8042: I8xKeyboardStartDevice, enter

8042: port is io.

8042: port is io.

8042: Keyboard interrupt config --

NonSharable, Latched, Irq = 0xb3

8042: Using default keyboard type

8042: Keyboard device specific data --

Type = 4, Subtype = 0, Initial LEDs = 0x0

8042: I8xKeyboardServiceParameters results..

8042: PollStatusIterations = 12000

8042: PowerCapabilities = 0x0

8042: I8xServiceCrashDump: crashdump path is \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\i8042prt\Crashdump

8042: I8xServiceCrashDump: RtlQueryRegistryValues failed with 0xc0000034

8042: I8xServiceCrashDump: Dump1Keys = 0

8042: I8xServiceCrashDump: Dump2Key = 0

8042: I8xInitializeDataQueue: enter

8042: I8xInitializeDataQueue: keyboard

8042: I8xInitializeDataQueue: exit

8042: skipping init until mouse

8042: I8xKeyboardStartDevice successful

8042: I8xKeyboardStartDevice exit (0x0)

jiurl KbdSyncComplete

8042: I8xPnP (kb) exit (status=0x0)

jiurl KeyboardSendIrpSynchronously

8042: I8xPnP (kb), enter (min func=0x9)

jiurl KbdSyncComplete

8042: I8xPnP (kb) exit (status=0x0)

[注释] IRP_MJ_PNP IRP_MN_QUERY_CAPABILITIES

jiurl KeyboardPnP

8042: I8xPnP (kb), enter (min func=0x9)

8042: I8xPnP (kb) exit (status=0x0)

[注释] IRP_MJ_PNP IRP_MN_QUERY_PNP_DEVICE_STATE

jiurl KeyboardPnP

jiurl KeyboardSendIrpSynchronously

8042: I8xPnP (kb), enter (min func=0x14)

jiurl KbdSyncComplete

8042: I8xPnP (kb) exit (status=0x0)

[注释] IRP_MJ_PNP IRP_MN_QUERY_DEVICE_RELATIONS

jiurl KeyboardPnP

8042: I8xPnP (kb), enter (min func=0x7)

8042: I8xPnP (kb) exit (status=0x0)

[注释] 鼠标的 IRP_MJ_PNP IRP_MN_START_DEVICE

8042: I8xPnP (mou), enter (min func=0x0)

8042: I8xMouseStartDevice, enter

8042: Mouse interrupt config --

NonSharable, Latched, Irq = 0x52

8042: results from services key:

mouse queue length = 100

number of buttons = 0

sample rate = 60

resolution = 3

synch tick count = 10000000

wheel detection = 1

detection timeout = 0

intiailize polled = 0

reset stall time = 1000

8042: results from devnode key:

mouse queue length = 100

number of buttons = 0

sample rate = 60

resolution = 3

synch tick count = 20000000

wheel detection = 2

initialize polled = 0

detection timeout = 1500

8042: wheel id: MSH0002

8042: wheel id: MSH0005

8042: wheel id: MSH0010

8042: I8xMouseServiceParameters results..

8042: EnableWheelDetection = 0x2

8042: MouseDataQueueSize = 0x960

8042: NumberOfButtons = 2

8042: SampleRate = 60

8042: MouseResolution = 3

8042: MouseResetStallTime = 1000

8042: WheelDetectionTimeout = 96

8042: MouseSynchIn100ns = 0x80

8042: I8xInitializeDataQueue: enter

8042: I8xInitializeDataQueue: mouse

8042: I8xInitializeDataQueue: exit

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xSanityCheckResources

8042: NonSharable, Ports (#0) 0x60 - 0x60

8042: NonSharable, Ports (#1) 0x64 - 0x64

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xToggleInterrupts(FALSE)

8042: I8xToggleInterrupts(FALSE), enter

8042: I8xTransmitControllerCommand: enter

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x47

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: current CCB 0x47

8042: I8xPutControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x60 to command port

8042: I8xPutBytePolled: exit

8042: I8xPutControllerCommand: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x44 to data port

8042: I8xPutBytePolled: exit

8042: I8xTransmitControllerCommand: new CCB 0x44

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x44

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: exit

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xInitializeHardware

8042: I8xInitializeHardware: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xInitializeHardware-> I8xInitializeKeyboard

8042: I8xInitializeKeyboard, enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xff to data port

8042: I8xPutBytePolled: waiting for ACK

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: keyboard

8042: I8xGetBytePolled: exit with Byte 0xfa

8042: I8xPutBytePolled: got ACK

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: keyboard

8042: I8xGetBytePolled: exit with Byte 0xaa

8042: I8xTransmitControllerCommand: enter

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x44

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: current CCB 0x44

8042: I8xPutControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x60 to command port

8042: I8xPutBytePolled: exit

8042: I8xPutControllerCommand: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x4 to data port

8042: I8xPutBytePolled: exit

8042: I8xTransmitControllerCommand: new CCB 0x4

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x4

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xf3 to data port

8042: I8xPutBytePolled: waiting for ACK

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: keyboard

8042: I8xGetBytePolled: exit with Byte 0xfa

8042: I8xPutBytePolled: got ACK

8042: I8xPutBytePolled: exit

8042: I8xConvertTypematicParameters: enter

8042: I8xConvertTypematicParameters: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x0 to data port

8042: I8xPutBytePolled: waiting for ACK

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: keyboard

8042: I8xGetBytePolled: exit with Byte 0xfa

8042: I8xPutBytePolled: got ACK

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xed to data port

8042: I8xPutBytePolled: waiting for ACK

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: keyboard

8042: I8xGetBytePolled: exit with Byte 0xfa

8042: I8xPutBytePolled: got ACK

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x0 to data port

8042: I8xPutBytePolled: waiting for ACK

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: keyboard

8042: I8xGetBytePolled: exit with Byte 0xfa

8042: I8xPutBytePolled: got ACK

8042: I8xPutBytePolled: exit

8042: I8xTransmitControllerCommand: enter

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x4

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: current CCB 0x4

8042: I8xPutControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x60 to command port

8042: I8xPutBytePolled: exit

8042: I8xPutControllerCommand: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x44 to data port

8042: I8xPutBytePolled: exit

8042: I8xTransmitControllerCommand: new CCB 0x44

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x44

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: exit

8042: I8xInitializeKeyboard (0x0)

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xInitializeHardware-> I8xInitializeMouse

8042: I8xInitializeMouse enter

8042: I8xPutBytePolled: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xd4 to command port

8042: I8xPutBytePolled: exit

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xff to data port

8042: I8xPutBytePolled: waiting for ACK

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: mouse

8042: I8xGetBytePolled: exit with Byte 0xfa

8042: I8xPutBytePolled: got ACK

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0xaa

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x0

8042: Initializing via the interrupt

8042: I8xInitializeMouse: status = 0x0, FirstInit = 1

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xInitializeHardware

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xae to command port

8042: I8xPutBytePolled: exit

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xa8 to command port

8042: I8xPutBytePolled: exit

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

[注释] I8xInitializeHardware 到此结束

8042: I8xInitializeHardware (k 0x0, m 0x0)

[注释] i8042prt!I8xMouseStartDevice-> I8xMouseInitializeHardware-> [未完]

[接上] I8xInitializeHardwareAtBoot-> I8xToggleInterrupts(TRUE)

8042: I8xToggleInterrupts(TRUE), enter

8042: I8xTransmitControllerCommand: enter

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xad to command port

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xa7 to command port

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x74

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xae to command port

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xa8 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: current CCB 0x44

8042: I8xPutControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x60 to command port

8042: I8xPutBytePolled: exit

8042: I8xPutControllerCommand: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x47 to data port

8042: I8xPutBytePolled: exit

8042: I8xTransmitControllerCommand: new CCB 0x47

8042: I8xGetControllerCommand: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xad to command port

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xa7 to command port

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0x20 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetBytePolled: enter

8042: I8xGetBytePolled: 8042 controller

8042: I8xGetBytePolled: exit with Byte 0x77

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xae to command port

8042: I8xPutBytePolled: exit

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xa8 to command port

8042: I8xPutBytePolled: exit

8042: I8xGetControllerCommand: exit

8042: I8xTransmitControllerCommand: exit

[注释] i8042prt!I8xMouseStartDevice-> i8042prt!I8xMouseInitializeHardware

8042: I8xKeyboardConnectInterrupt:

FDO = 0xfe4f5020

Vector = 0xb3

Irql = 0xa

SynchIrql = 0xa

Intterupt Mode = Latched

Shared int: false

Affinity = 0x1

Floating Save = no

jiurl KeyboardClassPassThrough

8042: IOCTL: enter

8042: IOCTL: exit (0x0)

8042: result of sending 0xb3fcf was 0x0

[注释] ps/2 鼠标的调试信息,我们不关心

8042: I8xMouseConnectInterruptAndEnable:

FDO = 0xfe4d3ba0

Vector = 0x52

Irql = 0x4

SynchIrql = 0xa

Intterupt Mode = Latched

Shared int: false

Affinity = 0x1

Floating Save = no

8042: IOCTL: enter

8042: IOCTL: exit (0x0)

8042: result of sending 0xf3fcf was 0x0

8042: reset count = 255

8042: I8042StartIo: enter

8042: I8xControllerRoutine: internal reset mouse

8042: I8xPutBytePolled: enter

8042: I8xPutBytePolled: enter

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xd4 to command port

8042: I8xPutBytePolled: exit

8042: I8xDrainOutputBuffer: enter

8042: I8xDrainOutputBuffer: exit

8042: I8xPutBytePolled: sending 0xff to data port

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 0)

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xaa

i8042 isr (mou): byte 0xaa

i8042 isr (mou): state (5) substate ( 0)

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0x0

i8042 isr (mou): byte 0x0

i8042 isr (mou): received id 0

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf2 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 2)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0x0

i8042 isr (mou): byte 0x0

i8042 isr (mou): state (5) substate ( 3)

i8042 isr (mou): id from get device id is 0

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe8 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 6)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x0 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 7)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe6 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 8)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe6 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 9)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe6 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (10)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe9 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (11)

i8042 isr (mou): expecting ID ACK (0xfa), got 0xfa

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0x10

i8042 isr (mou): byte 0x10

i8042 isr (mou): state (5) substate (12)

i8042 isr (mou): expecting (0x0), got 0x10

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0x0

i8042 isr (mou): byte 0x0

i8042 isr (mou): state (5) substate (13)

i8042 isr (mou): expecting (0x0), got 0x0

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0x64

i8042 isr (mou): byte 0x64

i8042 isr (mou): state (5) substate (14)

i8042 isr (mou): expecting (0x0), got 0x64

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe8 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 4)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate ( 5)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (16)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xc8 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (17)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): (200)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (16)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x64 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (17)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): (100)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (16)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x50 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (17)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): (80)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (16)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xc8 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (17)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): (200)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (16)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xc8 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (17)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): (200)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (16)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x50 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (17)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): (80)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf2 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (27)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0x3

i8042 isr (mou): byte 0x3

i8042 isr (mou): state (5) substate (28)

i8042 isr (mou): got a device ID of 3

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (29)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x3c to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (30)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xe8 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (32)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x3 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (33)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xd4 to command port

8042: I8xPutByteAsynchronous: exit

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf4 to data port

8042: I8xPutByteAsynchronous: exit

i8042 isr (mou): exit

i8042 isr (mou): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: mouse

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (mou): byte 0xfa

i8042 isr (mou): state (5) substate (31)

i8042 isr (mou): expecting ACK (0xfa), got 0xfa

i8042 isr (mou): exit

8042: I8xPutBytePolled: exit

8042: I8042StartIo: exit

8042: synch routine enter

8042: I8042CompletionDpc: enter

8042: I8042CompletionDpc: mouse reset complete

8042: I8042CompletionDpc: exit

8042: I8xMouseStartDevice successful

8042: 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)

[注释] kbdclass!KeyboardClassFindMorePorts

jiurl KeyboardClassFindMorePorts

jiurl KbdDeterminePortsServiced

KBDCLASS-KbdDeterminePortsServiced: RtlQueryRegistryValues failed with 0xc0000034

[注释] ps/2 鼠标的调试信息,我们不关心

8042: Create enter

8042: Enabling Mouse (1)

8042: Create (0)

8042: IOCTL: enter

8042: IOCTL: mouse query attributes

8042: IOCTL: exit (0x0)

8042: I8xPnP (mou), enter (min func=0x7)

8042: I8xPnP (mou) exit (status=0x0)

[注释] IRP_MJ_CREATE

jiurl KeyboardClassCreate

KBDCLASS-KeyboardClassCreate: enter

jiurl KbdEnableDisablePort

KBDCLASS-KbdEnableDisablePort: enter

jiurl KeyboardSendIrpSynchronously

8042: Create enter

8042: Enabling Keyboard (1)

jiurl KbdSyncComplete

8042: Create (0)

KBDCLASS-KbdEnableDisablePort: exit

KBDCLASS-KeyboardClassOpenClose: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_QUERY_ATTRIBUTES

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard query attributes

8042: IOCTL: exit (0x0)

KBDCLASS-KeyboardClassDeviceControl: exit

[注释] IRP_MJ_PNP IRP_MN_QUERY_DEVICE_RELATIONS

jiurl KeyboardPnP

8042: I8xPnP (kb), enter (min func=0x7)

8042: I8xPnP (kb) exit (status=0x0)

[注释] IRP_MJ_READ

jiurl KeyboardClassRead

KBDCLASS-KeyboardClassRead: enter

jiurl KeyboardClassStartIo

KBDCLASS-KeyboardClassStartIo: enter

KBDCLASS-KeyboardClassStartIo: DataIn 0xfe4f5908, DataOut 0xfe4f5908

KBDCLASS-KeyboardClassStartIo: entries in queue 0

KBDCLASS-KeyboardClassStartIo: exit

KBDCLASS-KeyboardClassRead: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_QUERY_INDICATORS

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard query indicators

8042: IOCTL: exit (0x0)

KBDCLASS-KeyboardClassDeviceControl: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_INDICATORS

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard set indicators

8042: I8042StartIo: enter

8042: I8xControllerRoutine: keyboard set indicators

8042: I8042StartIo: exit

8042: IOCTL: exit (0x103)

KBDCLASS-KeyboardClassDeviceControl: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_TYPEMATIC

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard set typematic

8042: I8042StartIo: enter

8042: I8xControllerRoutine: keyboard set typematic

8042: I8xConvertTypematicParameters: enter

8042: I8xConvertTypematicParameters: exit

8042: I8xInitiateIo: enter

8042: I8xInitiateIo: sending byte #0 (0xf3)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

8042: I8xInitiateIo: exit

i8042 isr (kb): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: keyboard

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (kb): scanCode 0xfa

i8042 isr (kb): : ACK, i8042 isr (kb): now initiate send of byte #1

8042: I8xInitiateIo: enter

8042: I8xInitiateIo: sending byte #1 (0x20)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x20 to data port

8042: I8xPutByteAsynchronous: exit

8042: I8xInitiateIo: exit

i8042 isr (kb): exit

i8042 isr (kb): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: keyboard

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (kb): scanCode 0xfa

i8042 isr (kb): : ACK, i8042 isr (kb): all bytes have been sent

i8042 isr (kb): exit

8042: I8042StartIo: exit

8042: I8042CompletionDpc: enter

8042: I8042CompletionDpc: keyboard set typematic updated

8042: I8042CompletionDpc: new rate/delay 0x1e/1f4

8042: I8042CompletionDpc: exit

8042: IOCTL: exit (0x103)

KBDCLASS-KeyboardClassDeviceControl: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_INDICATORS

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard set indicators

8042: I8042StartIo: enter

8042: I8xControllerRoutine: keyboard set indicators

8042: I8042StartIo: exit

8042: IOCTL: exit (0x103)

KBDCLASS-KeyboardClassDeviceControl: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_TYPEMATIC

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard set typematic

8042: I8042StartIo: enter

8042: I8xControllerRoutine: keyboard set typematic

8042: I8xConvertTypematicParameters: enter

8042: I8xConvertTypematicParameters: exit

8042: I8xInitiateIo: enter

8042: I8xInitiateIo: sending byte #0 (0xf3)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0xf3 to data port

8042: I8xPutByteAsynchronous: exit

8042: I8xInitiateIo: exit

i8042 isr (kb): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: keyboard

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (kb): scanCode 0xfa

i8042 isr (kb): : ACK, i8042 isr (kb): now initiate send of byte #1

8042: I8xInitiateIo: enter

8042: I8xInitiateIo: sending byte #1 (0x20)

8042: I8xPutByteAsynchronous: enter

8042: I8xPutByteAsynchronous: sending 0x20 to data port

8042: I8xPutByteAsynchronous: exit

8042: I8xInitiateIo: exit

i8042 isr (kb): exit

i8042 isr (kb): enter

8042: I8xGetByteAsynchronous: enter

8042: I8xGetByteAsynchronous: keyboard

8042: I8xGetByteAsynchronous: exit with Byte 0xfa

i8042 isr (kb): scanCode 0xfa

i8042 isr (kb): : ACK, i8042 isr (kb): all bytes have been sent

i8042 isr (kb): exit

8042: I8042StartIo: exit

8042: I8042CompletionDpc: enter

8042: I8042CompletionDpc: keyboard set typematic updated

8042: I8042CompletionDpc: new rate/delay 0x1e/1f4

8042: I8042CompletionDpc: exit

8042: IOCTL: exit (0x103)

KBDCLASS-KeyboardClassDeviceControl: exit

[注释] IRP_MJ_DEVICE_CONTROL IOCTL: IOCTL_KEYBOARD_SET_INDICATORS

jiurl KeyboardClassDeviceControl

KBDCLASS-KeyboardClassDeviceControl: enter

8042: IOCTL: enter

8042: IOCTL: keyboard set indicators

8042: I8042StartIo: enter

8042: I8xControllerRoutine: keyboard set indicators

8042: I8042StartIo: exit

8042: IOCTL: exit (0x103)

KBDCLASS-KeyboardClassDeviceControl: exit

欢迎交流,欢迎交朋友,

欢迎访问

主页 http://jiurl.yeah.net http://jiurl.nease.net 论坛 http://jiurl.cosoft.org.cn/forum

f啊k,不带你们这样的啊,有好事不叫我。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有