从设备路径获取信息
问题描述:
我们的一个传统应用程序之一是在1台特定机器上生成资源泄漏。随着时间的推移,整个处理器的使用量会增加,直到应用程序关闭并重新启从设备路径获取信息
使用perfmon
我发现进程的句柄计数和处理器使用率之间存在直接关系。这个数字上升到了数千,我使用SysInternal的handle
来公开所有额外的句柄(至少在今天下午当我运行handle
运行的过程中)具有\Device\00000066
的路径。
我想了解如何发现更多有关设备路径所指的设备的更多信息,因此我们知道该从何处进行操作。我强烈怀疑该设备是密码键盘(在借记交易期间使用),但需要证明。
Windows XP sp3。
分辨率 在塞瓦蒂托夫的建议帮助我确定它是USB设备后,我有一个主要嫌疑犯:一个钱箱。我们让客户端拔下并手动使用它几个小时:手柄没有不断增加。我查看了该项目的代码,开发人员在获取它们之后忽略了关闭设备的句柄。手柄的快速增加是由于计时器在打开抽屉后检查其状态,以确定用户何时关闭抽屉。
答
这里是你如何能得到内核目录对象的更多信息:
- 安装LiveKd,在包含kd.exe
- 内LiveKd提示符下键入这个目录中安装Windows Debugging Tools
- 启动LiveKd :
!object \device\00000066
然后使用v即使用!devobj命令显示该对象(首次打印)。 这是我在我的系统上做的例子 - 我拿起了名\设备\ 0000006a随机设备为例(仅仅是用来迷惑你: - >)
0: kd> !object \device\0000006a Object: fffffa8007959630 Type: (fffffa8006bce2d0) Device ObjectHeader: fffffa8007959600 (new version) HandleCount: 0 PointerCount: 6 Directory Object: fffff8a00000b8f0 Name: 0000006a 0: kd> !devobj fffffa8007959630 Device object (fffffa8007959630) is for: 0000006a \Driver\ACPI DriverObject fffffa8006b25d00 Current Irp 00000000 RefCount 1 Type 00000032 Flags 00003040 Dacl fffff9a100092d31 DevExt fffffa800792e7d0 DevObjExt fffffa8007959780 DevNode fffffa800796db10 ExtensionFlags (0x00000800) Unknown flags 0x00000800 AttachedDevice (Upper) fffffa800907d040 \Driver\i8042prt Device queue is not busy.
的\司机应该给你一个提示设备是什么。
找到它是一个HID USB设备。这使它缩小了很多。 – 2011-04-21 05:45:17