Я написал приложение для Windows, которое поставляется с двумя модулями: сервисное и пользовательское. Служба реализует свой собственный планировщик и может отключить пользователя в заранее установленное время. Для этого я использовал следующий вызов, который запускается из моего модуля пользовательского режима, работающего в сеансе вошедшего в систему пользователя, который должен быть отключен:
BOOL result = ExitWindowsEx(EWX_LOGOFF, reason);
Это работает нормально, за исключением ситуации, когда учетная запись пользователя заблокирована. В этом случае, похоже, что API вообще ничего не делает, даже если я вернул 1 из него.
Мне было любопытно, есть ли другой способ выйти из системы, когда его учетная запись заблокирована? (В этом случае у меня есть одно условие: если у этого пользователя были какие-либо несохраненные документы, выход из системы не должен быть принудительным.)
Попробуй это:
DWORD dFlags = EWX_LOGOFF | EWX_FORCE | 0x10200;
BOOL result = ExitWindowsEx(dFlags, reason);
Других решений пока нет …