Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800

Как узнать уровень защиты процесса не используя GetProcessInformation (эта функция минимум для Windows 8)?

24.12.2021, 11:05. Показов 5121. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня тут такой вопрос, нигде не нашёл ответа в Интернете. Как узнать уровень защищённости процесса, например системный он или нет, ну там есть несколько уровней разной защиты. Использование GetProcessInformation мне не подходит там для Win 8. Мне надо для семёрки хотя бы. А лучше и для XP. Рекомендовали функцию NtQueryInformationProcess или ZwQueryInformationProcess с кодом ProcessProtectionInformation (61). Но когда я пробовал и долго мучился у меня ничего не получилось, лично у меня, что в XP, что в Win 7 выдаёт ошибку &HC0000003 короче мол такого параметра нету, хотя даже в MSDN есть описание для ZwQueryInformationProcess, но у меня не работает. И нигде не нашёл рабочих примеров для NtQueryInformationProcess с кодом ProcessProtectionInformation именно. Может, что подскажете!?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2021, 11:05
Ответы с готовыми решениями:

Как узнать уровень громкости Windows 7 ?
Пожалуйста.

Обход UAC на Windows 10 pro (Максимальный уровень защиты)
Друзья, всем привет! (надеюсь не создал 1000 тему:-|) Прошу помочь. На рабочем ноуте установлена Win 10 pro 18363.1082. Админка на...

Можно ли, используя библиотеку BASS, узнать уровень входного сигнала?
Привет всем. Может кто подскажет, можно ли используя библиотеку bass узнать уровень входного сигнала.... Например, подключен микрофон... На...

45
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
25.12.2021, 09:52  [ТС]
Студворк — интернет-сервис помощи студентам
Все мои процессы в системе выдают флаги (tInf.Flags) либо 2 либо 8 (процесс от имени другого пользователя) и почти все остальные ноль флагов нет
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
25.12.2021, 10:09
Цитата Сообщение от HackerVlad Посмотреть сообщение
Все мои процессы в системе выдают флаги (tInf.Flags) либо 2 либо 8
У вас просто система неправильная.

