Вывод информации

Тема в разделе "WASM.WIN32", создана пользователем GLEB, 6 сен 2009.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Привет всем!

    Есть драйвер-фильтр и GUI модуль, который выводит собранную драйвером информацию (о процессах) юзеру на экран.
    При работе нескольких пользователей каждому из них нужно выводит инфу только о принадлежащем ему процессе
    Первое, что приходит в голову сравнивать номера сессий процесса и пользователей
    Но как быть со службами и прочими процессами стартующими еще до того, как кто либо залогинится?
    Номера сессии у служб всегда будет разные, в зависимости от первого вошедшего пользователя ((
    И кому слать сообщения? всем? или назначить пользователя "админа" делать вывод только ему
    Никто не знает, как подобный механизм реализован например в файрволах, том же касперском или оутпосте (обучающий режим), у меня задача в принципе аналогичная.
    На касперском не пробовал проверять, а вот оутпост вообще некорректно работает при переключении пользователей ((( проверить не смог, система зависает при переключении.
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Службы всегда выполняются в нулевой сессии. В преВиста системах первый залогинившийся юзер также работает в сессии номер ноль.
     
  3. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Partner
    То есть в висте, для служб сделали отдельную сессию?, ну тогда уже проще, а вот в 2k, xp придется как-то распознавать процессы стартовавшие до входа пользователей (((

    Есть какие-нибудь предложения насчет этого?
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Да.

    Для XP можно попробовать WTSEnumerateProcesses.

    Для W2K можно достать имя юзера через токен процесса.
    OpenProcessToken
    GetTokenInformation(TokenUser) // здесь получаем SID юзера.
    LookupAccountSid // по сиду получаем имя юзера.
     
  5. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    То есть ты предлагаешь узнать имя пользователя запустившего процесс, если это SYSTEM, NETWORK SERVICE, LOCAL SERVICE, то значит процесс является сервисом
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Можно и так, но нужно учитывать что эти имена могут быть локализованы.
    Проще сравнивать с именем текущего юзера.