Существует ли "интеллигентный" способ определить какой процесс является владельцем определенного handle? Или нужно нумеровать handles для всех процессов?
По разному, например перехватываю ZwClose, нужно узнать какой процесс открыл handle переданный в качестве аргумента (естественно, если handle был окрыт процессом а не драйвером).
Не трудно догадаться, что ты в этот момент оказываешься в контексте именно того процесса, который и открыл хэндл.
Не всегда, например некий процесс открыл handle, а закрывается он, скажем драйверм process explorer. Или закрыть handle можно только в том же контексте? Кстати, являются ли handles уникальными для всей системы или только для процесса?
Обычный хэндл уникален для процесса. Ядерный, соответсвенно, нет. ZwClose - да. Но можно и напрямую похимичить с таблицей хэндлов. Тогда нет.
Понятно, а как поступает ProcessExplorer? Переключается в контекст процесса и делает NtClose оттуда, или делает непосредственные модификации с таблицой handles процесса?