Я должен сделать программу, которая контролирует порты USB и когда USB-устройство подключено (джойстик, флеш-накопители, мышь, ecc...) Я получаю уникальный идентификатор (deviceid или что-то еще будет хорошо).
Сначала я попытался с помощью С# использовать классы system.management и каждый раз запрашивать класс cim_logicaldevice, чтобы подключить новое устройство. Некоторое устройство вернуло больше строк с DeviceID, но это не проблема. Проблема в том, что память, занимаемая программой (в диспетчере задач), постоянно растет. Это исходный код:
http://pastebin.com/dQv3cMQC
Есть ли способ избежать роста использования памяти?
Я должен сделать эту программу в C++ или С#, и она должна быть максимально эффективной (потому что ее нужно открывать навсегда).
Я бы рекомендовал посмотреть образец USBView в WDK. Если вы не знакомы с этим, просто запустите его - этот инструмент просматривает все дерево USB в системе и распечатывает информацию и списки дескрипторов для каждого устройства.
В вашем случае я бы начал с функции RefreshTree() в этом примере, затем вы можете следовать этому коду, чтобы узнать, как он перечисляет контроллеры, концентраторы и, наконец, устройства. Для каждого найденного устройства вы можете посмотреть на bInterfaceClass в дескрипторах интерфейса, чтобы узнать, какие типы интерфейсов он рекламирует.
Самый простой способ получить исходный код этого примера - установить 7.1.0 WDK, который в настоящее время доступен здесь: http://www.microsoft.com/en-us/download/details.aspx?id=11800