Привет, подскажите пожалуйста как лучше сделать, или что я не так делаю.
фильтр-драйвер пишется на WDF. обращение идет к ControlDevice созданному от FilterDriverDevice.
после того как устройство появляется в системе, служба открывает хэндл через symbolik link name и посылает DeviceIoControl (не Overlapped)
этот Request не обрабатывается и висит, до лучших времен, чтобы когда появится необходимость - как можно быстрее закомплитить DeviceIoControl и дать управление службе....
Постановка проблемы:
Не всегда вызывается ф-я DriverEntry...
В случае, если после посылки DeviceIoControl, не дожидаясь его комплита - извлечь устройство, в драйвере дёрниться функция клин апа, в которой вызовется функция комплита реквеста, удалиться контрольный девайс. в службе на этот комплит будет произведено закрытие хэндла, судя по логам: реквест комплититься с неправильным количеством байт, мы попадаем в ветку else хэндл закрывается - результат 1, но девайс удаляется раньше чем происходит CloseHandle...
примерный вид
result = DeviceIoControl( hDevice,
IOCTL_SOME_CODE,
NULL, 0,
&ptr, sizeof(SomeType),
&bytes, NULL);
if(bytes == sizeof(SomeType))
{
....
}
else
{
result = CloseHandle(hDevice);
}
если вставлять и вытаскивать устройство из порта без запущенной службы - все хорошо. загадка в том - что все хэндлы закрываются..
но как мне кажется не происходит полная выгрузка драйвера, почему- понять не могу..
подскажите пожалуйста