Привет всем! Есть драйвер-фильтр и GUI модуль, который выводит собранную драйвером информацию (о процессах) юзеру на экран. При работе нескольких пользователей каждому из них нужно выводит инфу только о принадлежащем ему процессе Первое, что приходит в голову сравнивать номера сессий процесса и пользователей Но как быть со службами и прочими процессами стартующими еще до того, как кто либо залогинится? Номера сессии у служб всегда будет разные, в зависимости от первого вошедшего пользователя (( И кому слать сообщения? всем? или назначить пользователя "админа" делать вывод только ему Никто не знает, как подобный механизм реализован например в файрволах, том же касперском или оутпосте (обучающий режим), у меня задача в принципе аналогичная. На касперском не пробовал проверять, а вот оутпост вообще некорректно работает при переключении пользователей ((( проверить не смог, система зависает при переключении.
Службы всегда выполняются в нулевой сессии. В преВиста системах первый залогинившийся юзер также работает в сессии номер ноль.
Partner То есть в висте, для служб сделали отдельную сессию?, ну тогда уже проще, а вот в 2k, xp придется как-то распознавать процессы стартовавшие до входа пользователей ((( Есть какие-нибудь предложения насчет этого?
Да. Для XP можно попробовать WTSEnumerateProcesses. Для W2K можно достать имя юзера через токен процесса. OpenProcessToken GetTokenInformation(TokenUser) // здесь получаем SID юзера. LookupAccountSid // по сиду получаем имя юзера.
То есть ты предлагаешь узнать имя пользователя запустившего процесс, если это SYSTEM, NETWORK SERVICE, LOCAL SERVICE, то значит процесс является сервисом
Можно и так, но нужно учитывать что эти имена могут быть локализованы. Проще сравнивать с именем текущего юзера.