Вот на Win11 например всё ок:
Code
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
0 The parameter is incorrect. Idle
4       1       System
232     129     Secure System
328     1       Registry
840     1       smss
1136    1       csrss
1280    1       wininit
1288    1       csrss
1352    1       services
1372    128     LsaIso
1380    0       lsass
1452    0       winlogon
1572    0       svchost
1600    0       fontdrvhost
1608    0       fontdrvhost
1704    0       svchost
1752    0       svchost
1836    0       dwm
1900    0       svchost
1956    0       svchost
2020    0       svchost
1048    0       svchost
1056    0       svchost
1072    0       svchost
1516    0       svchost
1720    0       svchost
2200    0       svchost
2232    0       svchost
2388    0       svchost
2400    0       vmms
2528    0       svchost
2556    0       svchost
2616    0       svchost
2628    0       svchost
2756    0       svchost
2768    0       atiesrxx
2776    0       amdfendrsr
2860    0       svchost
2912    0       svchost
3028    0       svchost
3084    0       svchost
3112    0       svchost
3164    0       svchost
3224    0       svchost
3300    0       svchost
3308    0       svchost
3316    0       svchost
3420    1       Memory Compression
3464    0       svchost
3508    0       svchost
3516    0       svchost
3708    0       svchost
3760    0       svchost
3908    0       svchost
3916    0       svchost
3568    0       svchost
3664    0       svchost
2312    0       spoolsv
4136    0       svchost
4336    0       AsusUpdateCheck
4348    0       IPROSetMonitor
4356    0       svchost
4376    0       svchost
4388    0       svchost
4400    0       svchost
4416    0       RtkBtManServ
4436    0       svchost
4444    0       svchost
4456    0       svchost
4464    0       svchost
4568    1       MsMpEng
5028    0       vmcompute
5096    0       svchost
5248    0       svchost
5520    0       svchost
5540    0       svchost
5748    0       dasHost
5808    0       conhost
6412    0       conhost
6728    0       WmiPrvSE
6812    0       AggregatorHost
6472    0       svchost
4296    0       svchost
8928    0       svchost
8940    0       svchost
9252    8       atieclxx
10120   0       WmiPrvSE
10092   0       vmmem
9644    8       sihost
9596    8       svchost
9380    8       svchost
3576    8       taskhostw
6616    0       svchost
9208    8       svchost
1620    0       svchost
4624    8       ctfmon
7044    0       explorer
1760    0       svchost
2932    0       svchost
5860    0       svchost
8564    0       svchost
9548    8       svchost
10272   72      SearchHost
10280   72      StartMenuExperienceHost
10428   72      RuntimeBroker
10484   0       SearchIndexer
10520   72      RuntimeBroker
10664   8       svchost
11160   8       dllhost
11820   8       UserOOBEBroker
12892   72      TextInputHost
12408   0       RadeonSoftware
12696   8       CPUMetricsServer
13108   0       cncmd
13092   8       AMDRSServ
13240   8       amdow
10784   8       ApplicationFrameHost
9456    8       svchost
8076    0       svchost
13984   0       svchost
14176   88      YourPhone
7092    72      RuntimeBroker
15144   0       SecurityHealthSystray
15164   1       SecurityHealthService
15260   0       RtkNGUI64
14416   10      SS3Svc32
11420   0       SS3Svc64
14880   8       svchost
1156    0       svchost
6552    0       svchost
13200   0       OneDrive
14512   2       jusched
9468    0       CCXProcess
8752    0       conhost
1996    0       svchost
13620   2       AdobeIPCBroker
13688   1       SgrmBroker
11424   0       svchost
13036   1       svchost
23028   8       dllhost
23628   72      RuntimeBroker
24268   0       svchost
23576   0       AMDRSSrcExt
21336   0       QtWebEngineProcess
6952    0       TGitCache
19876   0       svchost
2480    88      Video.UI
19852   72      RuntimeBroker
12776   0       svchost
19668   88      Microsoft.Photos
448     72      RuntimeBroker
15956   0       svchost
25252   2       pageant
25112   10      dllhost
17348   104     MiniSearchHost
29152   0       TCMDX64
8204    1       MpCopyAccelerator
12836   8       Taskmgr
13132   8       taskhostw
32468   0       audiodg
8072    72      dllhost
27820   1       NisSrv
30712   0       svchost
20740   0       svchost
33848   88      SystemSettings
32928   88      ShellExperienceHost
12284   72      RuntimeBroker
14864   0       conhost
33044   8       SystemSettingsBroker
24532   1       MsMpEngCP
22480   0       SearchProtocolHost
18800   0       SearchFilterHost
38120   0       conhost
34168   0       WUDFHost
35380   88      HxOutlook
10912   72      RuntimeBroker
28780   88      HxTsr
16532   8       smartscreen
28372   1       svchost
25024   0       svchost
21012   1       svchost
28848   0       StandardCollector.Service
2548    0       svchost
30288   0       VBCSCompiler
26416   0       conhost
17084   8       devenv
11796   0       PerfWatson2
32164   0       Microsoft.ServiceHub.Controller
31544   2       ServiceHub.IdentityHost
38616   0       ServiceHub.VSDetouredHost
4148    2       ServiceHub.SettingsHost
35132   0       ServiceHub.RoslynCodeAnalysisService
1592    2       ServiceHub.Host.CLR.x86
3372    0       ServiceHub.Host.CLR
31176   0       ServiceHub.TestWindowStoreHost
28648   0       ServiceHub.Host.CLR.x64
23740   2       ServiceHub.Host.CLR.x86
33820   0       MSBuild
34212   0       conhost
12824   0       VBCSCompiler
12056   0       conhost
24072   0       ServiceHub.DataWarehouseHost
15836   0       WebViewHost
33828   0       conhost
26052   0       svchost
27104   0       svchost
28240   2       VsDebugConsole
29948   0       conhost
22556   0       ConsoleApp1
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
25.12.2021, 10:23
Изначально стоял вопрос узнать защищен ли процесс и уровень его защищенности. Я не совсем понимаю что за системный процесс? Запущенный от имени системы или критический системный процесс?

