我正在尝试制作一个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的自定义漫游配置文件服务。
有人吗?