Re[5]: Зачем создается winlogon.exe для каждого пользователя
От: Аноним  
Дата: 10.09.08 23:51
Оценка: :)
x64>>Да. Воспользуйся функцией DuplicateHandle(). Она создаст новый хендл на тот же самый объект (десктоп), но уже в таблице хендлов второго процесса. Значение нового хендла затем достаточно каким-либо образом передать второму процессу (например, через пайпы).
А>Видители, формально DuplicateHandle сработает, и в таблице хэндлов он конечно появиться. NT сделает свое дело исправно.
А>А вот заюзать хэндл тот процесс — не сможет, если он работает в другой сессии.
Поясню чтоб вы поэкспериментировав, не начали ломать голову почему и как оно работает:
CreateDesktop создает в таблице хэндлов хэндл на объект-заглушку. В котором есть несколько полей. Одно из них — ID сессии которой принадлежит объект, другое — указатель на win32k объект валидный _только_ в той сессии в которой он создан. И первое что делает какая нить NtUserSetThreadDesktop или NtUserBuildHwndList — проверяют что ID сессии совпадает с ID сессии текущего процесса, и посылают нах со статусом STATUS_INVALID_HANDLE если сессии разные. И правильно делают. Т.к. указатель на реальный объект в другой сессии — просто мусорный поинтер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.