我正在用C#创建一个时间管理软件。如何在前一天没有输入时间记录的情况下确保当他/她登录到Windows时对系统的访问受到限制?
实施例。阻止互联网或阻止电脑
答案 0 :(得分:3)
有多种方法可以导致功能减少,复杂性和功能水平各不相同。
在我看来,最简单的“干净”解决方案是编写一个在本地计算机上运行的服务,并充当HTTP代理。本地浏览器被配置为使用代理,并且在您的要求下,您返回一个静态页面,表示用户应该输入打孔以继续。
用户可以通过重新配置代理设置或使用系统默认以外的浏览器来绕过代理。大多数IT部门都可以通过组策略克服这两个问题。
相关:Open Source Proxy Library for .Net
复杂性:中等风险:中等 Eww因素:低功效:中等
与屏幕保护程序大致相同,您可以创建辅助桌面并在隔离的桌面上显示自己的窗口。收集完所需信息后,切换回默认桌面,并销毁您创建的桌面。
相关:Desktop Switching - CodeProject,Defrag Tools - Desktops
复杂性:中等风险:低 Eww因素:低功效:高
如果我们想要实现的简易性,也许最简单的方法就是将WM_CLOSE
发送到我们不喜欢的任何新流程。您可以使用WindowOpenedEvent
检查新窗口,如果您发现它是一个您不喜欢的过程,请致电Process.CloseMainWindow
。
与此同时,用户可以通过快速阅读或通过打开模态对话框等防止窗口消息来避开。如果您不喜欢的应用程序询问用户是否要关闭,则此方法有点无效。
复杂性:低风险:中等 Eww因素:高功效:低
如果您为位于REG_SZ
的名为Shell
的{{1}}指定了备用值,则可以让您的程序代替HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
运行。然后,您可以检查用户是否顽皮或好看,然后有条件地启动explorer
。
用户仍然可以通过使用任务管理器或其他方式启动explorer
来绕过您的应用程序。
复杂性:低风险:高 Eww因素:中等功效:中等
组策略提供了两种限制在PC上运行的软件的方法:Software Restriction Policies and AppLocker。两者都有其优点,并且在他们想要控制的方面都非常不同。您可以通过检查explorer
文件或使用已建立的API以编程方式为使用HKCU\Software\Policies
密钥创建策略。
组策略仅在刷新发生后有效,通常是在登录时,因此在清除状态后,您必须注销。
相关:How to modify local group policy setting programatically
复杂性:中等风险:高 Eww系数:高功效:高
您可以使用自定义登录用户界面来阻止用户在未提交小时数时立即登录。这看起来有点沉重,但嘿,这是你的特权。 GINA在Vista中被替换为新架构,但有an excellent sample available on MSDN。您将使用非托管代码进行此操作。
如果用户可以通过其他方式(例如生物识别或智能卡)登录,他们可能看不到您的对话框。
复杂性:高风险:低 Eww系数:低功效:高
如果您在域中工作,也可以通过ADSI或LDAP禁用用户的帐户。但是,这样做可能在合理的时间表中是不可逆的,并且在许多安装中由于与其他系统的集成而非常不可取(门禁控制器会浮现在脑海中......没有时间卡=无法访问建筑物)。
此外,由于较大域中的传播延迟,任何更改可能需要数分钟或数小时才会受到影响。
复杂性:低风险:高 Eww系数:高功效:低
答案 1 :(得分:0)
如果您使用的是Active Directory域,则可以锁定其帐户,以防止他们无法登录计算机。