SYSTEM\CurrentControlSet\ENUM
SYSTEM\CurrentControlSet\Control\Class
Информация обо всём установленном оборудовании и его драйверах
Принцип хранения этой информации:
Все ключи в ключе ENUM - это перечислители. Всё, что находится в этих ключах (перечеслителях) - ID устройств. Ключи, которые находятся в ключах устройств - это коды ParentId, по которым определяется, к какому устройству подключено данное устройство:
"HKLM\SYSTEM\CurrentControlSet\ENUM\<Перечислитель>\<ID устройства>\<ParentId>"
Обратите внимание на ID PCI устройств: он "построен" так: VEN_Код производителя&DEV_Код устройства&Подсистемный идентификатор&REV_Номер ревизии
Параметры, находящиеся в ключе с кодом ParentId:
Пример: "DISPLAY\SAM021E\5&1cc2f65d&0&11335587&01&00" - монитор SAMSUNG SM206BW
5&1cc2f65d&0&11335587&01&00 - Это код ParentId
SAM021E - идентификатор устройства (считывается с самого устройства)
DISPLAY - Перечеслитель
Видеокарта (nVidia GeForce 7600):
"PCI\VEN_10DE&DEV_0391&SUBSYS_00000000&REV_A1\4&29dc82a&0&0008"
В ключе видеокарты есть параметр ParentIdPrefix со значением 5&1cc2f65d&0. Это значит, что все устройства, у которых ключ ParentId начинается на 5&1cc2f65d&0, считаются подключенными к этой видеокарте. Это правило распространяется на все устройства.
Тем не менее, наличие этих ключей и параметров - не причина, а следствие того, что Windows считает одно устройство подключенным к другому. То есть, если попытаться с помощью этих параметров и ключей "убедить" Windows в том, что этот монитор подключен к другой видеокарте, то почти ничего не получится. После перезагрузки Windows признает это устройство отключенным от системы и заново обнаружит его, тем самым снова создаст ключ с именем, начинающимся с ParentId видеокарты, к которой подключен монитор.
Однако, если монитор после этих манипуляций физически подключить к другой видеокарте (после того, как попытались "убедить" Windows в этом), то не будет никаких попыток поиска драйверов для этого устройства, поскольку вся информация о них в реестре уже есть. Именно поэтому поиск драйверов для флешки производится только при первом её подключении к одному из разъёмов и более не повторяется, если её подключать только к этому разъёму USB.
Параметры мониторов
Для ограничения разрешения и частоты обновления монитора в ключе MODES, который расположен по адресу HKLM\System\CurrentControlSet\Control\Class\**** ( **** - четырехзначный порядковый номер драйвера, например, 0002) необходимо создать ключ, в имени которого указать разрешение (пример имени ключа: 1600,1200). Если таких ключей несколько, то в качестве верхнего предела разрешения монитора будет выбрано максимальное из них. Чтобы ограничить частоту обновления, следует создать ключ Mode1 с параметрами минимальной и максимальной частот обновления экрана. Если таких диапазонов несколько, можно создать дополнительные ключи (Mode2, Mode3 и т.д., до 9).
Пример значения такого ключа:: 31.0-60.0,55.0-90.0,+,+
Здесь частоту обновления экрана ограничивают только последние 2 числа. Первые 2 задают допустимый диапазон строчной развертки. Назначение знаков +, + в данный момент мне неизвестно. Предположительно, последний из них определяет, использовать ли чересстрочный режим. Данные параметры добавляются при установке драйверов монитора от производителя. В драйверах современных мониторов последние 2 знака всегда равны +.
Обычно наличие этих параметров не требуются, поскольку монитор может сообщить видеокарте список поддерживаемых режимов. В таких случаях в диспетчере устройств он отображается как "Модуль подключения монитора", если не установлены драйвера от производителя. Однако, иногда (например, при использовании переходников из DVI в VGA) эти ограничения нужно устанавливать только с помощью этих ключей реестра, поскольку автоматически они не определяются (монитор отображается в диспетчере устройств как "Монитор по умолчанию", а при выборе частоты обновления экрана неактивен флажок "Скрыть режимы, которые монитор не может использовать")
Если вы используете переходник из DVI в VGA и вам нужно скрыть в списке выбора частоты обновления экрана так, чтобы эти ограничения применялись для всех мониторов, подключенных через переходник, тогда требуется изменить секцию Unknown.AddReg файла %SystemRoot%\monitor.inf. Необходимо заменить строку
HKR,"MODES\640,480"
на строку с наиболее универсальными ограничениями для большинства современных мониторов. Например, такая строка
HKR,"MODES\1280,1024",Mode1,,"30.0-60.0,60.0-75.0,+,+"
при установке драйвера "Монитор по умолчанию" приведёт к внесению изменений в реестр, которые ограничат частоту кадров до 75 Гц и частоту строчной развертки от 30 до 60 кГц.
Параметры дисковых устройств:
Расположены по адресу
IDE\<диск>\<ParentIdPrefix диска>\Device Parameters\Disk
SYSTEM\CurrentControlSet\Control\Class
Информация обо всём установленном оборудовании и его драйверах
Принцип хранения этой информации:
Все ключи в ключе ENUM - это перечислители. Всё, что находится в этих ключах (перечеслителях) - ID устройств. Ключи, которые находятся в ключах устройств - это коды ParentId, по которым определяется, к какому устройству подключено данное устройство:
"HKLM\SYSTEM\CurrentControlSet\ENUM\<Перечислитель>\<ID устройства>\<ParentId>"
Обратите внимание на ID PCI устройств: он "построен" так: VEN_Код производителя&DEV_Код устройства&Подсистемный идентификатор&REV_Номер ревизии
Параметры, находящиеся в ключе с кодом ParentId:
Имя | Описание |
---|---|
Capabilities | Характеристики устройства |
ConfigFlags | Конфигурация устройства |
Class | Класс, к которому данное устройство принадлежит |
ClassGUID | GUID-код класса, к которому данное устройства принадлежит |
DeviceDesc | Название устройства, которое мы видим в диспетчере устройств |
FriendlyName | То же самое, что и DeviceDesc, но имеет больший приоритет |
Driver | Ссылка на ключ с информацией о драйвере (по адресу HKLM\System\CurrentControlSet\Control\Class) |
HardwareID | Аппаратный ID устройства. Обычно это ссылка на ключ, в котором находится этот параметр |
Mfg | Производитель устройства |
ParentIdPrefix | Первые несколько символов из ParentID того устройства, которое подключено к данному |
Service | Ссылка на драйвер, прописанный по адресу HKLM\System\CurrentControlSet\Services\ |
Пример: "DISPLAY\SAM021E\5&1cc2f65d&0&11335587&01&00" - монитор SAMSUNG SM206BW
5&1cc2f65d&0&11335587&01&00 - Это код ParentId
SAM021E - идентификатор устройства (считывается с самого устройства)
DISPLAY - Перечеслитель
Видеокарта (nVidia GeForce 7600):
"PCI\VEN_10DE&DEV_0391&SUBSYS_00000000&REV_A1\4&29dc82a&0&0008"
В ключе видеокарты есть параметр ParentIdPrefix со значением 5&1cc2f65d&0. Это значит, что все устройства, у которых ключ ParentId начинается на 5&1cc2f65d&0, считаются подключенными к этой видеокарте. Это правило распространяется на все устройства.
Тем не менее, наличие этих ключей и параметров - не причина, а следствие того, что Windows считает одно устройство подключенным к другому. То есть, если попытаться с помощью этих параметров и ключей "убедить" Windows в том, что этот монитор подключен к другой видеокарте, то почти ничего не получится. После перезагрузки Windows признает это устройство отключенным от системы и заново обнаружит его, тем самым снова создаст ключ с именем, начинающимся с ParentId видеокарты, к которой подключен монитор.
Однако, если монитор после этих манипуляций физически подключить к другой видеокарте (после того, как попытались "убедить" Windows в этом), то не будет никаких попыток поиска драйверов для этого устройства, поскольку вся информация о них в реестре уже есть. Именно поэтому поиск драйверов для флешки производится только при первом её подключении к одному из разъёмов и более не повторяется, если её подключать только к этому разъёму USB.
Параметры мониторов
Для ограничения разрешения и частоты обновления монитора в ключе MODES, который расположен по адресу HKLM\System\CurrentControlSet\Control\Class\**** ( **** - четырехзначный порядковый номер драйвера, например, 0002) необходимо создать ключ, в имени которого указать разрешение (пример имени ключа: 1600,1200). Если таких ключей несколько, то в качестве верхнего предела разрешения монитора будет выбрано максимальное из них. Чтобы ограничить частоту обновления, следует создать ключ Mode1 с параметрами минимальной и максимальной частот обновления экрана. Если таких диапазонов несколько, можно создать дополнительные ключи (Mode2, Mode3 и т.д., до 9).
Пример значения такого ключа:: 31.0-60.0,55.0-90.0,+,+
Здесь частоту обновления экрана ограничивают только последние 2 числа. Первые 2 задают допустимый диапазон строчной развертки. Назначение знаков +, + в данный момент мне неизвестно. Предположительно, последний из них определяет, использовать ли чересстрочный режим. Данные параметры добавляются при установке драйверов монитора от производителя. В драйверах современных мониторов последние 2 знака всегда равны +.
Обычно наличие этих параметров не требуются, поскольку монитор может сообщить видеокарте список поддерживаемых режимов. В таких случаях в диспетчере устройств он отображается как "Модуль подключения монитора", если не установлены драйвера от производителя. Однако, иногда (например, при использовании переходников из DVI в VGA) эти ограничения нужно устанавливать только с помощью этих ключей реестра, поскольку автоматически они не определяются (монитор отображается в диспетчере устройств как "Монитор по умолчанию", а при выборе частоты обновления экрана неактивен флажок "Скрыть режимы, которые монитор не может использовать")
Если вы используете переходник из DVI в VGA и вам нужно скрыть в списке выбора частоты обновления экрана так, чтобы эти ограничения применялись для всех мониторов, подключенных через переходник, тогда требуется изменить секцию Unknown.AddReg файла %SystemRoot%\monitor.inf. Необходимо заменить строку
HKR,"MODES\640,480"
на строку с наиболее универсальными ограничениями для большинства современных мониторов. Например, такая строка
HKR,"MODES\1280,1024",Mode1,,"30.0-60.0,60.0-75.0,+,+"
при установке драйвера "Монитор по умолчанию" приведёт к внесению изменений в реестр, которые ограничат частоту кадров до 75 Гц и частоту строчной развертки от 30 до 60 кГц.
Параметры дисковых устройств:
Расположены по адресу
IDE\<диск>\<ParentIdPrefix диска>\Device Parameters\Disk
Имя | Описание |
---|---|
UserRemovalPolicy | Значение данного параметра изменяется при помощи переключателя между вариантами "Оптимизировать для выполнения" и "Оптимизировать для быстрого удаления" в свойствах диска |
UserWriteCacheSetting | Значение данного параметра изменяется при помощи флажка "разрешить кэширование записи на диск" в свойствах диска. |
CacheIsPowerProtected | Значение этого параметра изменяется при помощи флажка "включить повышенную производительность". Поддержка этой функции есть не на всех HDD. |