Создание INF-файла для минифильтра драйвера

Драйверы мини-фильтра файловой системы требуют установки INF-файла в операционной системе Windows. В примерах minifilter можно найти несколько INF-файлов, которые можно использовать для начала.

Начиная с Windows 10 версии 1903, требования INF изменились для примитивных драйверов, включая мини-фильтры файловой системы. Дополнительные сведения см. в статье Создание нового примитивного драйвера.

Разделы INF для драйвера фильтра файловой системы

INF-файл для драйвера фильтра файловой системы обычно содержит следующие разделы:

Раздел Примечания.
Версия Обязательное поле
DestinationDirs Обязательное поле
DefaultInstall Обязательное поле
DefaultInstall.Services Обязательное поле
ServiceInstall Обязательное поле
ДобавитьРеестр Обязательное поле
Строки Обязательное поле

Начиная с Windows 10 версии 1903, разделы DefaultUninstall и DefaultUninstall.Services запрещены, за исключением некоторых случаев. Эти разделы были необязательными в предыдущих версиях ОС.

Все драйверы, работающие на 64-разрядных версиях Windows, должны быть подписаны, чтобы 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$
Класс См. Классы драйверов фильтров файловой системы и GUID классов.
ClassGuid Смотрите Классы драйверов фильтра файловой системы и GUID классов.
Поставщик В собственном INF-файле необходимо указать поставщика, отличного от Корпорации Майкрософт.
DriverVer См . директиву INF DriverVer.
CatalogFile Для подписанных драйверов антивирусного минифильтра эта запись содержит имя каталожного файла, предоставленного WHQL. Все остальные драйверы мини-фильтра должны оставить эту запись пустой. Дополнительные сведения см. в описании записи CatalogFile в разделе ВЕРСИИ INF

Раздел DestinationDirs (обязательный)

В разделе DestinationDirs указываются каталоги, куда должны быть скопированы файлы драйверов и приложений minifilter.

В этом разделе и в разделе 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 АВТОМАТИЧЕСКИЙ СТАРТ СЕРВИСА
0x00000003 SERVICE_DEMAND_START
0x00000004 СЕРВИС ОТКЛЮЧЕН

Дополнительные сведения об этих типах запуска см. в разделе "Типы запуска драйверов" в "Что определяет время загрузки драйвера".

Запись LoadOrderGroup предоставляет диспетчеру фильтров сведения, необходимые для обеспечения совместимости между драйверами мини-фильтров и устаревшими драйверами фильтров файловой системы. Необходимо указать значение LoadOrderGroup, соответствующее типу создаваемого минифильтра. Чтобы выбрать группу порядка загрузки, см. в разделе "Группы порядка загрузки и высоты для драйверов мини-фильтров".

Необходимо указать LoadOrderGroup, даже если тип запуска драйвера минифильтра не SERVICE_BOOT_START. Таким образом, драйверы минифильтра отличаются от устаревших драйверов фильтров файловой системы.

Примечание.

Значение StartType у диспетчера фильтров — SERVICE_BOOT_START, а значение LoadOrderGroup — FSFilter Infrastructure. Эти значения гарантируют, что диспетчер фильтров всегда загружается перед загрузкой всех драйверов минифильтра.

Дополнительные сведения о том, как записи StartType и LoadOrderGroup определяют время загрузки драйвера, см. в разделе "Что определяет, когда загружается драйвер".

В отличие от устаревших драйверов фильтров, значения StartType и LoadOrderGroup не определяют, где драйвер минифильтра присоединяется в стеке экземпляров минифильтра. Вместо этого высота, указанная для экземпляра мини-фильтра, определяет расположение.

Запись ErrorControl указывает действие, которое необходимо предпринять, если служба не запускается во время старта системы. Драйверы минифильтра должны указывать значение 1 (SERVICE_ERROR_NORMAL). Дополнительную информацию о записи ErrorControl можно найти в директиве INF AddService.

Директива AddReg ссылается на одну или несколько секций AddRegistry определяемых автором INF, которые содержат информацию, подлежащую хранению в реестре для вновь установленной службы. Драйверы минифильтра используют разделы AddRegistry для определения экземпляров драйверов минифильтров и указания экземпляра по умолчанию.

Запись Зависимости указывает имена всех служб или групп загрузки, от которых зависит драйвер. Все драйверы минифильтра должны указать FltMgr, который является именем службы диспетчера фильтров.

Раздел AddRegistry (обязательный)

В разделе AddRegistry добавляются ключи и значения в реестр. Драйверы минифильтра используют раздел AddRegistry для определения экземпляров минифильтра и указания экземпляра по умолчанию. Эти сведения используются всякий раз, когда диспетчер фильтров создает новый экземпляр для драйвера мини-фильтра.

В образце драйвера MiniSpy в следующем разделе AddRegistry определяются три экземпляра, один из которых называется экземпляром по умолчанию для образца драйвера MiniSpy.

Примечание.

Следующие значения должны находиться в подразделе Параметры, начиная с версии 24H2 Windows 11.

[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-файл, добавив в него дополнительные разделы Strings.LanguageID, специфичные для местоположения. Дополнительные сведения о международных 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