Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вызов из Kernel mode API-функции UserMode  (Прочитано 20537 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« : 09-03-2017 16:30 » 

Можно ли как-нибудь вызвать из Kernel mode API-функцию UserMode?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-03-2017 21:11 » 

кое что говорят можно, но это совсем нештатный путь. и будет зависеть от версии ОС.
лучше вызывать через промежуточные приложения/сервисы.

подробнее тут вроде описывают)
Implementation of GetProcAddress and GetModuleHandle for Windows NT3.51/NT4/2000/XP/2003/Vista/7/8 kernel mode, both 32 and 64 bit platforms
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 09-03-2017 22:27 » 

Тогда ладно) В автозагрузку приложение буду ставить. Оно будет считывать данные из HKEY_CURRENT_USER реестра, передавать их в драйвер и закрываться)
Записан
zubr
Гость
« Ответ #3 : 10-03-2017 04:29 » 

Так реестр можно прекрасно из ядра читать/писать, для этого не надо юзермодные функции использовать, есть ZWxxxx-функции для этого, причем документированы в WDK
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 10-03-2017 09:23 » 

Using the Registry in a Driver
в частности
Registry Key Object Routines

PS один нюанс. если загрузка драйвера происходит ранее чем пользователь зашел - то на что будет указывать CURRENT_USER?)
« Последнее редактирование: 10-03-2017 09:26 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 10-03-2017 18:03 » 

PS один нюанс. если загрузка драйвера происходит ранее чем пользователь зашел - то на что будет указывать CURRENT_USER?)
А это уже следующий вопрос) Как в драйвере отследить смену пользователя? Может есть какой-то специальный ioctl?
Записан
zubr
Гость
« Ответ #6 : 10-03-2017 19:05 » 

В автозагрузке драйвер загружает системный процесс, так что CURRENT_USER будет System.
А это уже следующий вопрос) Как в драйвере отследить смену пользователя? Может есть какой-то специальный ioctl?
Нет таких специальных ioctl. Как вариант, можно поставить нотификатор процессов и при открытии процесса проверять его SID.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 11-03-2017 13:13 » 

пользователей и их процессов может быть больше одного)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Гость
« Ответ #8 : 11-03-2017 17:01 » 

пользователей и их процессов может быть больше одного)
Так а в чем проблема? Если открывается процесс нужного пользователя (определили по SID его имя), то драйвер работает в контексте процесса этого пользователя, соответственно в данном случае вносим изменения в ветку реестра CURRENT_USER. Естественно, после чего устанавливаем флаг, означающий. что данная операция совершена, чтобы она впоследствии не повторялась при открытии другого процесса данного пользователя.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 11-03-2017 19:07 » 

эт смотря что драйверу надо делать)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 11-03-2017 23:37 » 

А может есть какое-то системное событие наподобии Firstwinlogoncheck в BaseNamedObject?
Драйверу надо свои настройки прочитать,  так как у каждого пользователя они свои
Записан
zubr
Гость
« Ответ #11 : 12-03-2017 04:13 » 

В реестре есть ветка HKEY_USERS, которая дублирует ветки CURRENT_USER для всех юзеров. Зная сид юзера, можно зайти в соответствующую ветку HKEY_USERS и выполнить необходимые изменения из драйвера.
Записан
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 12-03-2017 15:47 » 

пользователей и их процессов может быть больше одного)
Так а в чем проблема? Если открывается процесс нужного пользователя (определили по SID его имя), то драйвер работает в контексте процесса этого пользователя, соответственно в данном случае вносим изменения в ветку реестра CURRENT_USER. Естественно, после чего устанавливаем флаг, означающий. что данная операция совершена, чтобы она впоследствии не повторялась при открытии другого процесса данного пользователя.
А если в систему вошло сразу несколько пользователей и идёт простое переключение профиля и никаких новых процессов не создаётся?
Записан
zubr
Гость
« Ответ #13 : 12-03-2017 16:13 » 

А если в систему вошло сразу несколько пользователей и идёт простое переключение профиля и никаких новых процессов не создаётся?
А для чего делаются изменения в реестре? Как я понимаю, для процессов, ибо никто другой их читать/писать не может, даже если юзер сам хочет посмотреть значение в реестре, он открывает процесс regedit под текущим активным юзером. В нотификаторе же вызывается коллбек, когда процесс только создается, еще до загрузки модулей и потоков, то есть на этот момент процесс еще не может делать никаких действий с реестром и внесенные здесь изменения он соответственно получит.
Впрочем, постом выше я указал другой способ без нотификатора.
Ну, если хочется более сложный вариант, можно создать сервис, который будет отслеживать переключение пользователя и передавать это событие в драйвер.
Записан
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 12-03-2017 17:13 » 

Никто ничего никуда не пишет) драйвер из реестра читает свои настройки.
Записан
zubr
Гость
« Ответ #15 : 12-03-2017 17:38 » 

Ну так читай настройки нужного юзера из HKEY_USERS - в чем проблема?
« Последнее редактирование: 12-03-2017 17:42 от zubr » Записан
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 12-03-2017 18:44 » 

А если в систему вошло сразу несколько пользователей и идёт простое переключение профиля и никаких новых процессов не создаётся?
А для чего делаются изменения в реестре? Как я понимаю, для процессов
Настройки драйверу не для процессов, а для операций ввода/вывода производимых на DISPATCH_LEVEL, так что придётся наверно писать ещё какой-нибудь сервис как Вы сказали
Записан
zubr
Гость
« Ответ #17 : 12-03-2017 19:16 » 

Настройки драйверу не для процессов, а для операций ввода/вывода производимых на DISPATCH_LEVEL, так что придётся наверно писать ещё какой-нибудь сервис как Вы сказали
А что, настройки разные для разных юзеров?
Записан
Ллирик
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 12-03-2017 22:44 » 

А что, настройки разные для разных юзеров?
Вот именно. Хорошо, что я практически монопольно владею своим компом, а то бы другой пользователь согрешил бы с такими настройками моего драйвера)) а я без него, как без рук и думаю, что я далеко не один кому мог бы быть очень полезен мой драйвер
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines