发布一个使计算机睡觉的模块:modLetPcDormancy
2006-06-14 14:01
253 查看
以前写过C++的,这个是我用VB仿造的,呵呵
Option Explicit
Private Const ANYSIZE_ARRAY = 1
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Type LUID
LowPart As Long
HighPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
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 Declare Function SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long, ByVal fForce As Long) As Long
Public Function LetPcDormancy() As Boolean
On Error GoTo Z
Dim hToken As Long
Dim mLUID As LUID
Dim mPriv As TOKEN_PRIVILEGES
Dim mNewPriv As TOKEN_PRIVILEGES
If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken) = 0 Then
LetPcDormancy = False
Exit Function
End If
If LookupPrivilegeValue("", "SeShutdownPrivilege", mLUID) = 0 Then
LetPcDormancy = False
Exit Function
End If
mPriv.PrivilegeCount = 1
mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
mPriv.Privileges(0).pLuid = mLUID
AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
SetSystemPowerState False, True
LetPcDormancy = True
Exit Function
Z:
End Function
Option Explicit
Private Const ANYSIZE_ARRAY = 1
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Type LUID
LowPart As Long
HighPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
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 Declare Function SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long, ByVal fForce As Long) As Long
Public Function LetPcDormancy() As Boolean
On Error GoTo Z
Dim hToken As Long
Dim mLUID As LUID
Dim mPriv As TOKEN_PRIVILEGES
Dim mNewPriv As TOKEN_PRIVILEGES
If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken) = 0 Then
LetPcDormancy = False
Exit Function
End If
If LookupPrivilegeValue("", "SeShutdownPrivilege", mLUID) = 0 Then
LetPcDormancy = False
Exit Function
End If
mPriv.PrivilegeCount = 1
mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
mPriv.Privileges(0).pLuid = mLUID
AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
SetSystemPowerState False, True
LetPcDormancy = True
Exit Function
Z:
End Function
相关文章推荐
- 发布一个使计算机睡觉的模块:modLetPcDormancy
- python中怎么将一个模块发布和安装
- 发布一个查看PHP opcode的扩展模块及Web服务
- #3 构建发布一个模块
- 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)
- 怎么开发并发布一个可用的 JavaScript 模块 ?
- 发布一个采用boost::asio写的异步网络通信模块
- unity3d发布PC端后的exe程序,怎么保证只能开一个实例,不能多开?
- 发布一个文章读取模块,有前一篇和后一篇文章的功能,存储过程我直接贴上来了,大家自己改吧!
- 发布一个我自己写的NodeJS异步转同步模块
- Windows 8.1 发布了一个称为“Defender”的新模块
- 如何在Node.js中使用npm创建和发布一个模块
- 应会有的要求,做了一个【海纳个人博客系统 HituxBlog v1.5 Ultimate 】的发布模块
- python day05 编写一个给定多项式的简易计算机 re模块及正则匹配应用
- 一个模块一个堆,一个线程一个栈。
- 一个计算机爱好者的不完整回忆(十二)下载软件
- 利用HTTP协议和IE的漏洞在其他计算机上运行一个程序
- 将一个完整的java web 项目中的部分模块做成Webservice服务注意事项
- 二、利用继承修改OPENERP 的一个模块
- 发布一个C++版本的ORM库SmartDB