程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VB實現Win2000用戶限時登錄

用VB實現Win2000用戶限時登錄

編輯:VB綜合教程
剛開始的時候,我把系統改成可管理性較強的Windows2000(文件系統必須采用NTFS格式),建立兩個同屬User組的受限制帳戶Game(用於游戲)和Study(學習帳戶)並為他們設置相應文件、文件夾的安全權限,然後利用系統管理工具中“本地安全策略”(開啟“當登錄時間用完時自動注銷用戶”)結合netuser命令來限制特定游戲帳號(如Game)的登錄時間,不過並不奏效:能控制登錄,但登錄以後卻不能實現自動強制退出。

  既然系統提供的功能不足以完成任務,何不通過編程來實現呢?初步的設想是用VB定制登錄時間控制程序,然後修改注冊表項,讓程序在計算機啟動或用戶登錄時自動加載。需要指出的是,必須限制Game和Study用戶對系統時間的修改,為此還要對SetupBIOS加口令保護,有條件的話最好鎖上主機箱。

  首先,VB程序的設計:新建工程,調整窗口的大小到合適,在窗口中添加一個label控件(設置caption屬性為“你的登錄時間已用完,1分鐘以後注銷,請及時保存數據!”)和二個timer控件(mainTimer和fairyTimer),程序代碼如下:  

  OptionExplicit  

  ConstEWX_LogoFF=0

  ConstEWX_SHUTDOWN=1

  ConstEWX_REBOOT=2

  ConstEWX_FORCE=4

  PrivateDeclareFunctionGetUserNameLib"advapi32.dll"Alias"GetUserNameA"(ByVallpBufferAsString,nSizeAsLong)AsLong

  PrivateDeclareFunctionExitWindowsExLib"user32"(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong  

  PrivateSubfairyTimer_Timer()

  Dimmyweekday,mydate

  Dimmytime,hh$,mm$,ss$

  mydate=Date

  myweekday=Weekday(mydate)

  mytime=Time

  hh$=Left$(mytime,2)

  mm$=Mid$(mytime,4,2)

  Ifmyweekday>1Andmyweekday<7Then

  '周一至周五登錄規則

  Ifhh>18Andhh<19Then

  ExitSub

  Else

  EndIf

  Else

  '雙休日登錄規則

  Ifhh>13Andhh<15Then

  ExitSub

  ElseIfhh>18Andhh<20Then

  ExitSub

  Else

  EndIf

  EndIf

  mainForm.Visible=True

  mainTimer.Interval=60000'啟動注銷進程

  EndSub  

  PrivateSubForm_Load()

  Dims$,cnt&,dl&

  cnt&=199

  s$=String$(200,0)

  dl&=GetUserName(s$,cnt)

  'Debug.PrintLeft$(s$,cnt-1);cnt

  IfLeft$(s$,cnt-1)="ChenHL"Then

  fairyTimer.Interval=6000'啟動監聽精靈

  Else

  mainTimer.Interval=0

  EndIf

  EndSub  

  PrivateSubForm_Unload(CancelAsInteger)

  Dimret&

  ret&=ExitWindowsEx(EWX_FORCEOrEWX_LogoFF,0)

  EndSub  

  PrivateSubmainTimer_Timer()

  Dimret&

  ret&=ExitWindowsEx(EWX_FORCEOrEWX_LogoFF,0)

  EndSub


  完成工程以後,編譯成doonus.exe可執行文件,並把doonus.exe文件保存到系統的SystemRootsystem32目錄中,設置相應的安全權限,使之除管理員之外的其他用戶為只讀。
  
  接著,修改注冊表:在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun下新建字串值doonus,使其數值數據為SystemRootsystem32doonus.exe,保存後退出。
  
  重啟電腦以後,發現此方法有二個很嚴重的缺陷:一是windows任務管理器的“應用程序”裡能看到正在運行的doonus.exe程序(這是暴露目標,洩底!);二是盡管不能在“應用程序”裡結束任務doonus(因為結束doonus任務意味著自動注銷,這是程序設定的),但可以在“進程”中結束doonus進程(這是致命的漏洞!)。
  
  山窮水復疑無路,柳暗花明又一村。突然想到了windows中的“任務計劃”,為什麼不試試呢?
  
  雙擊“控制面板”的“任務計劃”,在任務計劃窗口中雙擊“添加任務計劃”,在接著打開的窗口中點“下一步”,在接下來的窗口中選擇SystemRootsystem32目錄下的doonus.exe,接著輸入任務名稱(如doonus)並點選“計算機啟動時”或“登錄時”(如圖1),點“下一步”並在接下來的窗口中輸入用戶名“abcadministrator”(我想你不會連這也照抄吧?)、密碼和確認密碼(如圖2),最後點“下一步”完成。  
  
  
  
  
  
  終於完成了,重啟一下,看看效果怎樣?
  
  說明:以上程序在Windows2000、VB6.0下編譯通過。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved