我想开发一个Windows窗体应用程序来监视我的networking计算机login,注销和login尝试的细节,并根据检测做一些事情。 (例如发送一些pipe理员通知)
我曾经尝试过:
我读了Windows服务,使用任务计划程序的Windows任务计划和事件审计,但我想实事求是地做到这一点。 所以我的问题是如何检测窗口login尝试编程使用C#?
要检测登录尝试,您可以依靠Windows安全事件。 在这里你可以看到一系列安全事件及其含义。 您可能感兴趣的常见事件是:
4624: An account was successfully logged on. 4625: An account failed to log on. 4648: A logon was attempted using explicit credentials. 4675: SIDs were filtered.
使用应用程序/服务检测事件
您可以使用EventLog
类自己检测登录尝试,并处理它的EntryWritten
事件。 下面的代码示例只是将事件记录在一个文件中,以显示您可以通知事件并使用它。 您可以通过电子邮件发送通知或运行应用程序或执行其他操作,而不用写入文件。
要测试代码,您应该以管理员身份运行。 同样在真实的环境中,您应该使它像服务一样,或者配置它在用户登录之前运行。
private void Form1_Load(object sender, EventArgs e) { EventLog loglistner = new EventLog("Security"); loglistner.EntryWritten += loglistner_EntryWritten; loglistner.EnableRaisingEvents = true; } void loglistner_EntryWritten(object sender, EntryWrittenEventArgs e) { //4624: An account was successfully logged on. //4625: An account failed to log on. //4648: A logon was attempted using explicit credentials. //4675: SIDs were filtered. var events = new int[] { 4624, 4625, 4648, 4675 }; if (events.Contains(e.Entry.EventID)) System.IO.File.AppendAllLines(@"d:\log.txt", new string[] { string.Format("{0}:{1}", e.Entry.EventID, e.Entry.Message) }); }
注意:正如您在问题中所说的那样,您可以使用Windows计划任务在发生事件时执行某些操作。
当检测到不成功的登录尝试时,您可以要求Windows为您做一些事情,例如运行一个应用程序(发送电子邮件或其他东西)。 为此,请使用Windows任务计划程序,并说明发生特定事件时运行的任务,并指定合适的事件源和标识。 另请参见完整步骤的示例,请参阅事件日志触发器上的通过电子邮件获取事件日志内容 。