Служба уведомлений Winlogon перед загрузкой ntuser.dat - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь создать службу уведомлений Winlogon, которая получает сообщение о входе в систему, а затем копирует ntuser.dat (реестр) из центрального расположения (как это делает перемещаемый профиль), а при выходе из системы это отменяет (копирует ntuser.dat в centralместо нахождения).Я уже сделал службу, и она получает сообщение SENS, но я думаю, что сообщения SENS принимаются ПОСЛЕ загрузки ntuser.dat;поэтому я получаю «сообщение об использовании файла», пытающееся взаимодействовать с ntuser.dat.Я думаю, что SENS не способ сделать это, но старый способ hklm \ xxx \ x \ x \ winlogon \ notify не работает на Windows Vista и UP.Поэтому я заблудился здесь.

Как мне сделать службу или DLL, чтобы остановить процесс входа в систему, пока я не переместу ntuser.dat в профиль пользователя?

Заранее спасибо.


После долгих исследований (документация очень старая и устаревшая) я понял, почему SENS (служба уведомлений о системных событиях) не работает для этой задачи.

Служба SENS - это один уровеньниже служб уведомлений Winlogon, фактически, сама SENS является службой, зарегистрированной в Winlogon для получения уведомлений, а затем SENS информирует все службы, которые реализуют этот интерфейс COM второго уровня, об изменениях в состояниях сеансов, таких как вход в систему., Выход из системы и т. Д.

Служба профилей пользователей (ProfSvc) также является службой, которая, подобно SENS, получает уведомления от Winlogon и отвечает за выполнение политик и перемещений NTUSER.DAT и другие вопросы, связанные среестр и профиль пользователя.

Исследуя немного больше, я обнаружил, что там яРаздел реестра s, который управляет поведением этих служб:

HKLM \ System \ CurrectControlSet \ Control \ Winlogon \ Notifications \ Configurations

И порядок загрузки или вызова этих служб включен:

HKLM \ System \ CurrectControlSet \ Control \ Winlogon \ Notifications \ Configurations \ Default 

В этом ключе есть несколько REG_SZ свозможные события, такие как: вход в систему, выход из системы, EndShell, Unlock и т. д., а содержимое - строка, разделенная запятыми, с названием службы, которую необходимо загрузить для уведомления.

Я создаю службу и добавляю реестрключи и может заставить winlogon попытаться вызвать мою службу, но процесс входа в систему был остановлен с такой ошибкой:

Идентификатор события: 6001 Описание: подписчик уведомлений winlogon не прошел событие уведомления.

Идентификатор события: 6004 Описание: подписчик уведомлений winlogon не прошел критическое событие уведомления.

Я не знаю, что ответить или какие COM-объекты реализовать для получения события и ответа..

Мой сервис уже выполняется до службы профилей, поэтому, если я могу ответить на Winlogon, мне удалось решить CustomСлужба перемещаемого профиля для Windows.

Кто-нибудь?

1 Ответ

0 голосов
/ 10 июня 2019

Посмотрите на HandlerEx функции служб.

Одним из управляющих событий является SERVICE_CONTROL_SESSIONCHANGE.

Если dwControl имеет значение SERVICE_CONTROL_SESSIONCHANGE, этот параметр может быть одно из значений, указанных в параметре wParam Сообщение WM_WTSSESSION_CHANGE.

его параметр dwEventType будет одним из WTS_SESSION_LOGON и WTS_SESSION_LOGOFF (как описано здесь и здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...