Программное изменение политик безопасности

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Программное изменение политик безопасности

Сообщение ger_kar » 29.04.2012 (Вс) 17:32

Вот понадобилось реализовать САБЖ. Само изменение не представляет особых трудностей, достаточно отмониторить изменения в реестре, которые производит стандартаня виндошная консоль и вносить программно аналогичные правки непосредственно в реестр. Но в отличии от стандартной консоли, внесенные изменения вступят в силу, лишь только после перезагрузки системы, либо после ReLogona, но необходимо, что-бы изменения применялись сразу, как в случае со стандарной консолью. В противном случае вся затея теряет смысл.
Вобщем приступил к исследованию этого вопроса, в процессе изучения которого выяснилось следующее:
Поиск на просторах интернета подсказал, что надо послать оконное сообщение WM_SETTINGCHANGE всем окнам верхнего уровня, т.е. в качестве хендла указать HWND_BROADCAST. Почитал MSDN на эту тему
MSDN писал(а):Приложения должны отправить WM_SETTINGCHANGE всем окнам верхнего уровня, когда они вносят изменения в параметры системы. (Это сообщение не может быть отправлено ​непосредственно в окно). Чтобы отправить сообщение WM_SETTINGCHANGE всем окнам верхнего уровня, используйте SendMessageTimeout функцию с параметром HWND установленым HWND_BROADCAST.

Кстати оказалось, что существуют два наименования одного и того же сообщения WM_SETTINGCHANGE и WM_WININICHANGE, а фактическое значение 0x001A.
Замечательно, про SendMessageTimeout тоже почитал
MSDN писал(а): LRESULT WINAPI SendMessageTimeout (
__in HWND HWND,
__in UINT Msg,
__in WPARAM WPARAM,
__in LPARAM LPARAM,
__in UINT fuFlags,
__in UINT uTimeout,
__out_opt PDWORD_PTR lpdwResult
);

Казалось бы все окей, надо отправить сообщение и дело с концом, но не тут то было, сообщения я отправлял и даже Spy++ показал, что они приходят на рабочий стол, но нифига ничего не срабатывает. Где может быть подвох?
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.04.2012 (Вс) 21:04

ger_kar писал(а):
MSDN писал(а):Приложения должны отправить WM_SETTINGCHANGE всем окнам верхнего уровня, когда они вносят изменения в параметры системы. (Это сообщение не может быть отправлено ​непосредственно в окно). Чтобы отправить сообщение WM_SETTINGCHANGE всем окнам верхнего уровня, используйте SendMessageTimeout функцию с параметром HWND установленым HWND_BROADCAST.

Что-то сомнительное это утверждение.
Я использовал это сообщение для отключения картинок в IE и посылал сообщение непосредственно контролу WebBrowser:
Код: Выделить всё
SendMessage(Web.Handle, WM_SETTINGCHANGE, 0, 0)
Всё работало.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 29.04.2012 (Вс) 21:17

А для изменения политик, какой контрол то уведомлять :)
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.04.2012 (Вс) 21:41

ger_kar писал(а):А для изменения политик, какой контрол то уведомлять :)

Я имел в виду фразу "Это сообщение не может быть отправлено ​непосредственно в окно".
Я бы попробовал послать через SendMessage с хендлом -1 (это HWND_BROADCAST). А если не получится, то чисто из любопытства поставил бы хендл 0 :D

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 29.04.2012 (Вс) 21:50

Qwertiy писал(а):Я имел в виду фразу "Это сообщение не может быть отправлено ​непосредственно в окно".
Да я это понял :) , но к моему случаю утверждение подходило, SendMessage и HWND_BROADCAST пробовал, кстати если смотреть в отладчике то консоль юзает как раз SendMessage, а не SendMessageTimeout, ноль попробую.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.04.2012 (Вс) 21:52

Попробуй:
Код: Выделить всё
SendMessage(-1, WM_SETTINGCHANGE, 1, "Policy")
SendMessage(-1, WM_SETTINGCHANGE, 0, "Policy")
SendMessage(-1, WM_SETTINGCHANGE, 0, 0)
SendMessage(-1, WM_SETTINGCHANGE, 1, 0)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.04.2012 (Пн) 12:57

