Для подписчиковНаверняка у тебя есть игровые девайсы с красивой RGB-подсветкой, но для ее настройки разработчики каждого бренда предлагают свой проприетарный софт. Сегодня разберем, как сделать свою утилиту для синхронизации цвета подсветки между устройствами.

Лучшие статьи квартала на бумаге
2 000 ₽
Заказать журнал
Полный доступ к статьям и архиву выпусков
6 000 ₽ в год
Подписаться
Совместный курс «Хакера» и лаборатории «Хаксет»
7 000 ₽
Купить курс
Лучшие статьи за 2021–2022 годы на бумаге
2 000 ₽
Заказать журналНаверняка у тебя есть игровые девайсы с красивой RGB-подсветкой, но для ее настройки разработчики каждого бренда предлагают свой проприетарный софт. Сегодня разберем, как сделать свою утилиту для синхронизации цвета подсветки между устройствами.
Возможно, ты уже сталкивался с тем, что программа для работы с подсветкой — это зачастую монструозное поделие, которое постоянно висит в фоне и отжирает драгоценную оперативку. Чтобы избавиться от этой зависимости, энтузиасты делают софт для управления подсветкой девайсов разных производителей. Такой софт легче фирменных утилит и позволяет настраивать и синхронизировать цвет подсветки всей твоей периферии.
Сегодня посмотрим, как управлять подсветкой и, при желании, другими параметрами — например, DPI мыши или назначением клавиш, — обращаясь напрямую к устройствам.
Работа с устройствами в WindowsВозиться с устройствами будем в Винде: в Razer, Logitech и других компаниях не выпускают официальный софт для настройки железа для Linux.
Чтобы записать информацию в устройство, его нужно открыть. Для этого есть функция CreateFile из библиотеки kernel32.dll (есть еще CreateFile2 и NtCreateFile, но их мы разбирать не будем). Да, в Windows с устройством можно работать как с файлом. Вызов функции выглядит так:
HANDLE CreateFileW(
[in] LPCWSTR lpFileName,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[in] DWORD dwCreationDisposition,
[in] DWORD dwFlagsAndAttributes,
[in, optional] HANDLE hTemplateFile
);
Буква W в конце имени функции Windows API значит, что она работает со строками в Юникоде, а A — со строками в ANSI. Для современной Винды Юникод — нативная кодировка, так что будем использовать именно его.
Подробно расписывать каждый параметр я не буду, отмечу только один нюанс: при открытии устройства с флагами GENERIC_READ | GENERIC_WRITE в параметре dwDesiredAccess может возникнуть ошибка доступа — ERROR_ACCESS_DENIED. Причина — монопольный доступ системных драйверов класса (например, kbdclass.sys или mouclass.sys), которые защищают устройства ввода от перехвата из пользовательского режима. Но если задать этому параметру значение 0, система позволит открыть устройство с доступом для опроса (Query Access). Этого хватит для отправки команд IOCTL с флагом FILE_ANY_ACCESS — подробнее о нем расскажу дальше.
IOCTL (Input/Output Control) — это системный механизм, который позволяет прикладным программам отправлять специальные команды и обмениваться данными напрямую с драйверами устройств и компонентами ядра операционной системы.

Итак, мы открыли устройство и получили его дескриптор (handle). Теперь нужно отправить устройству команду, чтобы изменить цвет. Тут есть несколько вариантов. Первый — вызвать функцию WriteFile из kernel32.dll.
BOOL WriteFile(
[in] HANDLE hFile,
[in] LPCVOID lpBuffer,
[in] DWORD nNumberOfBytesToWrite,
[out, optional] LPDWORD lpNumberOfBytesWritten,
[in, out, optional] LPOVERLAPPED lpOverlapped
);
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Как я настроил свой Android-смартфон для игр: что включить, а что — выключить | 0 | 6.75 | 26-09-2026 |
| 2 | Это база! Делаем свою сотовую сеть с шифрованием | 0 | 8.43 | 04-09-2026 |
| 3 | Best gaming monitor | 0 | 6.49 | 08-09-2026 |
| 4 | Не тканью единой. Как тифо превратился из баннера в инженерное чудо | 0 | 7.66 | 29-09-2026 |
| 5 | Какую тушь для ресниц выбрать: гид по видам, цветам и эффектам | 0 | 7.56 | 26-09-2026 |
| 6 | Как проснуться в темное утро без кофе: три рабочих способа | 0 | 8.1 | 27-09-2026 |
| 7 | Хайлайты на темных волосах: 8 красивых окрашиваний для шатенок и брюнеток | 0 | 11.77 | 25-09-2026 |
| 8 | Научно-технический реп - Тыж программист | 0 | 19.09 | 27-09-2026 |
| 9 | Алкогольное Право: Мифы об алкоголе в ресторанном бизнесе | 0 | 8.92 | 21-09-2026 |
| 10 | — Смотри, какие я тени нашла! Называются «Аврора», многохромные. Просто ... | 0 | 5.17 | 27-09-2026 |