Я видел два способа установки драйверов Windows.
a. Использование как файла SYS, так и файла INF. (например, драйвер NDIS)
b. Используйте только файл SYS, драйвер будет загружен службой. (например, драйверы в C: Windows System32 drivers)
Итак, мой вопрос:
1. Для каких драйверов или ситуаций требуется INF-файл?
2. В чем основная причина этой разницы?
В Windows существуют разные типы драйверов. У каждого типа драйвера есть своя история того, как драйвер устанавливается. Вот несколько распространенных типов драйверов.
Драйвер устройства PNP . Драйвер устройства PNP управляет устройством в дереве устройств. Драйверы PNP загружаются PNP, когда устройство перечисляется его родительской шиной. Чтобы PNP узнал, какой тип устройства поддерживает ваш драйвер (и множество других вещей), вам понадобится INF-файл в стиле PNP, который описывает ваш драйвер.
SCM- управляемый драйвер (иногда называемый «устаревшим драйвером»). SCM загружает эти драйверы на основе тех же правил, что и для запуска служб NT. SCM не требует INF. Вы можете зарегистрировать новый драйвер в SCM, просто запустив sc.exe create my_cool_driver type = kernel binPath = c: my driver.sys start = auto
или вызвав CreateService
API. Но если у вас уже есть INF по другим причинам, вы можете использовать любой стиль INF, чтобы сделать то же самое с помощью директивы AddService
.
Драйвер облегченного фильтра NDIS (LWF) . LWF не загружаются NDIS; NDIS не волнует, как они загружены. Большинство LWF загружаются с помощью SCM, так как этим легко управлять. Тем не менее, INF-файл в стиле NetCfg по-прежнему требуется, поскольку NDIS необходимо знать, к каким типам сетевых адаптеров присоединить фильтр (например, Ethernet или WLAN).
Экспорт драйвер . Драйвер экспорта загружается диспетчером памяти, когда Mm пытается загрузить какой-либо другой драйвер, который импортирует из него функции. Драйвер экспорта — это всего лишь эквивалент библиотеки DLL в ядре — он просто предоставляет API для других драйверов. Драйверы экспорта не нуждаются в INF; их просто нужно поместить в правильный каталог на диске. Если у вас уже есть INF по другим причинам, вы можете использовать для этого директиву CopyFiles
.
драйвер WinUSB . WinUSB — это встроенный драйвер, который делегирует большую часть обязанностей по управлению USB-устройством API пользовательского режима, поэтому любое приложение может легко выполнять простые операции с устройством. Это означает, что драйвером для устройства может быть практически любое приложение. Если USB-устройство помещает определенные данные в свой аппаратный дескриптор, Windows будет знать, что нужно автоматически настроить WinUSB, поэтому INF не требуется. Но если оборудование не сообщает, что ему нужен WinUSB, тогда вам понадобится INF-файл в стиле WinUSB, чтобы сообщить Windows, что нужно настроить WinUSB для вас. Кроме того, вам не нужен INF для вызова API WinUSB из вашего приложения..
Если вы просто экспериментируете и хотите вызвать несколько API ядра для развлечения, вы можете выбрать любой тип драйвера. Большинство людей считают, что драйвер, управляемый SCM, является самым простым, поскольку вам не нужен INF, и вы получаете полный контроль над запуском и остановкой драйвера. Но в любой другой ситуации выбор типа драйвера в значительной степени продиктован проблемой, которую вы пытаетесь решить. Например, если вы пишете драйвер для графического процессора PCI, вы должны использовать драйвер PNP и, следовательно, иметь INF-файл в стиле PCI.
Как узнать, какие файлы драйверов принадлежат определенному аппаратному устройству, например принтеру?
На определенном компьютере я установил лазерное МФУ Dell 2355dn, теперь как я могу узнать, какие файлы находятся на жесткий диск используются в качестве драйверов для доступа к принтеру.
Я предполагаю, что они должны находиться в каталоге c: windows system32 drivers, верно?
Я знаю DriverView от NirSoft, в котором перечислены все драйверы в системе, но я не нашли никаких драйверов Dell?
Есть идеи, как их перечислить?
вы можете увидеть весь файл, связанный с конкретным драйвером в Сведения о файле драйвера
- Откройте окно диспетчера устройств (перейдите в меню RUN и введите «devmgmt.msc»)
- rigght Щелкните на конкретном устройстве, которое вы хотите, и выберите Свойства
-
в окне «Свойства». Нажмите кнопку «Сведения о драйвере»
- в окне сведений о драйвере. Вы можете увидеть, какие файлы связаны с этим Драйвер устройства
- в окне сведений о драйвере. Вы можете увидеть, какие файлы связаны с этим Драйвер устройства
Хорошо Удачи!
В моем случае драйверы для одной из моих сетей принтеры были расположены в system32 spool.
Чтобы выяснить это, я открыл свойства принтера в DeviceManager/PrintQueues/[14]

В моем случае драйверы для одного из моих сетевых принтеров находились в system32 spool.
Чтобы узнать это, я открыл параметры принтера в DeviceManager/PrintQueues/[14]
Если вещь настроен в диспетчере устройств, то вы можете узнать, какой драйвер используется на одной из вкладок его свойств.
Если вещь настроена в диспетчере устройств, вы можете узнать, какой драйвер используется на одном из вкладки его свойств.