Добавлено через 2 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
Все мои процессы в системе выдают флаги (tInf.Flags) либо 2 либо 8 (процесс от имени другого пользователя) и почти все остальные ноль флагов нет
Что показывает ProcessExplorer к примеру на процессе system?
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
25.12.2021, 12:31  [ТС]
Да, изначально я действительно ставил такой вопрос, защищённый процесс или нет. Я не предполагал даже, что в Windows 7 все процессы являются не защищёнными оказывается. Ну я наивно полагал что узнав, какой процесс защищённый то я узнаю какой процесс системный (критический). Может это и сработало бы в Win 8+

Дело в том, что я не знаю никакого способа кроме Restart Manager APi (который работает медленно) и кроме WMI (который ещё медленнее и ненадёжнее) чтобы узнать является ли процесс системный с включёнными SeDebugName привилегиями. И знаю только один единственный способ без привилегий через простое OpenProcess выдаст ошибку или нет... Вот так и работаю зато выдаёт результат за 0 миллисекунд OpenProcess в отличии от других методов.

Добавлено через 3 минуты
Ну я люблю больше пользоваться Process Hacker нежели чем Process Explorer. Кстати в Process Hacker'е открытый код по лицензии GNU по моему. Это вообще отлично.
Процессы NT AUTHORYTI\система вот эти процессы меня интересуют.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
25.12.2021, 15:09
Цитата Сообщение от HackerVlad Посмотреть сообщение
я узнаю какой процесс системный (критический)
NtQueryInformationProcess c флагом ProcessBreakOnTermination.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Процессы NT AUTHORYTI\система вот эти процессы меня интересуют.
Если интересует от чьего имени запущен то можно получить так:
WinStationGetProcessSid - получаешь SID процесса;
LookupAccountSid - получаешь имя (если нужно), либо просто через EqualSid чекаешь предопределенный SID.
Также можно через GetTokenInformation TokenUser получить SID.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
25.12.2021, 22:32  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
NtQueryInformationProcess c флагом ProcessBreakOnTermination.
Да, это я уже давно узнал, но там же только BSOD'ные процессы показывает: вот мой код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' Критический процесс или нет
Public Function IsCriticalProcess(PID As Long) As Boolean
    Dim hProc As Long
    Dim IsCrytical As Long
    
    hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, PID)
    
    If hProc > 0 Then
        NtQueryInformationProcess hProc, ProcessBreakOnTermination, IsCrytical, Len(IsCrytical), ByVal 0&
        If IsCrytical = 1 Then IsCriticalProcess = True
    End If
    
    CloseHandle hProc
End Function
Таких процессов всего ничего 4 штуки которые приводят к синему экрану смерти.

Добавлено через 4 минуты
Хотел ещё спросить, через PEB процесса никак нельзя узнать системный он или нет?
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
25.12.2021, 22:42
HackerVlad, я уже написал как. Я не понимаю что значит системный процесс. Если запущенный от имени системы то получаешь токен процесса и смотришь его SID, если критический системный процесс - то через ProcessBreakOnTermination.

