说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于定时关机时出现的问题

编辑:说三道四文库 发布时间:2018-06-25 02:56
HTML文档下载 WORD文档下载 PDF文档下载
我在编写定时关机时,有时遇到别的程序优先级很高,会报出错误,比如说窗口handle error ,请高手告诉之。
NT下要先得到权限的,相关的例子很多,找找就能有一大把
FAQ 里的!


==========================================================================
Declare  Function  AdjustTokenPrivileges  Lib  "advapi32.dll"  Alias  "AdjustTokenPrivileges"  (ByVal  TokenHandle  As  Long,  ByVal  DisableAllPrivileges  As  Long,  NewState  As  TOKEN_PRIVILEGES,  ByVal  BufferLength  As  Long,  PreviousState  As  TOKEN_PRIVILEGES,  ReturnLength  As  Long)  As  Long  
 
Declare  Function  OpenProcessToken  Lib  "advapi32.dll"  Alias  "OpenProcessToken"  (ByVal  ProcessHandle  As  Long,  ByVal  DesiredAccess  As  Long,  TokenHandle  As  Long)  As  Long  
 
这是一个例子:  
Option  Explicit    
 
Private  Type  LUID  
UsedPart  As  Long  
IgnoredForNowHigh32BitPart  As  Long  
End  Type    
 
Private  Type  TOKEN_PRIVILEGES  
PrivilegeCount  As  Long  
TheLuid  As  LUID  
Attributes  As  Long  
End  Type    
 
'Beginning  of  Code  
 
Private  Const  EWX_SHUTDOWN  As  Long  =  1  
Private  Const  EWX_FORCE  As  Long  =  4  
Private  Const  EWX_REBOOT  =  2    
   
 
Private  Declare  Function  ExitWindowsEx  Lib  "user32"  (  _  
ByVal  dwOptions  As  Long,  ByVal  dwReserved  As  Long)  As  Long      
 
Private  Declare  Function  GetCurrentProcess  Lib  "kernel32"  ()  As  Long  
 
Private  Declare  Function  OpenProcessToken  Lib  "advapi32"  (  _  
ByVal  ProcessHandle  As  Long,  ByVal  DesiredAccess  As  Long,  _  
TokenHandle  As  Long)  As  Long  
 
Private  Declare  Function  LookupPrivilegeValue  Lib  "advapi32"  _  
Alias  "LookupPrivilegeValueA"  (ByVal  lpSystemName  As  String,  _  
ByVal  lpName  As  String,  lpLuid  As  LUID)  As  Long  
 
Private  Declare  Function  AdjustTokenPrivileges  Lib  "advapi32"  (  _  
ByVal  TokenHandle  As  Long,  ByVal  DisableAllPrivileges  As  Long,  _  
NewState  As  TOKEN_PRIVILEGES,  ByVal  BufferLength  As  Long,  _  
PreviousState  As  TOKEN_PRIVILEGES,  ReturnLength  As  Long)  As  Long  
 
 
Private  Sub  AdjustToken()    
 
Const  TOKEN_ADJUST_PRIVILEGES  =  &H20  
Const  TOKEN_QUERY  =  &H8  
Const  SE_PRIVILEGE_ENABLED  =  &H2  
 
Dim  hdlProcessHandle  As  Long  
Dim  hdlTokenHandle  As  Long  
Dim  tmpLuid  As  LUID  
Dim  tkp  As  TOKEN_PRIVILEGES  
Dim  tkpNewButIgnored  As  TOKEN_PRIVILEGES  
Dim  lBufferNeeded  As  Long    
 
hdlProcessHandle  =  GetCurrentProcess()  
 
OpenProcessToken  hdlProcessHandle,  (TOKEN_ADJUST_PRIVILEGES  Or  _  
TOKEN_QUERY),  hdlTokenHandle    
 
'  Get  the  LUID  for  shutdown  privilege.  
 
LookupPrivilegeValue  "",  "SeShutdownPrivilege",  tmpLuid    
tkp.PrivilegeCount  =  1  '  One  privilege  to  set  
tkp.TheLuid  =  tmpLuid  
tkp.Attributes  =  SE_PRIVILEGE_ENABLED    
'  Enable  the  shutdown  privilege  in  the  access  token  of  this  
'  process.  
AdjustTokenPrivileges  hdlTokenHandle,  False,  tkp,  _  
Len(tkpNewButIgnored),  tkpNewButIgnored,  lBufferNeeded    
End  Sub    
 
Private  Sub  cmdForceShutdown_Click()  
       AdjustToken  
       ExitWindowsEx  (EWX_SHUTDOWN  Or  EWX_FORCE  Or  EWX_REBOOT),  &HFFFF  
End  Sub  
 
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