powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / имя пользователя, путь до exe + processID
25 сообщений из 32, страница 1 из 2
имя пользователя, путь до exe + processID
    #36056827
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток.
1как можно определить имя пользователя исполняемого файла по processID?
2как можно определить полный путь до EXE по processID?
Заранее благодарен!=)))
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36063084
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up ^
?
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064162
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Power,
1 (ACCESS = TOKEN_QUERY)
2
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064403
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт,
Спасибо, проверим.
А ты не смотрел в первом случае показываются все пользователи?
Я нашёл несколько примеров, но они отдают только своего пользователа и Систем.Ж/
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064444
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт,

чёта не прёт както,1й.
вот я немного переделал.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Const TOKEN_DUPLICATE As Long = &H2
Const TOKEN_IMPERSONATE As Long = &H4
Const TOKEN_QUERY As Long = &H8

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.dll" ( _
ByVal TokenHandle As Long, _
ByVal TokenInformationClass As Integer, _
TokenInformation As Any, _
ByVal TokenInformationLength As Long, _
ReturnLength As Long) As Long

Private Declare Function LookupAccountSid Lib "advapi32.dll" Alias "LookupAccountSidA" (ByVal lpSystemName As String, ByRef Sid As Any, ByVal name As String, ByRef cbName As Long, ByVal ReferencedDomainName As String, ByRef cbReferencedDomainName As Long, ByRef peUse As Long) As Long


Const TOKEN_USER =  1 
Const SPARE_LEN =  512 

Private Type SID_AND_ATTRIBUTES
Sid As Long
Attributes As Long
Spare(SPARE_LEN) As Byte
End Type

Private Function sDecodeTokenUser(hToken As Long) As String
' Returns the 'domain\user' owner of the specified access token
Dim lSidNameUse As Long
Dim sUser As String
Dim sDomain As String
Dim lUserLen As Long
Dim lDomainLen As Long
Dim tInfoStructure As SID_AND_ATTRIBUTES
Dim lInfoLen As Long

If GetTokenInformation(hToken, TOKEN_USER, tInfoStructure, _
SPARE_LEN +  4 , lInfoLen) =  0  Then

Else
sUser = String$( 100 , Chr$( 0 ))
sDomain = String$( 100 , Chr$( 0 ))
lUserLen = Len(sUser)
lDomainLen = Len(sDomain)

If LookupAccountSid(vbNullString, tInfoStructure.Sid, _
sUser, lUserLen, sDomain, lDomainLen, lSidNameUse) =  0  Then

Else
sUser = Left$(sUser, InStr(sUser, Chr$( 0 )) -  1 )
sDomain = Left$(sDomain, InStr(sDomain, Chr$( 0 )) -  1 )
sDecodeTokenUser = sDomain & "\" & sUser
End If
End If
End Function





Public Function getUSERbyPID(lPID As Long) As String
ACCESS = TOKEN_QUERY

 Dim hProcess As Long
 Dim hToken As Long
  Dim lStatus As Long

' Get a handle to the process whose ID is in lPID
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, lPID)


' Now get its primary access token
lStatus = OpenProcessToken(hProcess, ACCESS, hToken)


getUSERbyPID = sDecodeTokenUser(hToken)
CloseHandle hToken
CloseHandle hProcess

End Function



возвращается пустота, Чё делать
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064455
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OpenProcess(PROCESS_QUERY_INFORMATION, 0, lPID) возвращает 0
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064514
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Mr.Power
> OpenProcess(PROCESS_QUERY_INFORMATION, 0, lPID) возвращает 0

И чего говорит GetLastError? ;)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064532
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное ERROR_ACCESS_DENIED =)
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064541
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу там всё нормом
LookupAccountSid(vbNullString, tInfoStructure.sid, _
sUser, lUserLen, sDomain, lDomainLen, lSidNameUse)

возвращает 0 хотя должен возвращать чтото другое
короче функция почемуто не выполгняется
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064546
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneнаверное ERROR_ACCESS_DENIED =)Скорее всего :)
Вот франкенштейнчик, быстренько сляпанный из обоих примеров.

