用VB實現Win2000用戶限時登錄
發表于:2007-07-14來源:作者:點擊數:
標簽:
作為信息社會的一分子,不讓孩子接觸電腦是不明智的;讓孩子無限制的“玩”電腦也是錯誤的。這都是極端的作法。筆者認為,比較合理的辦法是允許孩子在限定的時間段里 游戲 (受控制的),但孩子隨時可以打開電腦學習技術文化知識(不受控制的)。下面來看看
作為信息社會的一分子,不讓孩子接觸電腦是不明智的;讓孩子無限制的“玩”電腦也是錯誤的。這都是極端的作法。筆者認為,比較合理的辦法是允許孩子在限定的時間段里
游戲(受控制的),但孩子隨時可以打開電腦學習技術文化
知識(不受控制的)。下面來看看我是如何實現這一設想的:
剛開始的時候,我把系統改成可管理性較強的
Windows 2000(文件系統必須采用NTFS格式),建立兩個同屬User組的受限制帳戶Game(用于游戲)和Study(學習帳戶)并為他們設置相應文件、文件夾的
安全權限,然后利用系統管理工具中“本地安全策略”(開啟“當登錄時間用完時自動注銷用戶”)結合net user命令來限制特定游戲帳號(如Game)的登錄時間,不過并不奏效:能控制登錄,但登錄以后卻不能實現自動強制退出。
既然系統提供的功能不足以完成任務,何不通過編程來實現呢?初步的設想是用VB定制登錄時間控制程序,然后修改注冊表項,讓程序在計算機啟動或用戶登錄時自動加載。需要指出的是,必須限制Game和Study用戶對系統時間的修改,為此還要對Setup BIOS加口令保護,有條件的話最好鎖上主機箱。
首先,VB程序的設計:新建工程,調整窗口的大小到合適,在窗口中添加一個label控件(設置caption屬性為“你的登錄時間已用完,1分鐘以后注銷,請及時保存數據!”)和二個timer控件(mainTimer和fairyTimer),程序代碼如下:
Option Explicit
Const EWX_LOGOFF = 0
Const EWX_SHU
TDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Sub fairyTimer_Timer()
Dim myweekday, mydate
Dim mytime, hh$, mm$, ss$
mydate = Date
myweekday = Weekday(mydate)
mytime = Time
hh$ = Left$(mytime, 2)
mm$ = Mid$(mytime, 4, 2)
If myweekday > 1 And myweekday < 7 Then
注釋:周一至周五登錄規則
If hh > 18 And hh < 19 Then
Exit Sub
Else
End If
Else
注釋:雙休日登錄規則
If hh > 13 And hh < 15 Then
Exit Sub
ElseIf hh > 18 And hh < 20 Then
Exit Sub
Else
End If
End If
mainForm.Visible = True
mainTimer.Interval = 60000 注釋:啟動注銷進程
End Sub
Private Sub Form_Load()
Dim s$, cnt&, dl&
cnt& = 199
s$ = String$(200, 0)
dl& = GetUserName(s$, cnt)
注釋:De
bug.Print Left$(s$, cnt - 1); cnt
If Left$(s$, cnt - 1) = "ChenHL" Then
fairyTimer.Interval = 6000 注釋:啟動監聽精靈
Else
mainTimer.Interval = 0
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim ret&
ret& = ExitWindowsEx(EWX_FORCE Or EWX_LOGOFF, 0)
End Sub
Private Sub mainTimer_Timer()
Dim ret&
ret& = ExitWindowsEx(EWX_FORCE Or EWX_LOGOFF, 0)
End Sub
完成工程以后,編譯成doonus.exe可執行文件,并把doonus.exe文件保存到系統的%SystemRoot%\system32目錄中,設置相應的安全權限,使之除管理員之外的其他用戶為只讀。
接著,修改注冊表:在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下新建字串值doonus,使其數值數據為%SystemRoot%\system32\doonus.exe,保存后退出。
重啟電腦以后,發現此方法有二個很嚴重的
缺陷:一是
windows任務管理器的“應用程序”里能看到正在運行的doonus.exe程序(這是暴露目標,泄底?。?;二是盡管不能在“應用程序”里結束任務doonus(因為結束doonus任務意味著自動注銷,這是程序設定的),但可以在“進程”中結束doonus進程(這是致命的漏洞?。?。
山窮水復疑無路,柳暗花明又一村。突然想到了windows中的“任務計劃”,為什么不試試呢?
雙擊“控制面板”的“任務計劃”,在任務計劃窗口中雙擊“添加任務計劃”,在接著打開的窗口中點“下一步”,在接下來的窗口中選擇%SystemRoot%\system32目錄下的doonus.exe,接著輸入任務名稱(如doonus)并點選“計算機啟動時”或“登錄時”(如圖1),點“下一步”并在接下來的窗口中輸入用戶名“abc\administrator”(我想你不會連這也照抄吧?)、密碼和確認密碼(如圖2),最后點“下一步”完成。
終于完成了,重啟一下,看看效果怎樣?
說明:以上程序在Windows 2000、VB 6.0下編譯通過。
原文轉自:http://www.anti-gravitydesign.com