Добавлено через 3 минуты
HackerVlad, где конкретно в какой программе посмотреть список системных процессов? Вот в Process Explorer / Process Hacker / Task Manager - как эти процессы отличить от несистемных - то что имеется в виду?
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
25.12.2021, 22:47  [ТС]
Системные процессы - это процессы запущенные ни только от имени системы но и все процессы которые не открываются на полный доступ через OpenProcess. То есть это все НЕ пользовательские процессы. Все процессы которые запущены НЕ от имени пользователя. Включая LOCAL_SERVICE и что там ещё, я забыл. Ну спасибо, я понял в каком направлении опять копать. В любом случае пока лень писать такой код самому. Я с Restart Manager API неделю переписывал с C++. А потом оказалось что 300 миллисекунд надо потратить чтобы узнать о 50 процессах системные они или нет. Или 200 миллисекунд. В общем много очень.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
25.12.2021, 22:53
Цитата Сообщение от HackerVlad Посмотреть сообщение
Я с Restart Manager API неделю переписывал с C++. А потом оказалось что 300 миллисекунд надо потратить чтобы узнать о 50 процессах системные они или нет. Или 200 миллисекунд. В общем много очень.
Скинь код который получает список процессов таким образом, возможно получится ускорить/переписать быстрее.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
25.12.2021, 23:03  [ТС]
Сразу хочу сказать, тем что я делюсь сейчас, этого когда нет нигде в Интернете. Пришлось писать самому. Абсолютно нигде нет.
Именно для VB6 я имею ввиду.
Restart ManagerAPI.
Visual Basic
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
Private Declare Function RmStartSession Lib "Rstrtmgr.dll" (ByRef pSessionHandle As Long, ByVal dwSessionFlags As Long, ByVal strSessionKey As Long) As Long
Private Declare Function RmRegisterResources Lib "Rstrtmgr.dll" (ByVal pSessionHandle As Long, ByVal nFiles As Long, ByVal rgsFilenames As Any, ByVal nApplications As Long, ByRef rgApplications As Any, ByVal nServices As Long, ByVal rgsServiceNames As Any) As Long
Private Declare Function RmGetList Lib "Rstrtmgr.dll" (ByVal pSessionHandle As Long, ByRef pnProcInfoNeeded As Long, ByRef pnProcInfo As Long, ByRef rgAffectedApps As Any, ByRef lpdwRebootReasons As Long) As Long
Private Declare Function RmEndSession Lib "Rstrtmgr.dll" (ByVal pSessionHandle As Long) As Long
 
Private Type RM_UNIQUE_PROCESS
    dwProcessId As Long
    ProcessStartTime As FILETIME
End Type
 
Private Type RM_PROCESS_INFO
    Process As RM_UNIQUE_PROCESS
    strAppName(511) As Byte ' Резервируем 512 байт для уникодной строки буфера 256 символов
    strServiceShortName(127) As Byte ' Резервируем 128 байт для уникодной строки буфера 64 символа
    ApplicationType As Long ' На каждую следующею переменную резервируется по 4 байта
    AppStatus As Long
    TSSessionId As Long
    bRestartable As Long ' Boolean
End Type
 
