Почему сторонний перехват функции мешает hotpatch Windows

Hotpatch позволяет заменить подходящий код без обычной перезагрузки, но это не означает, что разные программы могут свободно переписывать одну точку входа. Механизм hotpatch в Windows рассчитан на контролируемый процесс обновления и подразумевает, что зарезервированная область функции остаётся под управлением системного механизма.

Один координатор изменений

Схема hotpatch рассчитана на применение обновлений системой обновления в поддерживаемой конфигурации. Обновление должно быть подготовлено для hotpatch, и сам механизм ожидает отсутствие посторонних модификаций в целевых участках кода. Самовольный detour или подмена функции сторонней программой нарушают это предположение и приводят к тому, что файл может быть признан непригодным для горячего обновления, что потребует обычной перезагрузки.

Если между этапом предварительной проверки и фактическим применением патча функция была изменена, возникает гонка, из-за которой корректное и безопасное применение hotpatch становится невозможным.

Почему не любой фикс подходит

Hotpatch заменяет код на уровне функций, но изменения раскладки памяти, ожиданий о состоянии объектов или инвариантов структуры данных могут оказаться несовместимы с уже созданными объектами в процессе. Простая подмена одной функции сторонним перехватом сама по себе не решает таких проблем и может повлечь неконсистентность в работе программы.

В итоге повторные системные обновления, координируемые операционной системой, и независимые сторонние модификации — это разные сценарии, требующие разных подходов к безопасности и совместимости. Механизм hotpatch предназначен для контролируемого применения исправлений и не предусматривает совместного использования зарезервированной области несколькими независимыми патчерами.