Здравствуйте 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 и проводил окончательную инициализацию там, когда необходимые протоколы были уже зарегистрированы.
Надеюсь, это поможет. Если что-то неясно, спрашивай.
Удачи!
Володя