VB6实现枚举进程所拥有的特权

特权嘛,当然就是特殊权限了。至于什么是进程的特殊权限,请参考MSDN。
提升进程权限的方法请参考笔者的《Win32汇编实现提升进程Debug权限的两种方法》一文,可以很容易修改成提供进程其他权限的程序。本文的内容是枚举进程中所有的特殊权限,以数组的方式返回权限值。每个权限值具体代表了什么,从变量的名称可考究一二,不明白的地方还是参考MSDN。
(声明:魏滔序原创,转贴请注明出处。)

代码及示例如下:

' ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'
 VB6实现枚举进程所拥有的特权
'
 Programmed by 魏滔序
'
 WebSite: http://www.chenoe.com
'
 Blog: http://blog.csdn.net/Modest
'
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Option   Explicit

Private   Const  ANYSIZE_ARRAY  As   Long   =   100
Private   Const  TokenPrivileges  =   3
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 LongByVal DesiredAccess As Long, TokenHandle As LongAs Long
Private Declare Function GetTokenInformation Lib "Advapi32" (ByVal TokenHandle As Long, TokenInformationClass As Integer, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As LongAs Long
Private Declare Function RtlMoveMemory Lib "kernel32" (Dest As Any, Source As Any, ByVal lSize As LongAs Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As LongAs Long

Private Function GetProcressPrivileges(ByVal hProcess As LongAs Long()
    
Dim hToken As Long
    
Dim BufferSize As Long
    
Dim InfoBuffer() As Long
    
Dim i As Long, r() As Long, x As Long
    
Dim lResult As Long
    
Dim tpTokens As TOKEN_PRIVILEGES

    
Call OpenProcessToken(hProcess, TOKEN_QUERY, hToken)
    
If hToken Then
        
Call GetTokenInformation(hToken, ByVal TokenPrivileges, 00, BufferSize)
        
If BufferSize Then

            
ReDim InfoBuffer((BufferSize  4- 1As Long
            lResult 
= GetTokenInformation(hToken, ByVal TokenPrivileges, InfoBuffer(0), BufferSize, BufferSize)

            
If lResult = 1 Then

                
Call RtlMoveMemory(tpTokens, InfoBuffer(0), LenB(tpTokens))
                
For i = 0 To tpTokens.PrivilegeCount - 1
                    
If tpTokens.Privileges(i).Attributes <> 0 Then
                        
ReDim Preserve r(x)
                        r(x) 
= tpTokens.Privileges(i).pLuid.lowpart
                        x 
= x + 1
                    
End If
                
Next
            
End If
        
End If
        
Call CloseHandle(hToken)
    
End If
    GetProcressPrivileges 
= r
End Function


'示例代码
Private Sub Form_Load()
    
Dim p() As Long, i As Long
    p 
= GetProcressPrivileges(GetCurrentProcess)
    
For i = 0 To UBound(p)
        Debug.Print p(i)
    
Next
End Sub

权限值的枚举声明如下,仅供参考:

Private   Enum SE_PRIVILEGE
    SE_MIN_WELL_KNOWN_PRIVILEGE 
= 2
    SE_CREATE_TOKEN_PRIVILEGE 
= 2
    SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 
= 3
    SE_LOCK_MEMORY_PRIVILEGE 
= 4
    SE_INCREASE_QUOTA_PRIVILEGE 
= 5
    SE_MACHINE_ACCOUNT_PRIVILEGE 
= 6
    SE_TCB_PRIVILEGE 
= 7
    SE_SECURITY_PRIVILEGE 
= 8
    SE_TAKE_OWNERSHIP_PRIVILEGE 
= 9
    SE_LOAD_DRIVER_PRIVILEGE 
= 10
    SE_SYSTEM_PROFILE_PRIVILEGE 
= 11
    SE_SYSTEMTIME_PRIVILEGE 
= 12
    SE_PROF_SINGLE_PROCESS_PRIVILEGE 
= 13
    SE_INC_BASE_PRIORITY_PRIVILEGE 
= 14
    SE_CREATE_PAGEFILE_PRIVILEGE 
= 15
    SE_CREATE_PERMANENT_PRIVILEGE 
= 16
    SE_BACKUP_PRIVILEGE 
= 17
    SE_RESTORE_PRIVILEGE 
= 18
    SE_SHUTDOWN_PRIVILEGE 
= 19
    SE_DEBUG_PRIVILEGE 
= 20
    SE_AUDIT_PRIVILEGE 
= 21
    SE_SYSTEM_ENVIRONMENT_PRIVILEGE 
= 22
    SE_CHANGE_NOTIFY_PRIVILLEGE 
= 23
    SE_REMOTE_SHUTDOWN_PRIVILEGE 
= 24
    SE_UNDOCK_PRIVILEGE 
= 25
    SE_SYNC_AGENT_PRIVILEGE 
= 26
    SE_ENABLE_DELEGATION_PRIVILEGE 
= 27
    SE_MANAGE_VOLUME_PRIVILEGE 
= 28
    SE_IMPERSONATE_PRIVILEGE 
= 29
    SE_CREATE_GLOBAL_PRIVILEGE 
= 30
    SE_MAX_WELL_KNOWN_PRIVILEGE 
= SE_CREATE_GLOBAL_PRIVILEGE
End Enum

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值