Но для тех процессов, что в Task Manager показываются с именем пользователя "LOCAL SERVICE" или "NETWORK SERVICE" под моей учётной записью та же самая Access Denied.
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064558
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну всё вот готовый код, только надо подумать над тем чтобы выдавались все пользователи. Как Это сделать?
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064559
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Const TOKEN_DUPLICATE As Long = &H2
Const TOKEN_IMPERSONATE As Long = &H4
Const TOKEN_QUERY As Long = &H8
Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const ERROR_ACCESS_DENIED As Long =  5 &

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.dll" ( _
ByVal TokenHandle As Long, _
ByVal TokenInformationClass As Integer, _
TokenInformation As Any, _
ByVal TokenInformationLength As Long, _
ReturnLength 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


Const TOKEN_USER =  1 
Const SPARE_LEN =  512 

Private Type SID_AND_ATTRIBUTES
Sid As Long
Attributes As Long
Spare(SPARE_LEN) As Byte
End Type

Private Function sDecodeTokenUser(hToken As Long) As String
' Returns the 'domain\user' owner of the specified access token
Dim lSidNameUse As Long
Dim sUser As String
Dim sDomain As String
Dim lUserLen As Long
Dim lDomainLen As Long
Dim tInfoStructure As SID_AND_ATTRIBUTES
Dim lInfoLen As Long
Dim Sid As Long
If GetTokenInformation(hToken, TOKEN_USER, tInfoStructure, _
SPARE_LEN +  4 , lInfoLen) =  0  Then

Else
sUser = String$( 100 , Chr( 0 ))
sDomain = String$( 100 , Chr( 0 ))
lUserLen = Len(sUser)
lDomainLen = Len(sDomain)

Form1.Caption = LookupAccountSid(vbNullString, tInfoStructure.Sid, _
sUser, lUserLen, sDomain, lDomainLen, lSidNameUse)




sUser = Left$(sUser, InStr(sUser, Chr$( 0 )) -  1 )
sDomain = Left$(sDomain, InStr(sDomain, Chr$( 0 )) -  1 )
sDecodeTokenUser = sUser

End If

End Function





Public Function getUSERbyPID(lPID As Long) As String
ACCESS = TOKEN_QUERY

 Dim hProcess As Long
 Dim hToken As Long
  Dim lStatus As Long

' Get a handle to the process whose ID is in lPID
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,  0 , lPID)


' Now get its primary access token
lStatus = OpenProcessToken(hProcess, ACCESS, hToken)


d = sDecodeTokenUser(hToken)
getUSERbyPID = d


CloseHandle hToken
CloseHandle hProcess

End Function


...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064572
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, где там http://support.microsoft.com/kb/187913
нашли ответ на мой 2й вопрос?:)
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064578
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я хочу получть полный путь до исполняемого файла зная его processID
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064594
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Mr.Power
> кстати, где там http://support.microsoft.com/kb/187913
> нашли ответ на мой 2й вопрос?:)

Отвечу вопросом, а ты пример оттуда запускал?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064595
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Powerкстати, где там http://support.microsoft.com/kb/187913
нашли ответ на мой 2й вопрос?:)

я хочу получть полный путь до исполняемого файла зная его processID"- Шо, опять?!!" ((с) "Жил-был пёс")

Да, вот ещё обсуждение , копай.
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064604
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь ступил
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064657
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать WMI:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub GetInfoByProcessId(PID As Long)
    Dim WMI As Object
    Dim wProcesses As Object
    Dim wProcess As Object
    Dim wUser As String
    Dim wDomain As String
    
    Set WMI = GetObject("WinMgmts:\\.\Root\CIMV2")
    
    Set wProcesses = WMI.ExecQuery("select * from Win32_Process where ProcessId='" + LTrim(Str(PID)) + "'")
   
    For Each wProcess In wProcesses
        With wProcess
            MsgBox .ExecutablePath
            .GetOwner wUser, wDomain
            MsgBox wUser
            MsgBox wDomain
        End With
    Next
End Sub
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36064685
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, с WMI будет значительно проще. Вылетело из головы.
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36065430
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт,

