C# 是否有一种编程方式可以连接到用户登录和注销(WindowsSBS2003),以实现简单的日志记录?

C# 是否有一种编程方式可以连接到用户登录和注销(WindowsSBS2003),以实现简单的日志记录?,c#,.net,windows,C#,.net,Windows,我正在尝试编写一个中央报告工具,该工具将允许基于登录到域的Windows用户进行时间跟踪。最初,我打算创建一个小的可执行文件,在每台计算机上的“所有用户”启动时运行,跟踪登录的用户名并更新一个中央数据库 这样做的主要问题是必须逐个机器管理版本,并处理罕见但可能出现的工具在特定机器上出现故障且不明显的情况 相反,我更愿意创建一个集中的版本,但我发现MSDN和WindowsSBS2003文档很难找到答案 基本上,我想挂接到服务器上的“登录”和“注销”功能,并从那里跟踪所有信息。这里有自然延伸点吗 显

我正在尝试编写一个中央报告工具,该工具将允许基于登录到域的Windows用户进行时间跟踪。最初,我打算创建一个小的可执行文件,在每台计算机上的“所有用户”启动时运行,跟踪登录的用户名并更新一个中央数据库

这样做的主要问题是必须逐个机器管理版本,并处理罕见但可能出现的工具在特定机器上出现故障且不明显的情况

相反,我更愿意创建一个集中的版本,但我发现MSDN和WindowsSBS2003文档很难找到答案

基本上,我想挂接到服务器上的“登录”和“注销”功能,并从那里跟踪所有信息。这里有自然延伸点吗

显然,另一种方法可能是解析事件日志以获取信息(但到目前为止,我找不到任何显示“谁”正在登录或注销的windows日志)

如果您能提供指导或参考文档,我们将不胜感激

这里有自然延伸点吗

不需要。或者更确切地说,除非您想替换登录模块(例如,用于不同的身份验证机制),否则您不会插入登录/注销:这不是一件小事,太容易打开安全漏洞(我认为在.NET中这不是一个好主意,如果不是不可能的话)

但由于Windows(所有NT派生版本)具有记录所有登录和注销的功能,因此您需要的信息可以记录在安全事件日志中。然后有许多选项可以获取信息

第一:启用对登录/注销的审核。 这最好使用组策略来完成。对于本地计算机,启用
SecPol.msc
(本地安全策略MMC管理单元):本地策略|审核策略中的选项

第二:阅读事件日志 在安全事件日志中查找
logon
事件(id 4624),其中有一些关于这些事件的文档


自动化(例如,通过定时读取事件日志)或转发事件应该足够容易。

并非所有登录都会转到dc。例如,笔记本电脑在不在域中时可能会使用缓存的凭据来允许访问。

如果同一用户正在访问网络资源,您可能还会看到他们多次登录。我认为最可靠的方法是让每台机器上运行的代码从其中一个登录挂钩调用。

您应该查看名为Microsoft.Win32.SystemEvents的名称空间。这里有很多处理程序,但我相信您需要的是SessionSwitch事件,它将告诉您当前用户是否正在登录/注销该框或锁定屏幕。这是可能的,因为当屏幕被锁定/解锁时,windows会切换到不同的桌面,因此您将能够捕获这些。
然后,要获取用户信息,您可以使用计算机的主体上下文,使用System.DirectoryServices.AccountManagement命名空间中的UserPrincipal。

这里的“for the local machine”是指域控制器吗?我真的很想用一种集中的方法来解决这个问题。目前我无法访问有问题的服务器来测试这一点,否则我会尝试!事件日志包括来自本地计算机的信息。DC将具有登录到其自身的审核消息。在SBS2003上,第一步已经为您完成:登录/注销事件已经在域控制器上审核。