VB6实现枚举进程所拥有的特权(增强版)
2009-05-21 19:59
363 查看
原帖:http://blog.csdn.net/Modest/archive/2008/03/10/2162170.aspx
本文在原文基础上增加了两个转换函数LookupPrivilegeName和LookupPrivilegeDisplayName,从而可以完美的输出权限的名称和权限的描述。
上述代码输出结果如下(会因权限不同而异):
23 SeChangeNotifyPrivilege 跳过遍历检查
10 SeLoadDriverPrivilege 装载和卸载设备驱动程序
25 SeUndockPrivilege 从插接工作站中取出计算机
29 SeImpersonatePrivilege 身份验证后模拟客户端
30 SeCreateGlobalPrivilege 创建全局对象
本文在原文基础上增加了两个转换函数LookupPrivilegeName和LookupPrivilegeDisplayName,从而可以完美的输出权限的名称和权限的描述。
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ' 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 Type PRIVILEGE lValue As Long sName As String sDisplay As String 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 GetTokenInformation Lib "Advapi32" (ByVal TokenHandle As Long, TokenInformationClass As Integer, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long Private Declare Function RtlMoveMemory Lib "kernel32" (Dest As Any, Source As Any, ByVal lSize As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function LookupPrivilegeName Lib "advapi32.dll" Alias "LookupPrivilegeNameA" (ByVal lpSystemName As String, ByRef lpLuid As LUID, ByVal lpName As String, ByRef cbName As Long) As Long Private Declare Function LookupPrivilegeDisplayName Lib "advapi32.dll" Alias "LookupPrivilegeDisplayNameA" (ByVal lpSystemName As String, ByVal lpName As String, ByVal lpDisplayName As String, ByRef cbDisplayName As Long, ByRef lpLanguageID As Long) As Long Private Function GetProcressPrivileges(ByVal hProcess As Long, Optional ByRef LanguageID As Long = 0) As PRIVILEGE() Dim hToken As Long Dim BufferSize As Long Dim InfoBuffer() As Long Dim i As Long, r() As PRIVILEGE, x As Long Dim lResult As Long Dim tpTokens As TOKEN_PRIVILEGES Dim s As String Call OpenProcessToken(hProcess, TOKEN_QUERY, hToken) If hToken Then Call GetTokenInformation(hToken, ByVal TokenPrivileges, 0, 0, BufferSize) If BufferSize Then ReDim InfoBuffer((BufferSize 4) - 1) As 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 s = String(256, 0) LookupPrivilegeName vbNullString, tpTokens.Privileges(i).pLuid, s, Len(s) ReDim Preserve r(x) r(x).lValue = tpTokens.Privileges(i).pLuid.lowpart r(x).sName = Replace(s, vbNullChar, vbNullString) s = String(256, 0) LookupPrivilegeDisplayName vbNullString, r(x).sName, s, Len(s), LanguageID r(x).sDisplay = Replace(s, vbNullChar, vbNullString) 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 PRIVILEGE, i As Long p = GetProcressPrivileges(GetCurrentProcess) For i = 0 To UBound(p) Debug.Print p(i).lValue, p(i).sName, p(i).sDisplay Next End Sub
上述代码输出结果如下(会因权限不同而异):
23 SeChangeNotifyPrivilege 跳过遍历检查
10 SeLoadDriverPrivilege 装载和卸载设备驱动程序
25 SeUndockPrivilege 从插接工作站中取出计算机
29 SeImpersonatePrivilege 身份验证后模拟客户端
30 SeCreateGlobalPrivilege 创建全局对象
相关文章推荐
- VB6实现枚举进程所拥有的特权(增强版)
- VB6实现枚举进程所拥有的特权
- VB6实现枚举进程所拥有的特权
- 操作系统实现----多进程(无特权级转移)
- 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这
- 枚举进程句柄File,Section,Mutant,Timer关闭Mutex句柄实现游戏多开
- 四种方法实现VC枚举系统当前进程
- 9种枚举枚举进程的方法及实现
- Win8下枚举任意进程的句柄表。。。(VB6 Code)
- 四种方法实现VC枚举系统当前进程[包含自己注释]
- 四种方法实现VC枚举系统当前进程
- 四种方法实现VC枚举系统当前进程
- 四种方法实现VC枚举系统当前进程(转)
- C语言枚举进程,实现一个简单的内存补丁
- 四种方法实现VC枚举系统当前进程
- Win8下枚举任意进程的句柄表。。。(VB6 Code)
- 四种方法实现VC枚举系统当前进程
- 两种方法实现枚举windows下运行进程
- 四种方法实现VC枚举系统当前进程
- VC++实现枚举进程与模块