Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle? / 5 сообщений из 5, страница 1 из 1
18.03.2012, 11:19
    #37710422
ljnk0j
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle?
Решил, для интереса, проверить, все ли процессы показываются в Диспетчере.

Код
Код: php
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.
; 
DWORD WINAPI GetProcessImageFileNameA(HANDLE,LPSTR,DWORD);
(def-call-out get-image-name
			(:name "GetProcessImageFileNameA") (:library "psapi.dll")
			(:arguments 
			    (process-handle handle) 
				(name (c-ptr (c-array-max character #.win32:MAX_PATH)) :out :alloca)
				(sz dword)
			)
			(:return-type dword)
			(:language :stdc))			
			
(defun image-name (pid)
	"Returns an image name for specified pid"
	(let ((ph nil) (rv nil))
		(setq ph (win32:OpenProcess 1024 nil pid))
		(when ph (multiple-value-bind (sz nm) (get-image-name ph 300) (win32:CloseHandle ph) (setq rv nm)))
		rv
		))
	
(setq +maxpid+ 10000)
(setq +minpid+ 100) 
	
(defun enum-pids (pname)
	"Returns a list of PIDs matchin passed name or nil"
	(let ((rl (list)))
		(do ((pid +minpid+ (+ pid 1))) ((>= pid +maxpid+))
		(let ((nm (image-name pid)))
			(when (search pname nm :test #'char-equal) (push (cons pid nm) rl))
		))rl))



Вывод

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
> (enum-pids "Far.exe")
((3771 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (3770 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (3769 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (3768 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (2819 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (2818 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (2817 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe")
 (2816 . "\\Device\\HarddiskVolume2\\Program Files\\Far\\Far.exe"))



Реально Фаров только 2, и это показывает EnumProcesses на C++, но, тем не менее, операционка открывает и считает валидными Pid'ы ещё трёх процессов, которые, очевидно, как-то связаны с первыми двумя, и которые EnumProcesses не возвращает.

Что это за лишние процессы и почему винда из скрывает?

Понятно, что их число равно количеству ядер, наверное, но где про это можно почитать в официальной документации?
...
Рейтинг: 0 / 0
18.03.2012, 12:00
    #37710435
неТолик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle?
а procexp видит эти процессы ?
...
Рейтинг: 0 / 0
18.03.2012, 13:15
    #37710459
ljnk0j
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle?
неТолик,

Нет, он только видит самые первые из задубливающихся 3768 и 2816. Он тоже использует psapi!EnumProcesses для получения списка pid'ов. То есть, дубли скрываются специально виндовым API, но они, тем не менее, существуют, для каких-то целей, потому что хендлы для них возвращаются.
...
Рейтинг: 0 / 0
18.03.2012, 14:10
    #37710500
неТолик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle?
ljnk0j,

Толик в программировании шарит не слабо, счас придёт разрулит.
...
Рейтинг: 0 / 0
18.03.2012, 15:56
    #37710563
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle?
А что ProcessExplorer показывает для файловых потоков в этих процессах?
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / А почему EnumProcess возвращает меньше процессов чем цикл по OpenProcessHandle? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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