получить информацию из пути устройства - PullRequest
0 голосов
/ 21 апреля 2011

Одно из наших унаследованных приложений вызывает утечку ресурсов на 1 конкретном компьютере.Со временем общее использование процессора увеличивается, пока приложение не будет закрыто и перезапущено.

Использование perfmon Я обнаружил прямую корреляцию между числом дескрипторов процесса и использованием процессора.Это число возросло до тысяч, и я использовал handle в SysInternal, чтобы показать, что все дополнительные дескрипторы (по крайней мере, во время процесса, запущенного сегодня днем, когда я запускал handle), имели путь \Device\00000066.

Я хочу узнать, как узнать больше информации о том, к какому именно устройству относится путь устройства, чтобы мы знали, куда идти дальше.У меня есть серьезные подозрения, что устройство представляет собой PIN-код (используется во время дебетовых транзакций), но мне нужны доказательства.

Windows XP sp3.

Разрешение После того, как советовал Сева ТитовЯ опознал, что это было устройство USB, у меня был один главный подозреваемый: денежный ящик.Мы заставили клиента отключить его и использовать его вручную в течение нескольких часов: без постоянного увеличения количества ручек.Я просмотрел код этого проекта, и разработчик не стал закрывать дескрипторы устройства после их получения.Быстрое увеличение количества ручек произошло из-за таймера, который проверял состояние ящика после его открытия, чтобы определить, когда пользователь закрыл его.

1 Ответ

1 голос
/ 21 апреля 2011

Вот как вы можете получить больше информации об объекте каталога ядра:

  1. Установить LiveKd , установить Средства отладки Windows
  2. Запустите LiveKd в каталоге, который содержит kd.exe
  3. Внутри приглашения LiveKd введите:
    !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.

Драйвер \ должен дать вамнамек на то, что это за устройство.

...