Бесконечная загрузка Actions Ring в Logi Options+: как я пытался завести софт мыши, а нашёл конфликт .NET 10 и Intel CET
Недавно я обзавёлся новой мышью от Logitech, а именно навороченной Logitech MX Master 4 (к слову, это просто произведение искусства, если так можно скачать о компьютерной мыши). И, разумеется, сразу поставил официальное приложение Logi Options+ с сайта производителя. У большинства пользователей с ним наверняка всё работает из коробки, но мне «повезло» словить специфическую проблему, описания и тем более решения которой я не нашёл ни на одном профильном форуме или в ветках Reddit.
Базовые вещи вроде переназначения кнопок, настройки скорости курсора или калибровки колеса прокрутки завелись мгновенно и без единого вопроса.
Проблемы начались в тот момент, когда я решил настроить главную программную фишку — радиальное меню Actions Ring.
Выглядело это максимально странно: сам раздел настройки кольца открывался, но вместо списка действий на экране просто крутились бесконечные индикаторы загрузки. Причём не грузились даже базовые системные действия (System Actions), а стартовое окно бесконечно висело на этапе сканирования поддерживаемых программ. Периодически приложение выкидывало плашку "Oops something went wrong. Please wait while Logi Plugin Service is being restarted", а при попытке зайти во встроенный магазин плагинов просто писало "Oops! No internet connection" — хотя интернет на компьютере работал стабильно. Без подгрузки этих плагинов всё кольцо действий превращается в бесполезную тыкву.
Стандартные танцы с бубном и что у софта под капотом
Первым делом я пошёл по стандартным путям, которые обычно советуют в сети. Пробовал ставить программу через онлайн-установщик, качал полный офлайн-инсталлятор (спойлер: в офлайн-версии для корпоративного сегмента магазин плагинов вырезан в принципе), включал и выключал VPN в разных режимах, запускал установщики с правами администратора и без них. Полез в стандартную оснастку служб Windows (services.msc), чтобы перезапустить злополучную службу плагинов вручную — но там обнаружилась только основная служба Logi Options+, а никакой Logi Plugin Service в списке вообще не существовало.
Потратив пару часов на ковыряние внутренностей программы, сетевых подключений и системных логов, я наконец докопался до того, как это всё устроено под капотом и почему оно ломается.
Оказалось, что сама оболочка Logi Options+ — это по сути только красивый интерфейс и базовый драйвер (logioptionsplus_agent.exe). А вот вся логика работы Actions Ring, профилей для стороннего софта и магазина расширений крутится на отдельном движке LogiPluginService.exe, который лежит в C:\Program Files\Logi\LogiPluginService. Это переименованный движок компании Loupedeck, которую Logitech не так давно купила для развития своих консолей и кастомных меню. Несмотря на слово Service в названии, это не системная служба Windows, а обычное пользовательское приложение. Когда вы открываете настройки кольца, агент Options+ запускает LogiPluginService.exe в фоне и пытается связаться с ним внутри вашей же системы по локальному WebSocket-соединению (127.0.0.1).
И вот тут крылась первая зацепка: при открытии программы процесс LogiPluginService.exe появлялся в Диспетчере задач буквально на пару секунд, после чего бесследно исчезал. Проверка портов через netstat показала тишину — процесс даже не успевал открыть локальный порт для связи с интерфейсом, а в пользовательской папке AppData\Local\Logi\LogiPluginService не создавалось вообще никаких рабочих директорий с настройками, кроме сиротливой папки Logs. Из-за того, что фоновый движок умирал на старте, интерфейс Logi Options+ не получал от него ответа по локальной сети и по таймауту выдавал ту самую абсурдную ошибку об отсутствии подключения к интернету.
Где был зарыт камень
Разгадка нашлась, когда я открыл системный Журнал событий Windows (раздел Application) и логи самого установщика в папке installer_ca. Выяснилось, что каждую секунду при попытке запуска LogiPluginService.exe аварийно падал в модуле KERNELBASE.dll с фатальным кодом исключения 0x80131506 (COR_E_EXECUTIONENGINE — внутренняя критическая ошибка среды выполнения .NET). А в логе установки нашлась запись, где инсталлятор пытался зарегистрировать службу через консольную утилиту LogiPluginServiceTool.exe, но получал отлуп с текстом: Fatal error. Your Windows doesn't fully support CET. Please install all available Windows updates.
Чтобы понять, почему софт для мышки внезапно требует обновлений ядра Windows, нужно сложить вместе три компонента: железо от Intel, свежий рантайм .NET и конкретную сборку Windows 10.
Начиная с 11-го поколения процессоров Intel (Tiger Lake, Alder Lake и новее), в чипах появилась аппаратная технология защиты потока управления — Intel CET (Control-flow Enforcement Technology). Главная её часть для обычных программ называется теневым стеком (User-mode Shadow Stack). Если объяснять на пальцах, то при обычной работе программы адрес возврата из любой функции записывается в стандартный стек в оперативной памяти. Если в программе есть уязвимость, злоумышленник может перезаписать этот адрес и заставить программу выполнять чужой код. Когда включается Intel CET, процессор создаёт в защищённой области памяти второй, «теневой» стек, куда дублирует все адреса возврата. Обычными командами записи изменить его нельзя. При выходе из функции процессор аппаратно сверяет адреса в обоих стеках, и если они не совпадают — мгновенно убивает процесс.
Разработчики Logitech собрали свежую версию службы LogiPluginService на базе .NET 10.0.6 (библиотеки рантайма лежат прямо в папке программы). В современном .NET для всех собираемых .exe файлов по умолчанию включён флаг компоновщика /CETCOMPAT, который говорит операционной системе: «эта программа совместима с аппаратной защитой стека, включай для неё Intel CET». Когда я запускал софт на своём процессоре с поддержкой CET, Windows видела этот флаг и честно активировала теневой стек для LogiPluginService.exe.
Проблема в том, что у меня стоит ранняя ревизия Windows 10 21H2 (сборка 19044.1466). И как раз в ранних сборках 21H2 в самом ядре Windows был неприятный баг реализации этого самого CET: в момент, когда программа генерировала и обрабатывала внутренние исключения (при так называемой раскрутке стека), ядро ОС могло некорректно работать с теневым стеком. Позже Microsoft исправила это в накопительных обновлениях. А разработчики платформы .NET, зная об этом косяке ранних билдов Windows, вшили прямо в стартовый код движка (coreclr.dll) жёсткую проверку: при запуске любого приложения рантайм .NET 10 проверяет, активен ли для процесса режим CET. Если он активен, рантайм смотрит номер сборки Windows. И если видит старую неподпатченную ревизию ядра, он даже не пытается запускать саму программу — он превентивно «стреляет ей в голову», вызывая аварийное завершение 0x80131506 и выводя в консоль то самое сообщение про неполную поддержку CET.
Из-за этого во время установки Logi Options+ утилита регистрации LogiPluginServiceTool.exe молча падала в фоне, служба не регистрировалась в системе, а сам движок плагинов умирал в первые миллисекунды при каждом запуске.
Решение без переустановки Windows
Конечно, зная причину, проблему можно было бы решить в лоб — накатить все накопительные обновления Windows или вообще переустановить систему на более свежий образ. Но, во-первых, затевать глобальное обновление стабильно настроенной рабочей ОС ради софта для мышки — это слишком муторно, а во-вторых, стрелять из пушки по воробьям в таких вопросах в принципе неправильно.
Куда элегантнее решить проблему точечно. В Windows есть встроенный механизм политик снижения рисков (Process Mitigations / Image File Execution Options в реестре), который позволяет управлять функциями защиты для каждого конкретного исполняемого файла. Нам достаточно сказать ядру Windows, чтобы оно не включало аппаратный теневой стек (UserShadowStack) конкретно для .exe файлов службы плагинов Logitech. При запуске программы рантайм .NET 10 увидит, что CET для процесса не используется, пропустит проверку версии ядра Windows и спокойно запустит службу.
Делается это буквально в два шага без перезагрузки компьютера и переустановки системы. Открываем командную строку или PowerShell от имени администратора и выполняем команду, которая проходит по всем исполняемым файлам в папке LogiPluginService и отключает для них флаг UserShadowStack:
powershell -Command "Get-ChildItem 'C:\Program Files\Logi\LogiPluginService\*.exe' | ForEach-Object { Set-ProcessMitigation -Name $_.Name -Disable UserShadowStack }"
После того как мы сняли блокировку, нужно вручную выполнить ту самую регистрацию службы, которая свалилась с ошибкой во время первоначальной установки программы:
"C:\Program Files\Logi\LogiPluginService\LogiPluginServiceTool.exe" register
Остаётся только полностью закрыть Logi Options+ через Диспетчер задач (убив процессы агента) и запустить приложение заново. Вся глобальная защита Intel CET в вашей системе при этом остаётся нетронутой — мы отключили теневой стек исключительно для криво стартующего модуля плагинов. Сразу после перезапуска служба поднимается за секунду, создаёт все нужные конфиги в AppData, а Actions Ring и магазин плагинов начинают работать как часы.
Разумеется, эта инструкция нужна только тем, кто сидит на процессорах с поддержкой CET и старых ревизиях Windows 10, где этот баг проявляет себя во всей красе. Если у вас меню и плагины подгрузились сразу — вам повезло со сборкой системы, просто пользуйтесь в удовольствие.
Ну и в завершение, не могу не добавить фразу, которая как никогда к месту:
"Переустановка — оружие отчаявшихся. Настоящие технари заставляют код танцевать под свою дудку."
Создано Judge-Q-05 (Lut)
16.10.2026














