Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const ANYSIZE_ARRAY = 1
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
上面几个常量和类型不懂什么意思
LookupPrivilegeValue
AdjustTokenPrivileges
OpenProcessToken
上面的三个API,在我的API电子手册里没有解释,MSDN是英文的解释看不懂。
请高手解释
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const ANYSIZE_ARRAY = 1
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
上面几个常量和类型不懂什么意思
LookupPrivilegeValue
AdjustTokenPrivileges
OpenProcessToken
上面的三个API,在我的API电子手册里没有解释,MSDN是英文的解释看不懂。
请高手解释
Public Function EnablePrivilege() As Boolean
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
Dim lp As Long
hdlProcessHandle = GetCurrentProcess()
lp = OpenProcessToken(hdlProcessHandle, TOKEN_ALL_ACCESS, hdlTokenHandle)
lp = LookupPrivilegeValue(vbNullString, "SeDebugPrivilege", tmpLuid)
tkp.PrivilegeCount = 1
tkp.Privileges(0).pLuid = tmpLuid
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
EnablePrivilege = AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
End Function
下面我就简单介绍一下。Const TOKEN_ADJUST_PRIVILEGES = &H20 //调整该进程令牌权限为&H20
Const TOKEN_QUERY = &H8 //用于查询一个进程的令牌
Const SE_PRIVILEGE_ENABLED = &H2 //调整进程令牌是否为特权
Const ANYSIZE_ARRAY = 1 //一个数组的长度
'----------------------------------------------------------------------------------
Private Type LUID //特权名字的等价数值叫做LUID,独有标识
lowpart As Long //低字节部分
highpart As Long //高字节部分
End Type
'----------------------------------------------------------------------------------
Private Type LUID_AND_ATTRIBUTES //令牌的LUID和属性
pLuid As LUID //特权名字的等价数值叫做LUID,独有标识
Attributes As Long //特权属性代码
End Type
'----------------------------------------------------------------------------------Private Type TOKEN_PRIVILEGES //访问进程令牌每个指定的特权和属性
PrivilegeCount As Long // 令牌数量
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES //每个令牌特权描述
End Type
'----------------------------------------------------------------------------------
OpenProcessToken //打开进程令牌环LookupPrivilegeValue //返回独一无二的LUID,用于调整令牌权限AdjustTokenPrivileges //调整进程令牌权限
还有最后一个函数AdjustTokenPrivileges 的行参我还是不懂,你可以帮我解释一下吗?
第一个参数是访问令牌的句柄
第二个参数决定是进行权限修改还是除能( Disable)所有权限
第三个参数指明要修改的权限,是一个指向 TOKEN_PRIVILEGES 结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作
第四个参数是结构PreviousState的长度,如果PreviousState为空,该参数应为 NULL
第五个参数也是一个 指向 TOKEN_PRIVILEGES 结构的指针,存放修改前的访问权限的信息,可空
最后一个参数为实际PreviousState