【问题标题】:get information from device path从设备路径获取信息
【发布时间】:2011-04-20 21:10:51
【问题描述】:

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

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

我想了解如何发现有关设备路径所指的确切设备的更多信息,以便我们知道从这里到哪里去。我强烈怀疑该设备是密码键盘(在借记交易中使用),但需要证明。

Windows XP sp3。

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

【问题讨论】:

    标签: performance winapi vb6 device


    【解决方案1】:

    您可以通过以下方式获取有关内核目录对象的更多信息:

    1. 安装LiveKd,安装Windows Debugging Tools
    2. 在包含 kd.exe 的目录中启动 LiveKd
    3. 在 LiveKd 提示符中输入:
    !object \device\00000066

    然后使用它为对象显示的值(它打印的第一个值)和 !devobj 命令。 这是我在我的系统上做的例子——我选择了一个名为 \device\0000006a 的随机设备作为例子(只是为了让你感到困惑:->)

    0: kd> !object \device\0000006a 对象:fffffa8007959630 类型:(fffffa8006bce2d0) 设备 ObjectHeader:fffffa8007959600(新版本) 句柄计数:0 指针计数:6 目录对象:fffff8a00000b8f0 名称:0000006a 0: kd>!devobj fffffa8007959630 设备对象 (fffffa8007959630) 用于: 0000006a \Driver\ACPI DriverObject fffffa8006b25d00 当前 Irp 00000000 RefCount 1 类型 00000032 标志 00003040 dacl fffff9a100092d31 DevExt fffffa800792e7d0 DevObjExt fffffa8007959780 DevNode fffffa800796db10 扩展标志 (0x00000800) 未知标志 0x00000800 附加设备(上)fffffa800907d040 \Driver\i8042prt 设备队列不忙。

    \driver 应该给你一个关于设备是什么的提示。

    【讨论】:

    • 发现它是一个 HID USB 设备。这大大缩小了范围。
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多