Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок загрузки сервисов 
V
    Опции темы
Sheff
Дата 24.11.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



Всем привет!
Столкнулся с вот какой проблемой: есть сервис, запускающийся автоматом при старте системы, зависящий от сервиса winmgmt (т.е от WMI).
Задача - заставить мой сервис запускаться до входа какого-либо юзера в систему. Понятно, что до winlogon'а у меня загрузиться не получится, т.к все сервисы грузятся после его запуска (согласно Русиновичу), но хотелось бы загрузить свой сервис как можно скорее, так чтобы он уже работал, когда юзер зайдёт в свой аккаунт. Сейчас ситуация следующая: если немного подождать на экране выбора пользователя, а потом зайти в систему под каким-либо юзером, то сервис оказывается запущеннным, но если действовать быстро, т.е как только появляется экран выбора юзера сразу же кликнуть по какому-нибудь, то оказывается, что мой сервис ещё не запущен и запускается он через секунд так 10-15. Такого быть не должно, мне нужно чтобы сервис гарантированно уже был запущен, когда юзер попадает на свой десктоп. Как бы это сделать ? Можно конечно поместить мой сервис в какую-нибудь группу сервисов, например в "Boot" или "System", но это не подходит, т.к мой сервис использует WMI, а сервис WMI группы не имеет, поэтому запускается фиг знает когда. Конечно, можно сменить группу WMI, но это уже хак, т.к изменять жизненно важные параметры системы - последнее дело. Изменив порядок загрузки WMI ненароком можно добиться того что другие сервисы, зависящие от WMI, перестанут работать. Существует ли какое-нибудь решение моей задачи ? Какие будут предложения ?


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 24.11.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Загрузка winmgmt зависит от службы RPCSS, т.е. winmgmt будет грузиться после неё. В этом ты можешь убедиться посмотрев в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\winmgmt на ключ DependOnService. Сам RPCSS принадлежит к группе COM Infrastructure, он в ней единственный сервис. Порядок загрузки по группам ты можешь посмотреть вот здесь: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder. Просто проанализируй все эти параметры, поидее тебе должны помочь параметры DependOnService и DependOnGroup. Т.е. создаёшь DependOnService со значением winmgmt и служба будет грузится сразу после winmgmt.  


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Sheff
Дата 24.11.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



W4FhLF, всё это я знаю, я так и делаю, ставлю DependOnService - winmgmt, это не помогает, т.к служба конечно грузится после WMI, но сам WMI грузится довольно-таки поздно, так что до логина юзера сделать загрузку моего сервиса не получается


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 24.11.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Sheff, не понимаю тогда твоей позиции. Твоя задача не позволяет грузится до того, как произойдёт логин и использовать WMI, значит что-то одно надо исключить, это ведь очевидно. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Sheff
Дата 24.11.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



W4FhLF, наоборот, мне нужно сделать так чтобы мой сервис грузился после загрузки WMI, но до входа в десктоп, неужели это невозможно ?


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 24.11.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



"вход в десктоп" - какую службу ты имеешь ввиду?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Sheff
Дата 24.11.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



W4FhLF, я имею ввиду когда юзер "кликает на иконке", т.е логинится. Вот до этого момента я обязан запустить мою службу.


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 24.11.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Хм, тебе служба не поможет. 

За авторизацию пользователя в системе целиком отвечает winlogon, а он грузится ещё до пользовательскиз служб. Он сам запускает SCM (service.exe) после загрузки компонентов, которые учавствуют в входе, этим объясняется:

Цитата(Sheff @  24.11.2007,  00:26 Найти цитируемый пост)
Сейчас ситуация следующая: если немного подождать на экране выбора пользователя, а потом зайти в систему под каким-либо юзером, то сервис оказывается запущеннным, но если действовать быстро, т.е как только появляется экран выбора юзера сразу же кликнуть по какому-нибудь, то оказывается, что мой сервис ещё не запущен и запускается он через секунд так 10-15.


Тебе нужен другой вариант. Могу предложить такой.
Winlogon получает аутентификацонные данные через Graphical Identification and Authentification DLL, по дефолту это либа msgina.dll, но ты можешь установить свою GINA DLL, установив параметр HKLM\Software\Microsoft\WIndows NT\Current Version\ WinLogon\GinaDLL.
Тогда твоя DLL будет иметь возможность управлять авторизацией и входом в винду. 



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Sheff
Дата 24.11.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



W4FhLF, да про подмену джины мне известно, да вообще можно проще сделать: написать сервис ядра. Между прочим, часть этого моего сервиса как раз и есть сервис ядра, просто в проекте уже поздно что-то менять, нужно сделать так чтобы заработало через сервисы, но я подозревал что это невозможно :( W4FhLF, спасибо огромное за помощь smile Тема закрыта


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0854 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.