Re: Отмена UnloadRoutine
От: Геннадий Майко США  
Дата: 08.09.06 06:33
Оценка: 1 (1) +1
Здравствуйте, onyx2,

O>Я хочу чтобы мой драйвер был выгружаемым. Поэтому регистирирую UnloadRoutine.


O>Но в некоторые моменты работы я не могу выгружать драйвер. И, например, именно в этот момент пришел запрос на выгрузку драйвера, т.е. вызывается UnloadRoutine.


O>Как отменить выгрузку драйвера в UnloadRoutine? Или это делается не в UnloadRoutine?

--
Лучше не "играться" с UnloadRoutine, а сообщать системе, что драйвер не может быть остановлен и/или выгружен.

Unload не может быть вызвана без посылки драйверу сообщений IRP_MN_QUERY_STOP_DEVICE и IRP_MN_QUERY_REMOVE_DEVICE. Обрабатывайте их корректно — и Ваш драйвер не будет остановлен или выгружен.

Если это не приемлимо и Вы знаете, что именно сейчас останавливать/выгружать драйвер нельзя, сообщите системе, что состояние Вашего драйвера изменилось, вызвав функцию IoInvalidateDeviceState, и далее, обрабатывая PNP_DEVICE_STATE, установите флаг PNP_DEVICE_NOT_DISABLEABLE.

Еще один способ добиться этого (если условие не выгрузки драйвера доступно в user's mode) — обрабатывать в driver co-installer сообщения DIF_PROPERTYCHANGE (для остановки драйвера) или DIF_REMOVE (для uninstall драйвера). Преимущество этого варианта — можно сообщить пользователю об этой ситуации.

C уважением,
Геннадий Майко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.