Получилось что-нибудь?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 30.04.2012 (Пн) 22:19

Еще не пробовал, сегодня много срочной работы, завтра, а точнее уже сегодня, но днем поэкспериментирую
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 07.05.2012 (Пн) 17:19

Вот и появилось наконец-то время для экспериментов.
Qwertiy писал(а):Попробуй:Код:
SendMessage(-1, WM_SETTINGCHANGE, 1, "Policy")
SendMessage(-1, WM_SETTINGCHANGE, 0, "Policy")
SendMessage(-1, WM_SETTINGCHANGE, 0, 0)
SendMessage(-1, WM_SETTINGCHANGE, 1, 0)

Ничего из этого не помогло. Система так-же реагирует на посылку этих сообщений - как мертвый на припарку. Вобщем воз и ныне там.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 08.05.2012 (Вт) 7:34

Отладчик OllyDbg при установке бряка (точки с условием и записью в лог) на вызов функции SendMessageW выдает следующий лог, связанный с посылаемыми сообщениями и их параметрами. Лог получился приличный, поэтому из лога взял только сообщения WM_WININICHANGE, после // мои комментарии касающиеся класса окна, которому шлется сообщение, так как по голому хендлу это совсем не очевидно.
Получилась вот такая картина:
Код: Выделить всё
7E37929A  CALL to SendMessageW from comctl_1.773CC4F5
            hWnd = 2507F4 //#32770 (Dialog)"Общие"
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from comctl_1.773CC50E
            hWnd = 1107F0 //SysTabControl32
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from comctl_1.77445DC4
            hWnd = 307EC //AfxWnd42u
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from comctl_1.77445DC4
            hWnd = 307F2 //ToolbarWindow32
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from comctl_1.77445DC4
            hWnd = 307FA //ToolbarWindow32
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from comctl_1.77434F81
            hWnd = 16075E //tooltips_class32
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from comctl_1.77434F81
            hWnd = 16075E //tooltips_class32
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from mmc.010BB016
            hWnd = 2079E //DirectUIHWND
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from mmc.010BB016
            hWnd = 207AA //Edit
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
7E37929A  COND:
7E37929A  CALL to SendMessageW from mmc.010BB016
            hWnd = 207AC //msctls_updown32
            Message = WM_WININICHANGE
            wParam = 1
            Section = "Policy"
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 08.05.2012 (Вт) 18:15

Дополнительно выяснилось следующее:
Если поставить условную точку останова на функцию SendMessageWDword [ESP+8]==0000001A, которая срабатывает на сообщение WM_WININICHANGE, и на первом же останове проверить изменение политики, то оказывается, что политика уже применена. Т.е. Применение происходит еще до первого сообщения WM_WININICHANGE. Очевидно, что видимо надо посылать либо другое сообщение либо действовать вообще по другому, только вот вопрос как?
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.05.2012 (Вт) 21:20

ger_kar писал(а):Применение происходит еще до первого сообщения WM_WININICHANGE.

Хм... По идее, это сообщение как раз и должно сообщить всем, что политики изменены. А само изменение заключается в изменениях записей в реестре. Или я не прав? Или ты имеешь в виду что-то другое?

PS: А пробовал прибить проводник и запустить снова?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 08.05.2012 (Вт) 21:37

Qwertiy писал(а):Хм... По идее, это сообщение как раз и должно сообщить всем, что политики изменены.
Да, по идее так, но на практике это не работает.
Само изменение заключается в правке реестра. Перезапускать проводник не пробовал, но если перелогинится, то политики срабатывают. Кстати пробовал и такой вариант: Изменяю одну политику через реестр, а другую стандартно через консоль, нажимаю кнопку 'Применить' и вуаля! После этого действуют сразу две политики.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 08.05.2012 (Вт) 21:40

И еще если мониторить рабочий стол посредством Spy++, то видно, что посылаемые сообщения WM_WININICHANGE на него вполне приходят. Но вот загвостка в том, что на саму систему это никак не действует.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 23.05.2012 (Ср) 19:14