' Узнать системный ли это процесс с помощью Restart Manager API (работает как с админ прававми, так и без)
Public Function IsSystemProcessRstrtmgr(PID As Long) As Boolean
    Dim SessionHandle As Long
    Dim key As String
    Dim rm As RM_UNIQUE_PROCESS
    Dim ProcInfoNeeded As Long
    Dim ProcInfoNeeded2 As Long
    Dim RebootReasons As Long
    Dim ProcessInfo() As RM_PROCESS_INFO
    Dim ret As Long
    Dim i As Long
    
    If PID = GetCurrentProcessId Then Exit Function
    If PID = 4 Then
        IsSystemProcessRstrtmgr = True
        Exit Function
    End If
    
    rm.dwProcessId = PID ' Установить pid
    key = Space$(256)
    
    If RmStartSession(SessionHandle, 0, StrPtr(key)) = ERROR_SUCCESS Then
        key = Trim$(key)
        
        If RmRegisterResources(SessionHandle, ByVal 0&, ByVal 0&, 1, rm, ByVal 0&, ByVal 0&) = ERROR_SUCCESS Then
            ReDim ProcessInfo(0)
            ret = RmGetList(SessionHandle, ProcInfoNeeded, 1, ProcessInfo(0), RebootReasons)
            
            If ret = ERROR_SUCCESS Then
                If ProcessInfo(0).TSSessionId <> -1 Then ' Если процесс существует
                    If RebootReasons <> 2 Then ' <> RmRebootReasonSessionMismatch
                        If ProcessInfo(0).ApplicationType = 1000 Or ProcessInfo(0).ApplicationType = 3 Then ' RmCritical OR RmService
                            IsSystemProcessRstrtmgr = True
                        End If
                    Else ' A system restart is needed because one or more processes to be shut down are critical processes
                        IsSystemProcessRstrtmgr = True
                    End If
                End If
            ElseIf ret = ERROR_MORE_DATA Then
                If RebootReasons = 2 Or RebootReasons = 4 Or RebootReasons = 8 Then
                    ' RmRebootReasonSessionMismatch OR RmRebootReasonCriticalProcess OR RmRebootReasonCriticalService
                    IsSystemProcessRstrtmgr = True
                Else
                    ReDim Preserve ProcessInfo(ProcInfoNeeded - 1)
                    
                    If RmGetList(SessionHandle, ProcInfoNeeded2, ProcInfoNeeded, ProcessInfo(0), RebootReasons) = ERROR_SUCCESS Then
                        For i = 0 To UBound(ProcessInfo) ' Перебрать список, вероятно одинаковых, процессов (скорее всего svchost.exe)
                            If ProcessInfo(i).Process.dwProcessId = PID Then ' Найден интересуемый нами процесс
                                If ProcessInfo(i).TSSessionId <> -1 Then ' Если процесс существует
                                    If RebootReasons <> 2 Then ' <> RmRebootReasonSessionMismatch
                                        If ProcessInfo(i).ApplicationType = 1000 Or ProcessInfo(i).ApplicationType = 3 Then ' RmCritical OR RmService
                                            IsSystemProcessRstrtmgr = True
                                        End If
                                    Else ' A system restart is needed because one or more processes to be shut down are critical processes
                                        IsSystemProcessRstrtmgr = True
                                    End If
                                End If
                                
                                Exit For
                            End If
                        Next
                    End If
                End If
            End If
        End If
        
        RmEndSession SessionHandle
    End If
End Function
 
