簡體   English   中英

加載ntuser.dat之前的Winlogon通知服務

[英]Winlogon Notification Service before ntuser.dat is loaded

我正在嘗試制作一個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的策略和移動以及與注冊表和用戶配置文件有關的其他問題。

經過進一步調查,我發現有一個注冊表項可以控制這些服務的行為:

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的自定義漫游配置文件服務。

有人嗎

看一下服務的HandlerEx功能。

控制事件之一是SERVICE_CONTROL_SESSIONCHANGE

如果dwControl為SERVICE_CONTROL_SESSIONCHANGE,則此參數可以是WM_WTSSESSION_CHANGE消息的wParam參數中指定的值之一。

其參數dwEventType將是WTS_SESSION_LOGONWTS_SESSION_LOGOFF (如此此處所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM