获取进程用户

引用内容 引用内容

Private Const WTS_CURRENT_SERVER_HANDLE = 0&
Private Declare Function WTSEnumerateProcesses _
            
Lib "wtsapi32.dll" Alias "WTSEnumerateProcessesA" _
            (
ByVal hServer As Long, ByVal Reserved As Long, _
            
ByVal Version As Long, ByRef ppProcessInfo As Long, _
            
ByRef pCount As Long) As Long
            
Private Declare Function
LookupAccountSid Lib "advapi32.dll" Alias "LookupAccountSidA" (ByVal lpSystemName As String, ByVal SID As Long, ByVal name As String, cbName As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Long) As Long
Private Declare Sub
WTSFreeMemory Lib "wtsapi32.dll" (pMemory As Any)
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, _
                                      
ByRef Source As Any, _
                                      
ByVal Length As Long)
                                      
Public Function GetProcessUserNameByProcessId(ByVal dwProcessId As Long) As String
    Dim
objWtsProcessInfo As WTS_PROCESS_INFO, i As Integer, lngRet As Long, lngCount As Long
    Dim
lngInfo As Long, lngAddr As Long, strUserName As String, strDomain As String, lngTmp As Long
    
lngRet = WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, lngInfo, lngCount)
    
If lngRet Then
        
lngAddr = lngInfo
        
For i = 1 To lngCount
            CopyMemory objWtsProcessInfo,
ByVal lngAddr, LenB(objWtsProcessInfo)
            
If objWtsProcessInfo.ProcessID = dwProcessId Then
                
strUserName = String(255, Chr(0))
                strDomain =
String(255, Chr(0))
                lngRet = LookupAccountSid(vbNullString, objWtsProcessInfo.pUserSid, strUserName,
255, strDomain, 255, lngTmp)
                GetProcessUserNameByProcessId = Left(strUserName, InStr(strUserName, Chr(
0)) - 1)
                WTSFreeMemory objWtsProcessInfo
                
Exit Function
            End If
            
WTSFreeMemory objWtsProcessInfo
            lngAddr = lngAddr + LenB(objWtsProcessInfo)
        
Next
    End If
End Function



[本日志由 JiaJia 于 2008-03-29 05:11 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: VB 进程
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.