Почему перечислитель моего драйвера PCI "ROOT"? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь написать свой первый драйвер PCI с использованием WDF.

Я в основном взял базовый шаблон проекта c kmdf из Visual Studio, добавил несколько соответствующих соответствующих обратных вызовов PNP и отредактировал файл .inf в включите идентификатор оборудования для подключенного устройства.

Из файла .inf:

[Standard.NT$ARCH$]
%cvbkmd.DeviceDesc%=cvbkmd_Device, PCI\VEN_1172&DEV_424F; hw-id

После установки драйвера через devcon я вижу что-то странное:

После нескольких сбоев в диспетчере устройств я вижу 2 экземпляра устройства в одном классе устройств. один - программный драйвер (находится под ROOT), а другой - надлежащее устройство PCI.

Наблюдая за трассировкой отладки драйвера в TraceView, я вижу, что все обратные вызовы событий устройства вызываются дважды. один раз для каждого счетчика. когда они вызываются с помощью перечислителя PCI, я получаю ожидаемые параметры от устройства PCI. например EVT_WDF_DEVICE_PREPARE_HARDWARE обратный вызов вызывается один раз с пустым списком TranlatedResources и один раз с ресурсами устройства PCI.

Я попытался выполнить windows восстановление и переустановить драйвер, но проблема все еще существует.

Так что может быть причиной установки моего устройства под ROOT?

...