Pull to refresh

Comments 16

Зачем запрещать «switch user»? Или речь про pre-Vista?
Мы не запрещали. Некоторые системы логона (например, по отпечатку пальца, или лого в сеть Novell) сами отключают «switch user».
Какие-то сферические костыли в вакууме. Зачем это всё?
У нас строго с безопасностью, экран должен блокироваться автоматически через 5 минут бездействия. С одной стороны есть задачи, которые должны выполняться более 5 минут без участия пользователя, т.е. нельзя сделать автологоф. С другой стороны, если один оператор покинет рабочее место (например, закончится его смена, но он уходя не завершит сеанс), другой должен иметь возможность войти в систему.
Ubuntu: i586-mingw32msvc-gcc -mwindows -s winexec.cpp -o winexec.scr -lshlwapi
Archlinux: i486-mingw32-gcc -mwindows -s winexec.cpp -o winexec.scr -lshlwapi

Может сложиться впечатление что скомпилить скринсейвер этот можно только будучи под линуксом :D Вы не ищите легкий путей.
Сделайте упоминание про очевидную компиляцию под виндой темже mingw, а то странно смотрится.
Я сам работаю в Linux и не совсем понял как нормально установить mingw под Windows. Там кажется много всего скачать нужно был и я не стал. Другие компиляторы я не пробовал.
В качестве заставки экрана использовал Winexit.scr, который доступен в Windows Server 2003 Resource Kit + административный шаблон для групповых политик.
Если это вас не устроило, то по какой причине?
Рассматривал как вариант, но не подошло:
— через групповые политики нет возможности сделать одни настройки самого скринсейвера для всех пользователей (я имею ввиду таймаут и «force»)
— можно настроить через ini-файл, но оказалось, что под непривилегированным пользователем эта настройка ведёт себя совершенно неадекватно
— и последнее препятствие появилось тогда, когда оказалось, что некоторые задачи должны были выполняться более пяти минут без присутствия пользователя
Попытаемся решить.

Настройки укажем в административном шаблоне:
;; Remember in GPMC to go View->Filtering
;; and uncheck "Only show policy settings that can be fully managed"
;;
;; David Carlin (djc6@case.edu) 2/25/2005
;; WINEXIT.SCR is located in the Windows Server 2003 Resource Kit

CLASS USER

CATEGORY !!Screen_Saver_Policy

POLICY !!TERMINATE_APPS
KEYNAME "Control Panel\Screen Saver.Logoff"
VALUENAME ForceLogoff
VALUEON "1" VALUEOFF "0"
END POLICY

POLICY !!COUNTDOWN_TIMEOUT
KEYNAME "Control Panel\Screen Saver.Logoff"
VALUENAME CountDownTimer
VALUEON "300"
END POLICY

POLICY !!ENTER_DIALOG_MESSAGE
KEYNAME "Control Panel\Screen Saver.Logoff"
PART !!ENTER_DIALOG_MESSAGE
EDITTEXT
DEFAULT !!DEFAULT_MESSAGE
VALUENAME DialogMessage
END PART
END POLICY

END CATEGORY

[strings]
Screen_Saver_Policy="Winexit.scr Policy settings"
TERMINATE_APPS="Terminate running applications"
COUNTDOWN_TIMEOUT="Enable 5 minute warning logoff notice"
ENTER_DIALOG_MESSAGE="Warning message about being logged off"
DEFAULT_MESSAGE="You are about to be logged out. Press the cancel button to stop this process."


Корректная работа под пользователем с ограниченными привилегиями (назначение привилегий на ветку регистра, файл GptTmpl.inf):
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Registry Keys]
"MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\control.ini",0,"D:PAR(A;CI;KA;;;BA)(A;CIIO;KA;;;CO)(A;OICI;DCLC;;;WD)(A;CI;KA;;;SY)(A;CI;KR;;;BU)"


Продолжительность задач относится к первому пункту (таймаут).
Бездействие со стороны пользователя приводит к завершению сеанса по окончании отсчета. При вмешательстве пользователя экран блокируется и необходима аутентификация для продолжения сеанса.
Все вышеуказанное использовалось на рабочих станциях демонстрационного зала по причине «хронического склероза» сотрудников, выпячивающих всю «военную мощь» предприятия перед потенциальными клиентами.
Шаблон я такой пробовал. Когда начались проблемы, начал экспериментировать напрямую с реестром, т.к. не мог никак разобраться в чём же дело. Уверены, что ваши пользователи не были админами?
Проблема в том, что у меня на разных машинах этот скринсеврер себя по разному вёл. На одних он использовал ini файл, на других реестр, при чём ключом IniFileMapping в реестре почему-то не удавалось изменить это поведение. На сколько я помню это проявлялось только там где пользователь было непривилегированным, но могу ошибаться, может и на всех.

> Бездействие со стороны пользователя приводит к завершению сеанса по окончании отсчета.
Заранее неизвестно сколько времени будет идти задача. Есть 20 минут, есть пол часа. Если таймаут сделать заведомо большой, а кнопка cancel не приводит к logout, то новый пользователь пришедший на компьютер не сможет в него войти до истечения таймаута.
В общем я возился с ним почти неделю, пока не зашёл в тупик с его нелогичным поведением. Исходников, естественно, я не нашёл, и не смог до конца понять как он работает. После этого начал писать своё.
Приведенная здесь конфигурация применена к рабочим станциям в среде Active Directory для пользовательских учетных записей с ограниченными привилегиями.
Если вам интересно, могу снова поэкспериментировать и рассказать вам о проблемах, которые я тогда нашёл, хотя, честно говоря, не очень хочется. К тому же Windows есть только на работе да и не на моей машине.
Специально этим вряд ли стоит заниматься, тем более при наличии собственного решения. Но «если вдруг», то попытайтесь задокументировать, интересно было бы ознакомиться.
Ок.
Будет время — проведу эксперименты и помониторю regmon-ом и filemon-ом, может разберусь что же там происходит.
Sign up to leave a comment.

Articles