Опять вернулся к к попытке разрешить свою проблему в реализации сабжа, и снова день поисков был потрачен впустую. Еще раз прочитал справочную информацию относительно сообщения WM_WININICHANGE, и пришел к выводу, что данным сообщением уведомляется вовсе не система, а приложения, о том что в настройках системы произошли изменения. И данное сообщение может рассылаться либо системой либо другими приложениями, но о том что система реагирует именно на уведомления говорит тот факт, что можно сделать несколько изменений вручную, путем правки реестра, затем сделать одно изменение политики через стандартную консоль и после ее применения применяются сразу все изменения. Хотя конечно может это быть и функция, которая заставляет перечитывать значения реестра по новой. Вполне возможно что и для моей задачи есть функция наподобие SystemParametersInfo.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.05.2012 (Ср) 19:35

Ты Проводник перезапустить попробовал наконец?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 23.05.2012 (Ср) 19:51

Да пробовал, после запуска настройки применяются, но ведь это кривое решение перезапускать Explorer, хочу понять как это делается правильно.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 23.05.2012 (Ср) 19:56

Хотя сейчас только дошло, ведь применение политик после перезапуска Explorer говорит о том, что это его собственно и нужно уведомлять!
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.05.2012 (Ср) 20:00

ger_kar писал(а):Да пробовал, после запуска настройки применяются, но ведь это кривое решение перезапускать Explorer, хочу понять как это делается правильно.

NeoTweaker для применения некоторых параметров предлагал перезапустить Проводник. Не знаю, насколько оно кривое. Конечно Kill как-то вызывать не очень хочется, но можно поэкспериментировать с какими-то командами, от которых он сам закроется.

ger_kar писал(а):Хотя сейчас только дошло, ведь применение политик после перезапуска Explorer говорит о том, что это его собственно и нужно уведомлять!

Хм... Я думал, что это очевидно. Он же - оболочка Windows и параметры это его по сути :)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 24.05.2012 (Чт) 7:02

Qwertiy писал(а):Хм... Я думал, что это очевидно. Он же - оболочка Windows и параметры это его по сути
Ну не пошла мысль в этом направлении сразу, что тут поделать. И только погуляв по кругу, вокруг да около, решила и сюда заглянуть :)
Но перезапуск проводника мне кажется настолько кривым решением, что тогда от этой идеи лучше вообще отказаться, тут без Хакера и его знаний наверное никак не обойтись, потому как только он знает такие хитрости, про которые, кроме как у него в постах и почитать негде. Сухая справка в том же MSDN, по сравнению например с его постом на эту же тему вообще можно сказать неочём :)
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.05.2012 (Чт) 7:31

Что будет, если послать проводнику (только ему) сообщение о выключении компьютера? Или сообщение о необходимости завершиться в всязи с выключением компьютера, не помню точно что за сообщение, но думаю, принцип понятен.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 24.05.2012 (Чт) 22:15

Проблема решилась.
И решили ее функции, с банальнейшим для такого случая наименованием, вот они:
RefreshPolicy
RefreshPolicyEx

Объявляются так:
Код: Выделить всё
Public Declare Function RefreshPolicy Lib "userenv.dll" (ByVal bMachine As Long) As Long
Public Declare Function RefreshPolicyEx Lib "userenv.dll" (ByVal bMachine As Long, ByVal lOptions As Long) As Long


Вызываются соответственно так:
Код: Выделить всё
Dim lRes    As Long
lRes = RefreshPolicy(1&)
lRes = RefreshPolicyEx(1&, 1&)

Если политики правятся напрямую через реестр, то применять надо RefreshPolicyEx.
Все оказалось очень просто, но что-бы до этого дойти, пришлось изрядно потрудится над трассировкой консоли в отладчике.
Последний раз редактировалось ger_kar 25.05.2012 (Пт) 6:26, всего редактировалось 1 раз.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.05.2012 (Чт) 22:50

Изображение Изображение Изображение

00_035_bi.gif
Собственно смайлик
(5.33 Кб) Скачиваний: 965

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Программное изменение политик безопасности

Сообщение ger_kar » 27.06.2012 (Ср) 22:12

Вот еще нашел интересную информацию на тему политик
Бороться и искать, найти и перепрятать


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList