Получить информацию о подключенных устройствах на C#

Получить информацию подключенные устройства C#

В предыдущей статье мы рассказывали про скрытую запись с веб-камеры на C#. Сегодня поговорим про получение информации о подключенных устройствах на C#.

Еще по теме: Программа для прослушки помещения на C#

Получение информации о подключенных устройствах на C#

К целево­му компь­юте­ру могут быть под­клю­чены раз­ные устрой­ства: флеш­ки, телефо­ны, мыш­ки, кла­виату­ры. Для работы с устрой­ства­ми сущес­тву­ет целый класс API.

Нап­ример, великий Павел Йоси­фович в сво­ей кни­ге Windows 10 System Programming Part 1 на стра­нице 540 демонс­три­рует фун­кцию DisplayDevices(). С ее помощью воз­можно перечис­лить под­клю­чен­ные устрой­ства.

Вы­вод информа­ции об устрой­ствах
Вы­вод информа­ции об устрой­ствах

Что уж тут говорить, для одной толь­ко батареи в Windows есть отдель­ный API — GetSystemPowerStatus().

Ин­форма­ция о батарее
Ин­форма­ция о батарее

Кста­ти, мож­но зло­упот­реблять Windows Power Management API: реали­зовать необыч­ный метод пер­систа, при котором наш код будет исполнять­ся при вклю­чении или отклю­чения дис­плея. Под­робно мож­но почитать в этом ресер­че VXUG.

Ес­ли опус­кать­ся чуть ниже, то основное вза­имо­дей­ствие с любым устрой­ством про­исхо­дит через API DeviceIoControl().

За­тык может про­изой­ти уже на вто­ром аргу­мен­те — dwIoControlCode. Для каж­дого устрой­ства могут быть уста­нов­лены собс­твен­ные управля­ющие коды, что нес­коль­ко усложня­ет про­цесс раз­работ­ки.

Тем не менее сущес­тву­ет нес­коль­ко средств, которые помогут разоб­рать­ся с устрой­ства­ми по API. Рекомен­дую обра­тить вни­мание на DevCon. Это пол­ноцен­ная боль­шая прог­рамма, которая поз­воля­ет извле­кать информа­цию об устрой­ствах и управлять ими.

Впро­чем, для сле­жения нам дос­таточ­но лишь вов­ремя получать информа­цию о под­клю­чении устрой­ства. Из C# в таком слу­чае про­ще обра­щать­ся к WMI. Я так сде­лал в про­екте USB-Monitor.

Там на помощь при­шел WqlEventQuery, с ним мы можем зарегис­три­ровать кол­бэк, который будет выз­ван при под­клю­чении нового USB-устрой­ства.

Даль­ше дело за малым — нуж­но, исхо­дя из поля Service, опре­делить, какое устрой­ство вста­вили. В слу­чае флеш­ки будет стро­ка USBSTOR, затем нуж­но кон­верти­ровать наз­вание физичес­кого дис­ка ( \\.\PHYSICALDRIVE) в при­выч­ную бук­ву ( E:), а потом прос­то вывес­ти содер­жимое пап­ки, что­бы уви­деть инте­рес­ные фай­лы на флеш­ке.

На C++ мож­но обра­баты­вать раз­личные сооб­щения WM_DEVICE, но для это­го тре­бует­ся соз­давать окон­ное при­ложе­ние, что нам не очень под­ходит.

Спасибо, Михаил!

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий