Debugging Tools for Windows |
!lpc扩展显示目标系统中的本地过程调用(local procedure call (LPC))端口和信息。
Windows 2000的语法
!lpc port Port
!lpc scan Port
!lpc thread Thread
!lpc
Windows Server 2003和Windows XP的语法
!lpc port Port
!lpc scan Port
!lpc thread Thread
!lpc PoolSearch
!lpc
Windows 2000 | Kdextx86.dll |
Windows XP Windows Server 2003 |
Kdexts.dll |
该扩展在Windows Vista和之后版本的Windows中不支持。
在Windows Server 2003、Windows XP和Windows 2000中,不带参数使用!lpc会在调试器命令窗口中显示该扩展命令的帮助文本。
如果有某个线程被标记为在等待某条消息返回,可以使用!lpc message命令和这条延迟的消息的ID。命令会显示该消息、包含它的端口、以及所有被延迟的线程。
如果找不到消息,并且没有读取错误(例如"Unable to access zone segment"),则服务器已经接收到了这条消息。
这种情况下,服务器端口一般可以通过!lpc thread命令找到。等待响应的线程连接到服务器通信队列(server communication queue)上。这条命令可以显示所有包含指定线程的端口。知道了端口地址之后,可以使用!lpc port命令。通过使用!lpc thread命令和线程地址,可以获得关于每条线程的更多信息。
下面是扩展命令在Windows XP系统上的输出示例:
这个例子中,显示了所有LPC端口。
Scanning 225 objects
1 Port: 0xe1405650 Connection: 0xe1405650 Communication: 0x00000000 'SeRmCommandPort'
1 Port: 0xe141ef50 Connection: 0xe141ef50 Communication: 0x00000000 'SmApiPort'
1 Port: 0xe13c5740 Connection: 0xe13c5740 Communication: 0x00000000 'ApiPort'
1 Port: 0xe13d9550 Connection: 0xe13d9550 Communication: 0x00000000 'SbApiPort'
3 Port: 0xe13d8830 Connection: 0xe141ef50 Communication: 0xe13d8910 ''
80000004 Port: 0xe13d8910 Connection: 0xe141ef50 Communication: 0xe13d8830 ''
3 Port: 0xe13d8750 Connection: 0xe13d9550 Communication: 0xe13a4030 ''
.....
上面例子中,地址e14ae238处的端口没有消息,即所有消息都已经被接收并且没有新消息到达。
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 107
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
The message queue is empty
The LpcDataInfoChainHead queue is empty
上面例子中,0xe14ae238处的端口有已排队但是还没有被服务器接收的消息。
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 108
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
Messages in queue:
0000 e20d9b80 - Busy Id=0002249c From: 0584.0680 Context=00000021 [e14ae248 . e14ae248]
Length=0098007c Type=00000001 (LPC_REQUEST)
Data: 00000000 0002021e 00000584 00000680 002f0001 00000007
The message queue contains 1 messages
The LpcDataInfoChainHead queue is empty
剩下的这些Windows XP上的示例是关于可以在这条扩展命令中使用的其它选项的。
Searching message 222be in threads ...
Client thread 842a4db0 waiting a reply from 222be
Searching thread 842a4db0 in port rundown queues ...
Server communication port 0xe114a3c0
Handles: 1 References: 1
The LpcDataInfoChainHead queue is empty
Connected port: 0xe1e7b948 Server connection port: 0xe14ae238
Client communication port 0xe1e7b948
Handles: 1 References: 3
The LpcDataInfoChainHead queue is empty
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 107
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
The message queue is empty
The LpcDataInfoChainHead queue is empty
Done.
Searching thread 842a4db0 in port rundown queues ...
Server communication port 0xe114a3c0
Handles: 1 References: 1
The LpcDataInfoChainHead queue is empty
Connected port: 0xe1e7b948 Server connection port: 0xe14ae238
Client communication port 0xe1e7b948
Handles: 1 References: 3
The LpcDataInfoChainHead queue is empty
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 107
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
The message queue is empty
The LpcDataInfoChainHead queue is empty
Scanning 225 objects
3 Port: 0xe13d8830 Connection: 0xe141ef50 Communication: 0xe13d8910 ''
80000004 Port: 0xe13d8910 Connection: 0xe141ef50 Communication: 0xe13d8830 ''
Scanning 3 objects
关于LPC的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon编写的Microsoft Windows Internals。