ты не знаешь а чё так виснет при использовании этого кода?
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36065529
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может попробовать прокачать тему с привилегиями?
вот код только он какбудто не работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
Private Const SE_PRIVILEGE_ENABLED As Long = &H2

Private Const SE_PRIVILEGE_ENABLED_BY_DEFAULT As Long = &H1
Private Const SE_PRIVILEGE_USED_FOR_ACCESS As Long = &H80000000


Private Const ANYSIZE_ARRAY As Long =  1 

Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20




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 LARGE_INTEGER
    LowPart As Long
    HighPart As Long
End Type

Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type







Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LARGE_INTEGER) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long

Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Const TOKEN_DUPLICATE As Long = &H2
Const TOKEN_IMPERSONATE As Long = &H4
Const TOKEN_QUERY As Long = &H8
Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const ERROR_ACCESS_DENIED As Long =  5 &

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.dll" ( _
ByVal TokenHandle As Long, _
ByVal TokenInformationClass As Integer, _
TokenInformation As Any, _
ByVal TokenInformationLength As Long, _
ReturnLength 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

Public Function setPrivileges(PrivilegeName As Variant)
Dim tkp As TOKEN_PRIVILEGES
Dim pr As LARGE_INTEGER
result = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, token)
If Not result Then Exit Function
result = LookupPrivilegeValue(vbNullString, PrivilegeName, pr)
If Not result Then Exit Function
tkp.PrivilegeCount =  1 

tkp.Privileges( 0 ).Attributes = SE_PRIVILEGE_ENABLED
Dim tpss As TOKEN_PRIVILEGES
cb =  0 
result = AdjustTokenPrivileges(token, False, tkp, Len(tkp), tpss, cb)
CloseHandle (token)
End Function



...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36065615
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Mr.Power
> а может попробовать прокачать тему с привилегиями?

А чего прокачивать? на остове этой (и ещё одной) статьи: HOWTO: Use the
SeDebugPrivilege to Acquire Any Process Handle
я делал программу для сетапа, которая создавала пользователей,
раздавала им права ра ветки реестра, файлы и папки. А именно эту привилегию необходимо иметь для програмного прибивания
другого работающего процесса в системе.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36065667
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего не понятно, почемуто не хочет у меня сробатывать функция AdjustTokenPrivileges

Dim tkp As TOKEN_PRIVILEGES
Dim pr As LARGE_INTEGER
Dim TkpOld As TOKEN_PRIVILEGES
result = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, token)

Dim rets As Long

Ret = LookupPrivilegeValue(vbNullString, PrivilegeName, tkp.Privileges(0).pLuid)
tkp.PrivilegeCount = 1
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
aOkReboot = AdjustTokenPrivileges(token, -1, tkp, LenB(tkp), TkpOld, rets)


не пойму в чём дело вроде всё правильно token есть, tpk, тоже.
все значения поступают правильно, однако функция не выполняется, возвращает 0

Как тут быть?
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36065710
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Mr.Power
> Как тут быть?

Смотреть что говорит GetLastError
MSDNIf the function fails, the return value is zero. To get extended error information, call GetLastError.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
имя пользователя, путь до exe + processID
    #36065959
Фотография Mr.Power
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот вроде всё отладил однако ничего не происходит, остальные юзеры как были невидимыми так и остались
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Function priva()


Dim hToken As Long
Dim hProcess As Long
Dim tp As TOKEN_PRIVILEGES
Dim ttk As TOKEN_PRIVILEGES



If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) =  0  Then

End If

 If LookupPrivilegeValue("", "SeDebugPrivilege", tp.Privileges( 0 ).pLuid) =  0  Then
'If LookupPrivilegeValue(vbNullString, "SeImpersonatePrivilege", tp.Privileges(0).pLuid) = 0 Then

End If

tp.PrivilegeCount =  1 
tp.Privileges( 0 ).Attributes = SE_PRIVILEGE_ENABLED

If AdjustTokenPrivileges(hToken, False, tp, Len(tp), ttk, m) =  0  Then
Beep
End If

End Function

...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / имя пользователя, путь до exe + processID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]