services

From
Eugene Muzychenko (2:5000/14)
To
Yury Haron
Date
2002-12-13T00:16:49Z
Area
SU.WINDOWS.NT.PROG
Привет!

12 Dec 02 02:17, you wrote to Arthur Vartanov:

 YH> Потом он может и пpосто выгpyзится - я ж писал емy надо _один pаз_ за
 YH> загpyзкy выполнить полсотни машинных команд. И больше он yже никогда и
 YH> низачем не нyжен - дальше всё и без него пpавильно pаботает :). Но(!)
 YH> Во-пеpвых мне не очень нpавится идея, что бы он автостаpтовал на
 YH> каждой загpyзке

И, тем не менее, это - единственно грамотное и корректное решение. Тебе же нужно выполнить действия в рамках _системы_, а не _пользователя_? В рамках системы это делается сервисом - для user-mode, и драйвером - для kernel-mode. Сделать автостартующий KMD - абсолютно правильно.

Тем более непонятно, чем тебе не нравится то, что драйвер будет загружаться при каждой загрузке системы. Ты же сам говоришь, что один раз за загрузку нужно выполнить последовательность действий в R0 - так для этого именно однократно загружаемый драйвер и нужен. В DDK напрямую сказано - при необходимости что-то однократно сделать в kernel-mode пишите драйвер, который будет возвращать STATUS_UNSUCCESSFUL из Entry.

 YH> теоpетически вполне возможно, что комy-то понадобится, что-то
 YH> тестиpовать без этой пpавки.

Пусть он у тебя стартует в режиме BOOT и выкидывает на экран на пару секунд что-нибудь вроде "Press Ctrl to skip loading". Вполне адекватно, SoftICE именно так и делает. Или пусть стартует в любом режиме, и просто молча проверяет нажатость Ctrl/Alt/Shift.

В конце концов, как бы ты это в 9x сделал? ;) Разумеется, в VxD :) А чтобы он вызывался на загрузке системы - неужто стал бы для него отдельный сервис городить? ;)

 YH> Во-втоpых, что бы он стаpтовал на загpyзке к немy надо "сотвоpить"
 YH> отдельный бинаpник

В смысле - отдельный? В NT, что драйвер, что сервис - один хрен, в CurrentControlSet\Services прописал путь и параметры старта, и больше ничего не надо :)

 YH> а делать очеpедной малопонятный файл pазмеpом
 YH> полкила в поставкy (да ещё и снабжать его inf'ом), имхо, маpазм.

А зачем inf? Он нужен для установки "честного" драйвера, который можно ставить из Hardware Wizard или Device Manager, или для установки столь же честного софта. В твоем случае достаточно дать ему уникальное имя, скопировать в постоянный каталог, и установить один раз прямой прописью в CurrentControlSet\Services.

 YH> И,наконец, в тpетьих, никакого сеpвиса "к немy" y меня и так нет -
 YH> SCManager откpывается что бы сделать StartService пpямо на сам
 YH> дpайвеp (динамически поpождаемый вpеменный файл).

Ты же, по сути, всю идеологию NT хочешь порушить :) Там драйверы/фильтры специально для того и выделены в особую категорию, чтобы загружались вместе с ядром, и ставились только админом. А ты хочешь, чтобы у тебя какой-то левый процесс (возможно - с юзерскими привилегиями) как бы "снаружи" системы залезал внутрь, чтобы попасть в R0 :) Какой смысл?

Всего доброго!
Евгений Музыченко

--- GoldED+/W32 1.1.4.7
 * Origin: Fox Tracks, Novosibirsk, Russia (2:5000/14)