加载ntuser.dat之前的Winlogon通知服务

时间:2019-03-16 00:17:13

标签: authentication winapi notifications winlogon

我正在尝试制作一个Winlogon通知服务,该服务接收登录消息,然后从中央位置(例如漫游配置文件)复制ntuser.dat(注册表),注销时将其还原(将ntuser.dat复制到中央)位置)。我已经完成了该服务,并且它接收到SENS消息,但是我认为在加载ntuser.dat之后会收到SENS消息。因此我收到试图与ntuser.dat交互的“正在使用文件消息”。我认为SENS并非实现此目的的方法,但是旧的hklm \ xxx \ x \ x \ winlogon \ notify方法无法在Windows Vista和UP上运行。所以我在这里迷路了。

在将ntuser.dat移至用户配置文件之前,如何执行服务或DLL来停止登录过程?

谢谢。


经过大量研究(文档非常陈旧且过时),我理解了为什么SENS(系统事件通知服务)无法完成此任务。

SENS服务位于Winlogon通知服务之下的一层,实际上,SENS本身是注册到Winlogon以接收通知的服务,然后,SENS通知实现此第二层COM接口的所有服务有关更改的信息处于会话状态,例如登录,注销等。

用户配置文件服务(ProfSvc)也是一种服务,与SENS一样,从Winlogon接收通知,并负责执行NTUSER.DAT的策略和移动以及与注册表和用户配置文件有关的其他问题。 / p>

调查一下,我发现有一个注册表项可以控制这些服务的行为:

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

有关如何加载或调用此服务的顺序如下:

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

在此注册表项下是一些REG_SZ,其中包含可能的事件,例如:登录,注销,EndShell,解锁等,其内容以逗号分隔的字符串以及要通知的要加载的服务名称。

我提供了一项服务并添加了注册表项,并且可以获取winlogon来尝试调用我的服务,但是登录过程已停止,并显示如下错误:

  

事件ID:6001说明:Winlogon通知订阅者    通知事件失败。

     

事件ID:6004说明:Winlogon通知订阅者    未能通过关键通知事件。

我不知道该怎么回答,或者要实现哪些COM对象来接收事件并回答...

我的服务已在配置文件服务之前执行,因此,如果我可以回答Winlogon,就可以解决Windows的自定义漫游配置文件服务。

有人吗?

1 个答案:

答案 0 :(得分:0)

看看服务的HandlerEx功能。

控制事件之一是SERVICE_CONTROL_SESSIONCHANGE

  

如果dwControl为SERVICE_CONTROL_SESSIONCHANGE,则此参数可以为   在wParam参数的wParam参数中指定的值之一   WM_WTSSESSION_CHANGE消息。

其参数dwEventType将是WTS_SESSION_LOGONWTS_SESSION_LOGOFF之一(如herehere所述)