' Получить пакет информации о том, системные это процессы или нет, с помощью Restart Manager API (работает как с админ прававми, так и без)
Public Function IsSystemProcessesRstrtmgr(pids() As Long) As Boolean()
    Dim rm() As RM_UNIQUE_PROCESS
    Dim ProcessInfo() As RM_PROCESS_INFO
    Dim QueryIsSystems() As Boolean
    Dim IsSysProc As Boolean
    Dim SessionHandle As Long
    Dim key As String
    Dim ProcInfoNeeded As Long
    Dim ProcInfoNeeded2 As Long
    Dim RebootReasons As Long
    Dim getPID As Long
    Dim ret As Long
    Dim cnt As Long
    Dim count As Long
    Dim i As Long
    Dim i2 As Long
    Dim AdminRights As Boolean
    
    ' Проверить инициализирован ли массив
    If SafeArrayGetDim(pids) = 0 Then Exit Function
    
    cnt = UBound(pids)
    ReDim Preserve rm(cnt)
    
    ' Установить pid'ы
    For i = 0 To UBound(pids)
        rm(i).dwProcessId = pids(i)
    Next
    key = Space$(256)
    
    If RmStartSession(SessionHandle, 0, StrPtr(key)) = ERROR_SUCCESS Then
        key = Trim$(key)
        
        If RmRegisterResources(SessionHandle, ByVal 0&, ByVal 0&, cnt + 1, rm(0), ByVal 0&, ByVal 0&) = ERROR_SUCCESS Then
            ReDim ProcessInfo(cnt)
            ret = RmGetList(SessionHandle, ProcInfoNeeded, cnt + 1, ProcessInfo(0), RebootReasons)
            
            If ret = ERROR_MORE_DATA Then ' Буфер слишком мал
                ReDim Preserve ProcessInfo(ProcInfoNeeded - 1) ' Увеличиваем буфер
                ret = RmGetList(SessionHandle, ProcInfoNeeded2, ProcInfoNeeded, ProcessInfo(0), RebootReasons) ' Повторяем попытку
            End If
            If ret = ERROR_SUCCESS Then ' Если нету ошибок
                getPID = GetCurrentProcessId
                AdminRights = IsPrivilegeProcess ' Единожды
                
                For i = 0 To UBound(pids) ' Прежде всего надо перебирать свой список pids
                    If pids(i) <> 4 And pids(i) <> 0 Then
                        For i2 = 0 To UBound(ProcessInfo) ' Потом нужно перебрать список процессов Restart Manager
                            If ProcessInfo(i2).Process.dwProcessId = pids(i) Then ' Найден интересуемый нами процесс
                                ' Является ли процесс системным
                                IsSysProc = False
                                If ProcessInfo(i2).Process.dwProcessId <> getPID Then ' Если это не мой процесс
                                    If ProcessInfo(i2).TSSessionId <> -1 Then ' Если процесс существует
                                        If ProcessInfo(i2).ApplicationType = 1000 Or ProcessInfo(i2).ApplicationType = 3 Then ' RmCritical OR RmService
                                            IsSysProc = True
                                        End If
                                    End If
                                End If
                                
                                If AdminRights = True Then
                                    ' Перепроверить является ли процесс системным, в случае если установлены админ права
                                    If IsSysProc = False Then
                                        If IsSystemProcessRstrtmgr(pids(i)) = True Then
                                            IsSysProc = True ' Процесс всё-таки системный
                                        End If
                                    End If
                                End If
                                
                                ReDim Preserve QueryIsSystems(count)
                                QueryIsSystems(count) = IsSysProc
                                count = count + 1
                                
                                Exit For ' Для ускорения выйти из второго цикла Restart Manager
                            End If
                        Next
                    Else
                        ReDim Preserve QueryIsSystems(count)
                        QueryIsSystems(count) = True
                        count = count + 1
                    End If
                Next
            End If
        End If
        
        If count > 0 Then
            IsSystemProcessesRstrtmgr = QueryIsSystems()
        End If
        RmEndSession SessionHandle
    End If
End Function
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
26.12.2021, 00:21
HackerVlad, IsPrivilegeProcess - не определена.

Добавлено через 59 минут
HackerVlad, используй связку функций EnumServicesStatusEx (получай PID сервисов и сверяй с переданным) и NtQueryInformationProcess c флагом ProcessBreakOnTermination.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
26.12.2021, 04:55  [ТС]
IsPrivilegeProcess забыл и правда функцию скопировать, она определяет включены ли права SeDebug, по моему, для того чтобы понять работает из под админ прав или нет. С полностью включенным UAC, лично у меня, можно получать информацию быстрее не обращая внимание на RebootReasons который пакетно не получишь. Тут всё и замедляется.

С включенным UAC там и правда легче там все процессы системные например защищены от удаления, их определение легче.

Спасибо за подсказку про EnumServicesStatusEx. Можно определить о том процесс сервис или нет только через списки перебирая?

Про Restart Manager API. Он сам по себе медленный. Один запрос 50 - 100 млск. NtQuerySystemInformation в 10 раз быстрее, а то и в 100 раз быстрее. Жаль не даёт информации только о том системный процесс или нет)

Про NtQueryInformationProcess c флагом ProcessBreakOnTermination. Я конечно этим пользуюсь давно. Это только процессы вызывающие синий экран. Это smss.exe, csrss.exe (2 шт) и wininit.exe и всё. Кстати я заметил если с них снять БСОДность и удалить их из памяти килл процессом то тогда каждый запрос к Restart Manager API приводит к зависанию приложения. В отличии от других функций. Ну это извращение правда уже.

