我们的一个遗留应用程序是在一台特定计算机上产生资源泄漏。随着时间的推移,整个处理器的使用量会增加,直到应用程序关闭并重新启动。
使用perfmon
我发现进程的句柄数与处理器使用率之间存在直接关联。这个计数上升到数千,我使用SysInternal的handle
来揭示所有额外的句柄(至少在我运行handle
的今天下午运行的过程中)的路径为\Device\00000066
我想学习如何发现有关设备路径所指的设备的更多信息,以便我们知道从何处开始。我怀疑该设备是一个密码键盘(在借记交易期间使用),但需要证明。
Windows XP sp3。
解决 在Seva Titov的建议帮助我确定它是USB设备后,我有一个主要的嫌疑人:现金抽屉。我们让客户端拔掉它并手动使用它几个小时:手柄没有不断增加。我查看了该项目的代码,开发人员在获取设备后忽略了关闭设备的句柄。手柄的快速增加是由于计时器在打开后检查抽屉的状态以确定用户何时关闭它。
答案 0 :(得分:1)
以下是如何获取有关内核目录对象的更多信息:
!object \device\00000066
然后使用!devobj命令使用它为对象显示的值(它打印的第一个)。 这是我在我的系统上做的例子 - 我选择了一个名为\ device \ 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.
\驱动程序应该提示设备是什么。