Windows: Отключаем пробуждение компьютера (часть 4)

Третья «серия» здесь.
Поскольку вчера днем отправленный спать комп снова сам проснулся, я решил поискать причины.

Наткнулся на эту эту статью:

C:\Windows\system32>powercfg -waketimers
Timer set by [PROCESS] Legacy Kernel Caller expires at 21:45:55 on Ср, 12/12/18.
  Reason:

Попробовал отключить:

powercfg -requestsoverride Driver "Legacy Kernel Caller" System

Не помогло.

Посмотрел список задач, которые будят комп, там вообще ничего похожего не было:

PS C:\Windows\system32> Get-ScheduledTask | where {$_.settings.waketorun}

TaskPath                                       TaskName                          State
--------                                       --------                          -----
\Microsoft\Windows\.NET Framework\             .NET Framework NGEN v4.0.30319... Ready
\Microsoft\Windows\.NET Framework\             .NET Framework NGEN v4.0.30319... Ready
\Microsoft\Windows\SharedPC\                   Account Cleanup                   Disabled

При этом, если открыть Task Scheduler в оснастке Управления компьютером, то у этих задач галочка НЕ установлена!

Оказалось, что и в этот раз причина была все в том же \Microsoft\Windows\UpdateOrchestrator\Reboot. После очередной установки обновлений Windows вернул этой задаче возможность будить комп. И хотя в этой задаче галочка также была не установлена, тем не менее задача отработала 15.12.18 в 17:16 и успешно разбудила комп!

Оказывается, эта задача активируется каждый раз после установки обновлений!

Попробовал написать скрипт PreventWakeUp.ps1:

icacls $env:windir"\System32\Tasks\Microsoft\Windows\UpdateOrchestrator\Reboot" `
/inheritance:r `
/deny "Everyone:F" `
/deny "SYSTEM:F" `
/deny "Local Service:F" `
/deny "Administrators:F"

Write-EventLog –LogName System –Source "Microsoft-Windows-TaskScheduler" –EntryType Warning –EventID 102 –Message "<Prevent Wake up> has finished working"

Сначала поместил его в планировщик на задачу, которая запускает этот скрипт при появлении в EventLog события перехода компьютера в спящий режим. Но это не сработало. Скорее всего комп засыпал раньше, чем срабатывала задача Планировщика.
Тогда я поместил скрипт в групповые политики Shutdown:
gpedit.msc -> Computer Configuration -> Windows Settings -> Scripts (Startup/Shutdown) -> Shutdown -> PowerShell Scripts

Теперь в Журнале событий можно было увидеть запись от источника TaskScheduler.

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

Таким образом, через групповые политики скрипт отработал.

Если через политики не хочется, то можно запихнуть выполнение скрипта в Планировщик на событие Входа в систему. Но в этом случае после установки обновлений нужно не сразу выключить комп, а сначала его перезагрузить, а потом зайти в сеанс пользователя (чтобы отработал скрипт) и только потом выключить или перевести комп в режим гибернации.

В моем случае в Журнале была такая запись: «Wake Source: Unknown», а комп все равно продолжал просыпаться даже при отключении всех видимых и невидимых источников, т.е. причиной не был UpdateOrchestrator. Я заглянул в BIOS материнки ASUS P8B75-V. Там у меня было также отключено всё в разделе Advanced\APM. Однако я нашел ещё одну настройку Advanced\AMT Configuration\Intel AMT:

Wake-on-LAN позволяет будить комп, если на сетевую карту посылается так называемый «magic packet«, возможно здесь используется подобная технология. Сейчас я эту функцию отключил, надеюсь комп больше не будет просыпаться сам по себе…