我正在尝试创建一个Winlogon通知服务,该服务接收登录消息,然后从中心位置复制ntuser.dat (注册表)(就像漫游配置文件那样),当注销时,将其恢复(将ntuser.dat复制到中心位置)。我已经完成了服务,它接收到了SENS消息,但我认为SENS消息是在加载ntuser.dat之后接收的;因此,我收到了一个试图与ntuser.dat交互的“文件正在使用的消息”。我认为SENS不是这样做的方法,但是旧的hklm\xxx\xxx\winlogon\notify方式并不适用于windows vista和UP。所以我在这里迷路了。
在将ntuser.dat移动到用户配置文件之前,如何执行服务或DLL来停止登录进程?
提前谢谢。
经过大量的研究(文档非常陈旧和过时),我理解了SENS ()为什么不适合这个任务。
SENS服务位于Winlogon通知服务的下面一层,实际上,SENS本身是一个注册到Winlogon以接收通知的服务,然后,SENS通知实现该第二层COM接口的所有服务有关会话状态(如登录、注销等)的变化。
用户配置文件服务(ProfSvc)也是一个服务,与SENS一样,它接收来自Winlogon的通知,并负责执行NTUSER.DAT的策略和移动以及与注册表和用户配置文件相关的其他问题。
进一步研究后,我发现有一个注册表项可以控制这些服务的行为:
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对象来接收事件和回答。
我的服务已经在profile服务之前执行了,所以如果我能够响应Winlogon,我就设法解决了一个针对Windows的自定义漫游配置文件服务。
有人吗?
https://stackoverflow.com/questions/55192229
复制相似问题