Win создание сайтов

Наконец-то, после долгого перерыва на блоге программистов, новая статья! Win создание сайтов данной статье я расскажу про работу с устройствами в системах Windows NT. Конкретно я расскажу про то, как можно получить список устройств, отключение и включение устройств, безопасное извлечение устройства. Функции, которые осуществляют работу с устройствами, находятся в системных библиотеках cfgmgr32.

К сожалению, в стандартных заголовочных файлах Delphi нет объявлений функций, констант и структур которые используются этими библиотеками. Эти заголовочные файлы можно скачать с сайта проекта Delphi-JEDI. Те, кому не нравятся модули от проекта Delphi-JEDI могут воспользоваться моим модулем setupapi. Первая задача, с которой мы столкнёмся это получение списка устройств.

Устройства в системе подразделяются на классы, например: класс видеоустройств, принтеров, модемы, клавиатуры и т. Любое устройство должно принадлежать как-нибудь классу. Для получения полного списка устройств сначала надо получить список классов. Для перечисления всех классов мы должны в цикле вызывать функцию, начиная с индекса 0. Если функция вернула значение CR_NO_SUCH_VALUE, значит, мы пришли к концу списка. Вторым параметром должен быть указатель на переменную TGUID, в которую будет сохранён GUID класса. Вторым параметром должен идти указатель на буфер, в который будет сохранена строка с именем класса.

Третьим параметром должен идти размер передаваемого буфера. Если указанного буфера не хватит, то требуемый размер будет сохранён в переменной указатель, на которую мы передадим четвёртым параметром. Теперь нам надо получить список устройств, принадлежащих некоторому классу. У этой функции почти все параметры опциональны за исключением последнего.

Первый параметр задаёт класс устройств для перечисления. Если этот параметр равен нулю, то перечисляться будут все устройства в системе. Будет возвращён список всех устройств и всех классов, установленных в данный момент в системе. Возврат списка устройств, которые поддерживают интерфейсы. Возврат списка устройств, которые ассоциируются с системой по умолчанию. Будет возвращён список устройств, которые в настоящее время присутствуют в системе.

Будет возвращён список устройств, которые являются частью текущего аппаратного профиля. В нашем случае надо указать только класс устройств и указать последним параметром флаг DIGCF_PRESENT. При успешном вызове функция возвращает хендл полученного списка. С первых параметром, я думаю, всё ясно. Второй парметр задаёт индекс в списке. Третий параметр это указатель на структуру SP_DEVINFO_DATA, в которой будет сохранена информация об устройстве.

Если функция вернула значение TRUE, то информация извлечена успешно, а если FALSE, то в большинстве случаев это означает что мы пришли к концу списка. Второй параметр это указатель на структуру SP_DEVINFO_DATA. Третий параметр задаёт тип информации, которую мы хотим получить. Для нас важны два флага: SPDRP_FRIENDLYNAME и SPDRP_DEVICEDESC. Далее идёт опциональный параметр который задаёт указатель на переменную в которой будет сохранён тип данных ключа реестра, из которого была извлечена информация. Следующая функция получает имя устройства по хендлу перечисления и структуре SP_DEVINFO_DATA.

В итоге у нас вырисовывается функция, которая получает список устройств по заданному GUID’у класса. Сначала формируется список строк с имена классов и указателей на их GUID’ы. Потом производится вызов предыдущей функции для каждого класса. С первыми двумя параметрами я думаю всё ясно. Третий параметр задаёт указатель на структуру SP_CLASSINSTALL_HEADER.

Четвёртый параметр задаёт размер третьего параметра. С помощью этой функции можно производить различные действия с устройствами и, разумеется, для каждого действия используются различные структуры. Если поле Scope равно DICS_FLAG_GLOBAL, то изменения вступят в силу для всех аппаратных профилей, если DICS_FLAG_CONFIGSPECIFIC, то изменения вступят в силу только для указанного аппаратного профиля. Все параметры нуждаются в утверждении перед любыми изменениями. После изменения состояния устройства надо вызвать установщик класса, т. Первый параметр задаёт код произведённой операции. Два остальных параметра я думаю, проблем не вызовут.