InitializeHandler драйвера минипорта не вызывается при отключенном и включенном интерфейсе

Я пишу драйвер минипорта Ndis 6 802.11 для оборудования на основе USB. Устройство работает исправно - в роже, когда я устанавливаю драйвера, оно работает нормально. Но если я отключу, а затем включу интерфейс с панели управления, InitializeHandler не будет вызываться. Инвалид работает отлично. Когда я включаю интерфейс, запись драйвера также возвращает успех.

Кто-нибудь может мне помочь? Что может быть причиной этого?

С уважением, Сувик.


person Souvik    schedule 09.12.2011    source источник


Ответы (1)


Обычно это означает, что предыдущий DEVICE_OBJECT еще не полностью удален. Его имя все еще используется, поэтому новый DEVICE_OBJECT не может зарегистрировать новое устройство с этим именем.

Предыдущее устройство может застрять, если к нему открыты дескрипторы. Если у вас есть какой-либо код, который открывает дескрипторы устройств, вы должны убедиться, что они закрываются. Также убедитесь, что вы освободили все объекты, выделяемые вашим мини-портом. Например, сопоставьте вызовы NdisAllocateTimerObject с вызовами NdisFreeTimerObject. Убедитесь, что ваш обработчик MiniportHaltEx вызывается и возвращается.

Также, если у вас подключен отладчик ядра, вы можете проверить ситуацию с !ndiskd.miniport. Он сообщит вам, присутствует ли еще предыдущий мини-порт, и если да, то в каком он состоянии.

person Jeffrey Tippet    schedule 10.12.2011
comment
Большое спасибо за ваш ответ. В моем коде используются некоторые таймеры, но они были созданы с помощью WdfTimerCreate. Нужно ли освобождать такой таймер? Я проверял пример кода DDK - они выполняют TimerCreate/start/stop только на WDFTIMER. Более того, могу ли я остановить WDFTIMER, когда он не запущен? Если я запущу WDFTIMER, не останавливая его, возникнут ли проблемы? Моя процедура MpHalt успешно возвращается. Даже я наблюдал вызов DriverEntry и возврат STATUS_SUCCESS при повторном включении интерфейса. - person Souvik; 12.12.2011