Продукты «Хакера»

  • Ежеквартальный «Хакер» #3

    Ежеквартальный «Хакер» #3

    Лучшие статьи квартала на бумаге

    2 000 ₽

    Заказать журнал
  • Годовая подписка на Xakep.ru

    Годовая подписка на Xakep.ru

    Полный доступ к статьям и архиву выпусков

    6 000 ₽ в год

    Подписаться
  • «Пентест WEB» для начинающих

    «Пентест WEB» для начинающих

    Совместный курс «Хакера» и лаборатории «Хаксет»

    7 000 ₽

    Купить курс
  • Спецвыпуск «Хакера» #4

    Спецвыпуск «Хакера» #4

    Лучшие статьи за 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 — под­робнее о нем рас­ска­жу даль­ше.

info

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, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии