Windbg 在Windows7上使用dbgrpc时出现的问题

Windbg 在Windows7上使用dbgrpc时出现的问题,windbg,Windbg,windbg附带的dbgrpc.exe在Windows 7下似乎无法正常工作。我已按照说明启用了中所述的RPC状态信息 我在proc COM服务器和客户端之外创建了测试,在调试器下运行客户端,调用COM服务器方法(返回之前的步骤)并运行dbgrpc。 我能够枚举RPC端点。但是,当我尝试获取如下线程信息时: dbgrpc-t-P1234 没有打印任何有用的内容-只打印标题,没有任何数据行: PID单元ID ST PNO IFSTART THRDCELL CALLFLAG CALID LASTTI

windbg附带的dbgrpc.exe在Windows 7下似乎无法正常工作。我已按照说明启用了中所述的RPC状态信息

我在proc COM服务器和客户端之外创建了测试,在调试器下运行客户端,调用COM服务器方法(返回之前的步骤)并运行dbgrpc。 我能够枚举RPC端点。但是,当我尝试获取如下线程信息时:

dbgrpc-t-P1234

没有打印任何有用的内容-只打印标题,没有任何数据行:

PID单元ID ST PNO IFSTART THRDCELL CALLFLAG CALID LASTTIME CONN/CLN


我听说其他人在Windows7上遇到了同样的问题(在WindowsXP上是OK)。所以,我怀疑这就是Windows7的问题(可能是它的安全性)。WinDbg中存在类似问题-没有运行有用的信息!rpcexts.getcallinfo 0 0 FFFF 1234。有什么建议吗?

忘记Vista和更高版本上的“dbgrpc”,因为它根本不起作用。Vista和更高版本使用ALPC(“高级”)而不是旧的LPC。如果要分析ALPC端口和消息,可以对机器进行内核调试并使用命令“!ALPC”。但不要期望有太多文档,WinDbg帮助中甚至没有提到它

为了避免内核混乱,我在线程的TEB(偏移量0xf80)中使用“ReservedForOle”指针,COM在其中存储进程和线程ID。以下命令可用于访问WinDbg的这些命令:

在COM服务器中:传入的COM呼叫来自何处: 调用方的进程ID: ? dwo(dwo(@$teb+0xf80)+0x108) 调用方的线程ID(如果调用方的线程在MTA中,则为0;如果在NA中,则为-1): ? dwo(dwo(@$teb+0xf80)+0x34)

在COM客户端中:传出的COM呼叫要去哪里: 目标的进程ID: ? dwo(dwo(@$teb+0xf80)+0x100) 目标的线程ID(如果目标服务器是MTA COM服务器,则为0): ? dwo(dwo(@$teb+0xf80)+0x104)

这些值适用于32位进程。对于本机64位进程,偏移量会有所不同(例如,“ReservedForOle”位于TEB中的偏移量0x1758上)