Создание INF-файла для мини-фильтра драйвера
Драйверы мини-фильтра файловой системы требуют установки INF-файла в операционной системе Windows. В примерах минифильтра можно найти несколько примеров INF-файлов, которые можно использовать в качестве отправной точки.
Начиная с Windows 10 версии 1903, требования INF изменились для примитивных драйверов, включая мини-фильтры файловой системы. Дополнительные сведения см. в статье "Создание нового примитивного драйвера ".
Разделы INF для драйвера фильтра файловой системы
INF-файл для драйвера фильтра файловой системы обычно содержит следующие разделы:
Section | Примечания. |
---|---|
Версия | Обязательное поле |
DestinationDirs | Обязательное поле |
DefaultInstall | Обязательное поле |
DefaultInstall.Services | Обязательное поле |
ServiceInstall | Обязательное поле |
AddRegistry | Обязательное поле |
Строки | Обязательное поле |
Начиная с Windows 10 версии 1903, разделы DefaultUninstall и DefaultUninstall.Services запрещены (за исключением). Эти разделы были необязательными в предыдущих версиях ОС.
Для загрузки всех драйверов, работающих в 64-разрядных версиях систем Windows, необходимо выполнить вход. Дополнительные сведения см. в разделе "Подписывание драйвера".
Раздел версии (обязательный)
В разделе "Версия" указывается класс и GUID, которые определяются типом драйвера минифильтра, как показано в следующем примере кода.
[Version]
Signature = "$WINDOWS NT$"
Class = "ActivityMonitor"
ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider = %Msft%
DriverVer = 10/09/2001,1.0.0.0
CatalogFile =
PnpLockdown = 1
В следующей таблице показаны значения, которые должны указывать драйверы мини-фильтра файловой системы в разделе "Версия".
Формат ввода | Значение |
---|---|
Подпись | "$WINDOWS NT$" |
Class | См . классы драйверов фильтра файловой системы и идентификаторы GUID классов. |
ClassGuid | См . классы драйверов фильтра файловой системы и идентификаторы GUID классов. |
Поставщик | В собственном INF-файле необходимо указать поставщика, отличного от Корпорации Майкрософт. |
DriverVer | См . директиву INF DriverVer. |
CatalogFile | Для подписанных антивирусной программы драйверов мини-фильтра эта запись содержит имя файла каталога, предоставленного WHQL. Все остальные драйверы мини-фильтра должны оставить эту запись пустой. Дополнительные сведения см. в описании записи CatalogFile в разделе ВЕРСИИ INF |
Раздел DestinationDirs (обязательный)
В разделе DestinationDirs указываются каталоги, в которых копируются файлы драйверов и приложений мини-фильтра.
В этом разделе и в разделе ServiceInstall можно указать известные системные каталоги по системным числовым значениям. Список этих значений см. в разделе INF DestinationDirs. В следующем примере кода значение 13 относится к определенному ОС хранилищу драйверов в системе.
[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles = 13
Раздел DefaultInstall (обязательный)
В разделе DefaultInstall директива CopyFiles копирует файлы драйверов мини-фильтра и файлы приложения пользователя в назначения, указанные в разделе DestinationDirs.
Примечание.
Директива CopyFiles не должна ссылаться на файл каталога или сам INF-файл, эти файлы копируются автоматически.
Вы можете создать один INF-файл для установки драйвера в нескольких версиях операционных систем Windows. Этот тип INF-файла можно создать, создав разделы DefaultInstall и DefaultInstall.Services для каждой версии операционной системы. Каждый раздел помечен украшением (например, NTX86, NTIA64 или .NT), указывающим версию операционной системы, к которой она применяется. Дополнительные сведения о создании INF-файла см. в разделе "Создание INF-файлов для нескольких платформ и операционных систем".
В следующем примере кода показан типичный раздел DefaultInstall .
[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles
Раздел DefaultInstall.Services (обязательный)
В разделе DefaultInstall.Services содержится директива AddService, которая управляет загрузкой служб определенного драйвера, как показано в следующем примере кода.
[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service
Раздел ServiceInstall (обязательный)
В разделе ServiceInstall содержатся сведения, используемые для загрузки службы драйверов. В примере драйвера MiniSpy этот раздел называется Minispy.Service, как показано в следующем примере кода. Имя раздела ServiceInstall должно отображаться в директиве AddService в разделе DefaultInstall.Services.
[Minispy.Service]
DisplayName = %MinispyServiceName%
Description = %MinispyServiceDesc%
ServiceBinary = %13%\minispy.sys
ServiceType = 2 ; SERVICE_FILE_SYSTEM_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg = Minispy.AddRegistry
Dependencies = FltMgr
Запись ServiceType указывает тип службы. Драйверы мини-фильтра должны указывать значение 2 (SERVICE_FILE_SYSTEM_DRIVER). Дополнительные сведения о записи ServiceType см. в директиве INF AddService.
Запись StartType указывает, когда нужно запустить службу. В следующей таблице перечислены возможные значения для StartType и их соответствующих типов запуска.
значение | Описание |
---|---|
0x00000000 | SERVICE_BOOT_START |
0x00000001 | SERVICE_SYSTEM_START |
0x00000002 | SERVICE_AUTO_START |
0x00000003 | SERVICE_DEMAND_START |
0x00000004 | SERVICE_DISABLED |
Дополнительные сведения об этих типах запуска см. в разделе "Типы запусков драйверов" в разделе "Что определяет при загрузке драйвера".
Запись LoadOrderGroup предоставляет диспетчеру фильтров сведения, необходимые для обеспечения взаимодействия между драйверами минифильтра и устаревшими драйверами фильтров файловой системы. Необходимо указать значение LoadOrderGroup , соответствующее типу создаваемого драйвера мини-фильтра. Сведения о выборе группы заказов нагрузки см. в разделе "Группы заказов нагрузки" и "Высоты" для драйверов мини-фильтра.
Необходимо указать значение LoadOrderGroup , даже если тип запуска драйвера мини-фильтра не SERVICE_BOOT_START. Таким образом, драйверы минифильтра отличаются от устаревших драйверов фильтров файловой системы.
Примечание.
Значение StartType диспетчера фильтров SERVICE_BOOT_START, а его значение LoadOrderGroup — инфраструктура FSFilter. Эти значения гарантируют, что диспетчер фильтров всегда загружается перед загрузкой всех драйверов минифильтра.
Дополнительные сведения о том, как записи StartType и LoadOrderGroup определяют загрузку драйвера, см. в разделе "Что определяет при загрузке драйвера".
В отличие от устаревших драйверов фильтров, значения StartType и LoadOrderGroup не определяют, где драйвер минифильтра присоединяется в стеке экземпляров минифильтратора. Вместо этого высота, указанная для экземпляра мини-фильтра, определяет расположение.
Запись ErrorControl указывает действие, которое необходимо выполнить, если служба не сможет запуститься во время запуска системы. Драйверы минифильтра должны указывать значение 1 (SERVICE_ERROR_NORMAL). Дополнительные сведения о записи ErrorControl см. в директиве INF AddService.
Директива AddReg ссылается на один или несколько разделов модуля записи INF, которые содержат сведения, хранящиеся в реестре для новой установленной службы. Драйверы минифильтра используют разделы AddRegistry для определения экземпляров драйверов мини-фильтра и указания экземпляра по умолчанию.
Запись зависимостей указывает имена всех служб или групп заказов загрузки, от которых зависит драйвер. Все драйверы минифильтра должны указать FltMgr, который является именем службы диспетчера фильтров.
Раздел AddRegistry (обязательный)
В разделе AddRegistry добавлены ключи и значения в реестр. Драйверы минифильтра используют раздел AddRegistry для определения экземпляров минифильтратора и указания экземпляра по умолчанию. Эти сведения используются всякий раз, когда диспетчер фильтров создает новый экземпляр для драйвера мини-фильтра.
В примере драйвера MiniSpy в следующем разделе AddRegistry определяется три экземпляра, один из которых называется экземпляром драйвера miniSpy по умолчанию.
Примечание.
Следующие значения должны находиться в подразделе "Параметры " начиная с Windows 11 версии 24H2.
[Minispy.AddRegistry]
HKR,"Parameters","SupportedFeatures",0x00010001,0x3
HKR,"Parameters\Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Parameters\Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Parameters\Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
HKR,"Parameters\Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude%
HKR,"Parameters\Instances\"%Instance2.Name%,"Flags",0x00010001,%Instance2.Flags%
HKR,"Parameters\Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude%
HKR,"Parameters\Instances\"%Instance3.Name%,"Flags",0x00010001,%Instance3.Flags%
Раздел строк (обязательный)
Раздел Strings определяет каждый маркер %strkey% , используемый в INF-файле.
Вы можете создать один международный INF-файл, создав дополнительные строки для языкового стандарта.Разделы LanguageID в INF-файле. Дополнительные сведения о международных INF-файлах см. в разделе "Создание международных INF-файлов".
В следующем примере кода показан типичный раздел Strings .
[Strings]
Msft = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
DefaultInstance = "Minispy - Top Instance"
Instance1.Name = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags = 0x1 ; Suppress automatic attachments
Instance2.Name = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags = 0x1 ; Suppress automatic attachments
Instance3.Name = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags = 0x1 ; Suppress automatic attachments
Разделы DefaultUninstall и DefaultUninstall.Services
Примечание.
Разделы DefaultUninstall и DefaultUninstall.Services запрещены (за исключением) начиная с Windows 10 версии 1903.
В Windows 10 до версии 1903 разделы DefaultUninstall и DefaultUninstall.Services были необязательными, но рекомендуется удалить драйвер:
- DefaultUninstall содержал директивы DelFiles и DelReg для удаления файлов и записей реестра.
- DefaultUninstall.Services содержит директивы DelService для удаления служб драйвера мини-фильтра. Директива DelService всегда указывала флаг SPSVCINST_STOPSERVICE (0x00000200), чтобы остановить службу до его удаления.
В следующем примере показаны типичные разделы DefaultUninstall и DefaultUninstall.Services до Windows 10 версии 1903.
[DefaultUninstall.NTamd64]
DelFiles = Minispy.DriverFiles, Minispy.UserFiles
DelReg = Minispy.DelRegistry
[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200