Здравствуйте rihter, Вы писали:
R>Здравствуйте alex_zumlin, Вы писали:
AZ>>Как указать сервису в 2000 запускать драйвер в последнюю очередь?
AZ>>В Windows 2000 драйвер стартует слишком рано (еще не доступны некоторые ветви реестра).
AZ>>Причем он запускается сервисом.
AZ>>Как указать запускающему сервису , чтобы он загружал этод драйвер позже ???
AZ>>('Start' в реестре он подлец игнорирует — StartType = 3; SERVICE_DEMAND_START)
R>ты своим сервисом драйвер стартуешь?
R>если же средствами OS, то там как бы есть списки (в смысле REG_MULTI_SZ) DependOnGroup и DependOnService
Хых, а ты сам-то пробовал, перед тем как советовать?
На самом деле НЕ СУЩЕСТВУЕТ способа, которым можно четко указать порядок загрузки драйверов в win2k. Ключи Group и Tag win2k игнорирует в отличие от NT4, а Start не всегда достаточен для указания порядка загрузки. Вот возможные решения проблемы в win2k, когда один драйвер зависит от другого.
Необходимый драйвер можно загрузить явно с помощью недокументированной фукнции
NTSTATUS ZwLoadDriver (
// "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>"
IN PUNICODE_STRING RegistryPath);
Однако в ряде случаев это абсолютно неприемлимо
Если у тебя не WDM драйвер, можно указать Start = SERVICE_AUTO_START, чтоб SCM загрузил его на финальной стадии инициализации системы, в ряде случаев это решение вполне подходит и драйвер будет загружен "достаточно" поздно.
Способ, предписываемый микрософтом для установления dependencies между WDM драйверами. Устанавливается Notification Callback (с помощью IoRegisterPlugPlayNotification, TdiRegisterPnPHandlers), который будет вызван при регистрации в системе определенного интерфейса. Например, у меня был WDM драйвер, нуждавшийся в TDI. Я установил callback c помощью TdiRegisterPnPHandlers и проводил окончательную инициализацию там, когда необходимые протоколы были уже зарегистрированы.
Надеюсь, это поможет. Если что-то неясно, спрашивай.
Удачи!
Володя
Здравствуйте rihter, Вы писали:
R>Здравствуйте Vovkos, Вы писали:
V>>Хых, а ты сам-то пробовал, перед тем как советовать?
R>Прогнал я, согласен
Да ничего, бывает =) Я-то просто в свое время основательно перепробовал все варианты. Кстати в книженции Windows NT Device Driver Development вообще советуют этими ключами (DependOnGroup, DependOnService) не пользоваться, вот цитатка (хыхы):
We admit it: We've given up trying to figure out all the nuances of how DependOnGroup and DependOnService really work. What's clear is that these values do not appear to us to work either the way they are documented, or the way many people seem to think they work. It's our practice to avoid these two value entries...
V>>На самом деле НЕ СУЩЕСТВУЕТ способа, которым можно четко указать порядок загрузки драйверов в win2k. Ключи Group и Tag win2k игнорирует в отличие от NT4, а Start не всегда достаточен для указания порядка загрузки. Вот возможные решения проблемы в win2k, когда один драйвер зависит от другого.
R>Это из личного опыта или где документировано?
Дело в том, что я долго боролся с этой задачей и перепробовал почти все возможные комбинации ключей, успешно влиявших на порядок загрузки в NT4. Потом мне на NTDEV-e один чел с MS сказал мне, что win2k их игнорирует =) В 2KDDK это кстати документировано (как всегда, я убедился в очередной раз что надо сначала RTFM, а потом спрашивать =)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/install/hh/install/create-inf_7ap3.asp
Кстати забыл указать еще один способ — через ключ UpperFilters. Но это не всегда логично, и я его никогда для этой цели не использовал..
V>>Надеюсь, это поможет. Если что-то неясно, спрашивай.
R>если это и ко мне относится, то я точно еще чегонить спрошу
Да не вопрос =) Кстати по драйверам наверно лучше спрашивать на NTDEV-e, чем здесь, там правда на английском, зато это специализированный и самый продвинутый форум для дрвайверостроителей =)