w0a змінює налаштування Windows — значення реєстру, плани живлення, виклики драйверів. Вона нічого не пише на рівні ядра, не ставить власного драйвера, не інжектує код в ігри й не читає ігрової пам’яті. Кожна зміна реєстру чи плану живлення записується разом із попереднім значенням і відкочується одним кліком.
Три кроки
1. Запусти. Інсталятора немає: один виконуваний файл, права кнопка, «Запустити від імені адміністратора». Права адміністратора потрібні, бо змінювані налаштування діють на всю машину — процес рівня користувача їх записати не може.
2. Спочатку виміряй. Відкрий «Бенчмарк», пограй хвилину-дві на тій самій карті й зроби запис до того, як щось міняти. Саме цей крок люди пропускають — і саме тому в цій темі стільки фольклору.
3. Застосуй і виміряй ще раз. Увімкни, що хочеш — по одному перемикачу, якщо хочеш знати, який що дав, — і зроби другий запис на тій самій сцені з тими самими налаштуваннями в грі.
Як насправді працює відкат
Перед записом значення старе зчитується й додається до журналу в %ProgramData%\w0a\backup.json разом із ключем, ім’ям значення, його типом і позначкою, чи існувало воно взагалі. Записи групуються в контрольні точки, і відкат до однієї з них — це повернення в той момент, а не вибіркове скасування: кожна зміна, зроблена після неї — разом із пізнішими контрольними точками, — відкочується теж, і саме це говорить підтвердження, перш ніж усе почнеться.
Журнал живе в %ProgramData%, а не у твоєму профілі користувача, бо відкат виконується з підвищеними правами і бере інструкції саме з цього файлу. З тієї ж причини файл — не довільний скрипт: відкотити можна лише шляхи з дозвільного списку, вкомпільованого в застосунок, тож підроблений журнал не змусить записати щось туди, куди не слід.
Сторінка Fix — друга половина, і від журналу вона не залежить узагалі. Майже кожна картка безумовно повертає типове значення Windows — тож машину можна полагодити, навіть якщо w0a її ніколи не торкалася, журнал видалено або значення змінило щось інше. Єдиний виняток — картка CS2: параметри запуску й autoexec — це твої власні файли, і типового значення Windows, яке можна було б відновити, у них немає, тож ця картка повертає копії .w0a.bak, зроблені w0a, і не робить нічого взагалі, якщо їх немає. Саме тому сторінці Fix дозволено видаляти значення, які решті застосунку писати не можна.
Повна процедура відкату, крок за кроком
Що вона відмовляється робити — і чому
Жодних значень рівня ядра. Ключі рівня ядра — paging executive, large system cache, використання пам’яті NTFS, запити роздільної здатності таймера — відхиляються одразу, а тест у збірці падає, якщо такий колись додадуть. Сторінка Fix зберігає право видаляти три з них — paging executive, використання пам’яті NTFS і запити роздільної здатності таймера, — бо стару інсталяцію від якогось іншого інструмента треба вміти полагодити. Large system cache відхиляється й на тому лишається: він ніколи не записується і не видаляється теж.
Жодних ключів MPO чи TDR. Режим тесту оверлеїв, вимкнення оверлеїв, затримка TDR і рівень TDR не записуються. На реальній машині вони заморожували CS2, а сторінка реєстру повертає TdrDelay назад до типового значення Windows, замість його підвищувати.
Жодної інжекції, жодної ігрової пам’яті. Нічого не завантажується в ігровий процес і ніщо його не читає. Записуються три ігрові файли й жодного більше: конфіг CS2 і параметри запуску Steam, які ти задаєш на сторінці «Параметри запуску», та файл відеоналаштувань CS2 на сторінці «Налаштування відео». Кожен із них, перш ніж його торкнуться, копіюється поруч у .w0a.bak. Обіцяти від імені жодного розробника античитів ми все одно не можемо — але жодної поведінки, яку вони шукають, у цієї програми немає.
Жодного власного драйвера. Температура CPU і таймінги RAM потребують читань ring-0, яких Windows не відкриває. Для них — і лише якщо ти це схвалиш — установлюється підписаний драйвер PawnIO: він читає і ніколи не пише. Відмовишся — ці два показники просто будуть недоступні.
Як вона вимірює
Час кадрів береться з власного потоку подій Windows. Без оверлею, без хука, без інжектованої DLL: споживаються ті самі події, які операційна система і так породжує, і перетворюються на середній FPS, 1% low і кількість затинань за хвилину. Число, яке важить, — 1% low: середнє може рости, а гра відчуватиметься гірше, і саме цей випадок одне-єдине середнє приховує.
Затримка вводу вимірюється з реального руху миші: інтервал звітів заміряється в міру їх надходження, тож показана частота опитування — та, яку пристрій справді видає, а не та, що написана на коробці. Поруч семплюється час DPC та ISR кожного драйвера на машині — саме це дозволяє відстежити затинання до драйвера-винуватця, а не вгадувати.
«До» і «після» йдуть парою. Результати зберігаються парами, і порівняння пропонується лише тоді, коли існують обидва записи. Число, яке нема з чим порівняти, нічого не доводить.
Порядок встановлення, що стоїть за стабільним 1% low, і як перевірити кожне число в ньому
Чому вона замовкає під час матчу
Зчитування графічного сенсора бере блокування всередині графічного ядра. Опитування кожні дві секунди під час гри давало на реальній машині помітне затинання — інструмент, що обіцяв плавніші кадри, сам коштував кадрів. Тому питання не в тому, чи гра попереду, а в тому, чи вона взагалі запущена: альт-табнута гра однаково рендерить, і зчитування, зроблене, поки ти сидиш у браузері, коштує їй того самого блокування адаптера, що й посеред бою. Апаратне опитування зупиняється на весь час, поки гра відкрита, і відновлюється, коли вона закривається. Те саме правило діє для сканувань шин і обходів процесів.
Усе стартує вимкненим
На свіжій інсталяції всі фонові рушії вимкнені — підняття пріоритету, фонове балансування, зарезервовані ядра, стримування індексатора, запобіжник сну. Кожен — свідомий вибір, який робиш ти, кожен на своєму перемикачі, і кожен каже, що зробить, перед тим, як це зробити. Рушій, що провалив п’ять проходів поспіль, зупиняє себе і каже чому — замість тихо збоїти до кінця сесії.
Що не вимірюється і що не обіцяється
Скільки це все дасть — залежить від машини, гри та мережевого маршруту, і w0a не вдає протилежного. Ніде в продукті немає обіцянки «10x FPS». Мережеві зміни не покращать уже насичений маршрут; процесор, що вперся у свій ліміт потужності, не підніме частоту через зміну плану. Гарантія інструмента вужча, і її можна перевірити: він каже, що змінив, більше нічого не змінював і може повернути кожну з цих змін назад.