从设备路径获取信息

时间:2011-04-20 21:10:52

标签: performance winapi vb6 device

我们的一个遗留应用程序是在一台特定计算机上产生资源泄漏。随着时间的推移,整个处理器的使用量会增加,直到应用程序关闭并重新启动。

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

我想学习如何发现有关设备路径所指的设备的更多信息,以便我们知道从何处开始。我怀疑该设备是一个密码键盘(在借记交易期间使用),但需要证明。

Windows XP sp3。

解决 在Seva Titov的建议帮助我确定它是USB设备后,我有一个主要的嫌疑人:现金抽屉。我们让客户端拔掉它并手动使用它几个小时:手柄没有不断增加。我查看了该项目的代码,开发人员在获取设备后忽略了关闭设备的句柄。手柄的快速增加是由于计时器在打开后检查抽屉的状态以确定用户何时关闭它。

1 个答案:

答案 0 :(得分:1)

以下是如何获取有关内核目录对象的更多信息:

  1. 安装LiveKd,安装Windows Debugging Tools
  2. 在包含kd.exe的目录中启动LiveKd
  3. 在LiveKd内部提示输入:
  4.     !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.
    

    \驱动程序应该提示设备是什么。