Для EnumServicesStatusEx готового примерчика не найдётся?

Добавлено через 14 минут
Что я там забыл кстати скопировать? Простая функция которая определяет инициализирован ли любой массив:

Visual Basic
1
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (psa() As Any) As Long
Ну и функция которая получает информацию о том включены ли привилегии SeDebugPrivilege.

Visual Basic
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
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPriv As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, ByRef TokenInformation As Any, ByVal TokenInformationLength As Long, ByRef ReturnLength As Long) As Long
Private Declare Function LookupPrivilegeName Lib "advapi32.dll" Alias "LookupPrivilegeNameW" (ByVal lpSystemName As Long, ByRef lpLuid As LUID, ByVal lpName As Long, ByRef cchName As Long) As Long
Private Declare Function SysReAllocStringLen Lib "oleaut32.dll" (ByVal pBSTR As Long, Optional ByVal pszStrPtr As Long, Optional ByVal Length As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
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 As LUID_AND_ATTRIBUTES
End Type
 
Public Function IsPrivilegeProcess(Optional ProcessId As Long, Optional seName As String = "SeDebugPrivilege") As Boolean
    Dim hProcess As Long
    Dim hToken As Long, i As Long, Size As Long, sPrivName As String, LA() As LUID_AND_ATTRIBUTES
    
    If ProcessId > 0 Then
        hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessId)
    Else
        hProcess = GetCurrentProcess
    End If
    
    If hProcess Then
        If OpenProcessToken(hProcess, TOKEN_QUERY, hToken) Then
            GetTokenInformation hToken, TokenPrivileges, ByVal 0&, 0&, Size
            
            If Size Then
                ReDim LA(0& To (Size \ 4& - 1&) \ 3&) As LUID_AND_ATTRIBUTES
                
                If GetTokenInformation(hToken, TokenPrivileges, LA(0&).Attributes, Size, Size) Then
                    For i = 1& To LA(0&).Attributes
                        Size = 0&
                        LookupPrivilegeName 0&, LA(i).pLuid, 0&, Size
                        
                        If Size Then
                            SysReAllocStringLen VarPtr(sPrivName), , Size - 1&
                            
                            If LookupPrivilegeName(0&, LA(i).pLuid, StrPtr(sPrivName), Size) Then
                                If sPrivName = seName Then
                                    IsPrivilegeProcess = (LA(i).Attributes And (SE_PRIVILEGE_ENABLED_BY_DEFAULT Or SE_PRIVILEGE_ENABLED)) <> 0&
                                    Exit For
                                End If
                            End If
                        End If
                    Next
                End If
            End If
            
            CloseHandle hToken
        End If
        
        If ProcessId > 0 Then CloseHandle hProcess
    End If
End Function
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
27.12.2021, 18:28  [ТС]
Почему нет описание функции WinStationGetProcessSid в MSDN. Ох...

