Оно вроде бы не мешает нормальной работе - напишу пару заглушек - потом разберусь.
При удалении PDO (IoDeleteDevice) из реестра не удаляется его подключ. Удаляются все значения, удаляется подключ Device Parameters, а сам Instance, а также подключи Control и LogConf остаются. В Device Managere пропадают устройства, но при попытке обновить дерево устройств в Device Managere - они все появляются как не работающие, после чего винда предлагает для всех них найти драйвер.
Такое впечатление, что винда считает, что устройство физически осталось. При этом IoDeleteDevice вызывается из обработчика IRP_MN_REMOVE_DEVICE, который вызывается после того как из QUERY_DEVICE_RELATIONS (BusRelations) сообщается, что этих устройств уже нет.
Правильно ли такое поведение системы, и если нет, то как заставить PDO удалиться вместе со своим Enum подключем в реестре
Пишу первый в жизни WDM-драйвер. И уже задолбался искать откуда ноги у одного глюка.
Короче, когда FDO (bus enumerator) сообщает системе о новом PDO на шине, винда почему-то вызывает AddDevice этого же драйвера с этим PDO. После чего все-таки выдает Add/Remove Hardware и в списке совместимых устройств находит и нормально ставит function driver, который мне нужен.
Если бы я хотя бы примерно знал где искать и куда копать - я бы описал проблему детальнее, а так - разве что прислать все исходники. Просто подскажите, что может вызвать подобное поведение.
HardwareID и DeviceID для FDO: Root\SYSTEM для PDOs: Root\VSBUS
После чтения MSDN-а мне казалось что именно по DeviceID pnp manager ищет драйвер для устройства.
Вот кусок логи (пишу под чистым DDK, но лога из DriverStudio-ного DriverMonitor-а):
---
Видно, что после всех нужных опросов винда пытается засунуть на стек FDO из того же драйвера. Если для понимания (и разъяснения мне неразумному) ситуации требуется еще какая-нибудь инфа - спрашивайте, буду рад любому сотрудничеству.
Убери rawdeviceok из device_capabilities для pdo23.01.03 14:43 Автор: leo <Леонид Юрьев> Статус: Elderman
Оно вроде бы не мешает нормальной работе - напишу пару заглушек - потом разберусь.
При удалении PDO (IoDeleteDevice) из реестра не удаляется его подключ. Удаляются все значения, удаляется подключ Device Parameters, а сам Instance, а также подключи Control и LogConf остаются. В Device Managere пропадают устройства, но при попытке обновить дерево устройств в Device Managere - они все появляются как не работающие, после чего винда предлагает для всех них найти драйвер.
Такое впечатление, что винда считает, что устройство физически осталось. При этом IoDeleteDevice вызывается из обработчика IRP_MN_REMOVE_DEVICE, который вызывается после того как из QUERY_DEVICE_RELATIONS (BusRelations) сообщается, что этих устройств уже нет.
Правильно ли такое поведение системы, и если нет, то как заставить PDO удалиться вместе со своим Enum подключем в реестре
Re: Не помогло :-( Ну да ладно. Еще вопрос23.01.03 18:41 Автор: leo <Леонид Юрьев> Статус: Elderman
> У тебя явно где-то есть ошибки, если код правильный то > система работает верно. Ну это я уже понял :-))). Собрал MsToaster и посмотрел как ведет себя он. Запись остается, но драйвер для него начинает искаться только если появляется PDO с таким же InstanceID. Самое печальное, что моя шина - прямой потомок этого самого тостера :-)))
> Без основательной проверки кода и "вникания" не обойтись. > > Светую поставить Windows XP Checked Build и использовать > Driver Verifier, без этого очень сложно найти место с > которого все начинает ломаться. Ну, выбора у меня все равно нет. Буду искать, если не найду - буду скручивать как-нибуть, абы работало первое время (в крайнем случае поудаляю эти ключи из DestroyPDO) - позже разберусь :-)
> Есть нет Checked Build, я могу дать слить, по http либо в > Москве с CD.
Хорошо бы. Но сколько он весит. А то если большой - мне бы надо кого-нить со спутниковым каналом найти (прова своего попрошу) - чтоб слил.
Но в любом случае спасибо за внимание и поддержку.
ЗЫ: Ептыть, как люди во всем этом разбираются :-)))
Нашел!!! Не хрен соваться в Root enumerator - далеко пойду :-))))24.01.03 02:49 Автор: amirul <Serge> Статус: The Elderman Отредактировано 24.01.03 03:29 Количество правок: 1
Как я написал PDO выдавали device id Root\VSBUS, а для всего, что появлялось в этой ветке PnpManager пытался создавать контроллеры (FILE_DEVICE_CONTROLLER). Почему вызывался AddDevice я так и не понял, но девайсы из манагера не пропадали потому, что они были не мои. Это были контроллеры PnP Manager-а. Но обе проблемы решились когда я вынес свой энумератор в корень enum-а. Ну что ж бум знать.
И еще. Я пытался мыло послать на указанный в инфе адрес. Письмо мне вернули с Permanent fatal errors: 550 ... spam (вот так и стало одним спамером больше)
Если не сложно, напиши мне с какого-нибудь твоего публичного мыла, а то вряд ли я пробьюсь через корпоративный фильтр
Нашел!!! Не хрен соваться в Root enumerator - далеко пойду :-))))24.01.03 15:06 Автор: leo <Леонид Юрьев> Статус: Elderman
> Как я написал PDO выдавали device id Root\VSBUS, а для > всего, что появлялось в этой ветке PnpManager пытался > создавать контроллеры (FILE_DEVICE_CONTROLLER). Почему > вызывался AddDevice я так и не понял, но девайсы из > манагера не пропадали потому, что они были не мои. Это были > контроллеры PnP Manager-а. Но обе проблемы решились когда я > вынес свой энумератор в корень enum-а. Ну что ж бум знать. Ну что'ж, поздравляю !
> И еще. Я пытался мыло послать на указанный в инфе адрес. > Письмо мне вернули с Permanent fatal errors: 550 ... spam > (вот так и стало одним спамером больше) > Если не сложно, напиши мне с какого-нибудь твоего > публичного мыла, а то вряд ли я пробьюсь через > корпоративный фильтр
Пиши на leo_yuriev@hotmail.com или не с free-mail адреса.
Размер Checked Build немного больше "обычного build-a", если надумаешь - пиши дам url iso-образа. Последний DDK кажеться ~160 Mb.
"Checked Build" я немного "доделываю" для себя, заливаю Service Pack и делаю загрузочным.
И еще на всякий случай:
1) Обновления (windows update, hotfix-ы) для Checked Build-а лучше не ставить. Обновленный компоненты будут уже не "Checked Build";
2) Кряки активации XP для Checked Build не подходят. Я борюсь с эти так:
- Ставлю W2K;
- Перевожу системное время на 2-3 года вперед;
- Ставлю XP;
- Загружаюсь в XP, доставляю нужный софт, настраиваю под себя и т.д.;
- Загружаюсь в W2K и делаю полный backup каталога с XP;
- Возвращаю нормальное системное время;
- Использую XP месяц до "expiration";
- Потом гружусь в W2K и восстанавливаю XP из backup-а;
- Еще месяц...