2011-04-20 114 views
0

我们的一个传统应用程序之一是在1台特定机器上生成资源泄漏。随着时间的推移,整个处理器的使用量会增加,直到应用程序关闭并重新启从设备路径获取信息

使用perfmon我发现进程的句柄计数和处理器使用率之间存在直接关系。这个数字上升到了数千,我使用SysInternal的handle来公开所有额外的句柄(至少在今天下午当我运行handle运行的过程中)具有\Device\00000066的路径。

我想了解如何发现更多有关设备路径所指的设备的更多信息,因此我们知道该从何处进行操作。我强烈怀疑该设备是密码键盘(在借记交易期间使用),但需要证明。

Windows XP sp3。

分辨率 在塞瓦蒂托夫的建议帮助我确定它是USB设备后,我有一个主要嫌疑犯:一个钱箱。我们让客户端拔下并手动使用它几个小时:手柄没有不断增加。我查看了该项目的代码,开发人员在获取它们之后忽略了关闭设备的句柄。手柄的快速增加是由于计时器在打开抽屉后检查其状态,以确定用户何时关闭抽屉。

回答

1

这里是你如何能得到内核目录对象的更多信息:

  1. 安装LiveKd,在包含kd.exe
  2. 内LiveKd提示符下键入这个目录中安装Windows Debugging Tools
  3. 启动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. 

的\司机应该给你一个提示设备是什么。

+0

找到它是一个HID USB设备。这使它缩小了很多。 – 2011-04-21 05:45:17