Добавлено через 5 часов 59 минут
Цитата Сообщение от The trick Посмотреть сообщение
используй связку функций EnumServicesStatusEx
Ну может мне и не обязательно получать список сервисов. Является ли процесс сервисом, на этот вопрос итак отвечает Rastart Manager API.
Visual Basic
1
If ProcessInfo(i).ApplicationType = 3 Then ' RmService
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
28.12.2021, 11:05
Цитата Сообщение от HackerVlad Посмотреть сообщение
Можно определить о том процесс сервис или нет только через списки перебирая?
Получаешь список, и в списке уже сравниваешь где обычный процесс, где сервис.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Про Restart Manager API. Он сам по себе медленный.
RmRegisterResources - медленная. В описании так и сказано, вызывайте один раз со списком, вместо нескольких раз по одному файлу.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Почему нет описание функции WinStationGetProcessSid в MSDN. Ох...
Она недокументированная, но Process Explorer юзает ее:
C
1
BOOLEAN __stdcall WinStationGetProcessSid(HANDLE hServer, DWORD dwPID, FILETIME a2, PSID DestinationSid, DWORD *dwSIDSize);
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ну может мне и не обязательно получать список сервисов. Является ли процесс сервисом, на этот вопрос итак отвечает Rastart Manager API.
Тут вообще не нужен Restart Manager, он не предназначен для этого.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
28.12.2021, 15:00  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Тут вообще не нужен Restart Manager, он не предназначен для этого
Я теперь уже понял, что лучше и быстрее по времени будет использование других функций, но сам Майкрософт рекомендовал для узнавания системный ли процесс именно эти API. https://docs.microsoft.com/ru-... dfrom=MSDN
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
28.12.2021, 15:55
Цитата Сообщение от HackerVlad Посмотреть сообщение
Я теперь уже понял, что лучше и быстрее по времени будет использование других функций, но сам Майкрософт рекомендовал для узнавания системный ли процесс именно эти API. https://docs.microsoft.com/ru-... dfrom=MSDN
RmCritial если я не ошибаюсь это ProcessBreakOnTermination.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
28.12.2021, 16:01  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
RmCritial если я не ошибаюсь это ProcessBreakOnTermination.
Нет. Я же говорил, ProcessBreakOnTermination - это только исключительно бсодные процесы, завершение которых приводит к синему экрану смерти. Больше ничего это не значит ProcessBreakOnTermination.
RmCritial в API Restart Manager'а значит что процесс системный и не обязательно бсодный (но так же может и бсодный)
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
28.12.2021, 17:36
Цитата Сообщение от HackerVlad Посмотреть сообщение
RmCritial в API Restart Manager'а значит что процесс системный и не обязательно бсодный (но так же может и бсодный)
В общем посмотрел я как RM выставляет флаг RmCritial. Все процессы с флагом ProcessBreakOnTermination включаются, а также тестируется жестко вшитый список процессов (на Win7 x64):
C
1
2
3
4
5
6
7
  v12 = L"system32\\csrss.exe";
  v13 = L"system32\\smss.exe";
  v14 = L"system32\\lsass.exe";
  v15 = L"system32\\wininit.exe";
  v16 = L"system32\\logonui.exe";
  v17 = L"system32\\services.exe";
  v18 = L"system32\\winlogon.exe";
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
28.12.2021, 17:39  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
жестко вшитый
Жёстко вшитый? Я такого не ожидал от Microsoft. Жёсткий список это первое что приходило на ум конечно, но я думал есть определённые пометки внутри процессов.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
28.12.2021, 17:47
Цитата Сообщение от HackerVlad Посмотреть сообщение
Жёстко вшитый? Я такого не ожидал от Microsoft. Жёсткий список это первое что приходило на ум конечно, но я думал есть определённые пометки внутри процессов.
Ну вот так как-то :
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2021, 17:47

Драйвер для защиты процесса
Пример: http://delphiexpert.ru/isxodnik-drajver-dlya-perexvata-zaversheniya-proczessa-s-primerom.html Это для Win XP а на 7 не работает!...

Защита книги макросом. Разный уровень защиты на листах. Как реализовать?
Всем здравствуйте! Прошу помочь с решением следующей задачи: Есть данный макрос, который вставлен в модуль Эта книга Private Sub...

Связь процесса-родителя и процесса-ребенка через pipe, используя для синхронизации семафоры
#include &lt;sys/types.h&gt; #include &lt;unistd.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int fd, result; size_t...

Создание процесса из программы для защиты основного от несанкционированного завершения
Решил написать для своей программы систему защиты от убийства процесса. Хочу создавать из программы процесс, который будет следить за...

Организуйте двустороннюю поочередную связь процесса-родителя и процесса-ребенка через pipe, используя для синх
/* Программа 05-3.с, осуществляющая однонаправленную связь через pipe между процессом-родителем и процессом-ребенком */ #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru