다음을 통해 공유


미니필터 드라이버에 대한 INF 파일 만들기

소개

참고

Windows 10 버전 1903부터 기본 드라이버(예: 파일 시스템 미니필터 드라이버)에 대한 INF 요구 사항이 변경되었습니다. 자세한 내용은 새 기본 드라이버 만들기 를 참조하세요.

필터 드라이버는 Windows 운영 체제에 설치할 INF 파일이 필요합니다. 미니필터 샘플에서 샘플 INF 파일을 찾을 수 있습니다.

파일 시스템 필터 드라이버에 대한 INF 파일은 일반적으로 다음 섹션을 포함합니다.

섹션 참고
버전 필수
DestinationDirs 선택 사항이지만 권장됨
DefaultInstall 필수
DefaultInstall.Services 필수
ServiceInstall 필수
AddRegistry 필수
문자열 필수

참고

Windows 10 버전 1903부터 DefaultUninstallDefaultUninstall.Services 섹션은 금지됩니다(예외). 이러한 섹션은 이전 OS 버전에서 선택 사항이었습니다.

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 파일에서 Microsoft 이외의 공급자를 지정해야 합니다.
DriverVer INF DriverVer 지시문을 참조하세요.
CatalogFile 서명된 바이러스 백신 미니필터 드라이버의 경우 이 항목에는 WHQL 제공 카탈로그 파일의 이름이 포함됩니다. 다른 모든 미니필터 드라이버는 이 항목을 비워 두어야 합니다. 자세한 내용은 INF 버전 섹션CatalogFile 항목에 대한 설명을 참조하세요.

DestinationDirs 섹션은 미니필터 드라이버 및 애플리케이션 파일을 복사할 디렉터리를 지정합니다.

이 섹션과 ServiceInstall 섹션에서 시스템 정의 숫자 값으로 잘 알려진 시스템 디렉터리를 지정할 수 있습니다. 이러한 값 목록은 INF DestinationDirs 섹션을 참조하세요. 다음 코드 예제에서 값 12는 드라이버 디렉터리(%windir%\system32\drivers)를 참조하고 값 10은 Windows 디렉터리(%windir%)를 나타냅니다.

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

DefaultInstall 섹션(필수)

DefaultInstall 섹션에서 CopyFiles 지시문은 미니필터 드라이버 파일 및 사용자 애플리케이션 파일을 DestinationDirs 섹션에 지정된 대상에 복사합니다.

참고

CopyFiles 지시문은 카탈로그 파일 또는 INF 파일 자체를 참조해서는 안 됩니다. SetupAPI는 이러한 파일을 자동으로 복사합니다.

단일 INF 파일을 만들어 여러 버전의 Windows 운영 체제에 드라이버를 설치할 수 있습니다. 각 운영 체제 버전에 대해 추가 DefaultInstall 및 DefaultInstall.Services 섹션 만들어 이 유형의 INF 파일을 만들 수 있습니다. 각 섹션은 적용되는 운영 체제 버전을 지정하는 장식 (예: .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 섹션의 이름은 DefaultInstall.Services 섹션의 AddService 지시문에 표시되어야 합니다.

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %12%\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 및 해당 시작 형식에 대해 가능한 값을 나열합니다.

Description
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

이러한 시작 유형에 대한 자세한 내용은 드라이버가 로드되는 시기를 결정하는 내용의 "드라이버 시작 유형"을 참조하세요.

LoadOrderGroup 항목은 필터 관리자에게 미니필터 드라이버와 레거시 파일 시스템 필터 드라이버 간의 상호 운용성을 보장하는 데 필요한 정보를 제공합니다. 개발 중인 미니필터 드라이버 유형에 적합한 LoadOrderGroup 값을 지정해야 합니다. 부하 주문 그룹을 선택하려면 미니필터 드라이버에 대한 부하 주문 그룹 및 고도를 참조하세요.

미니필터 드라이버의 시작 유형이 SERVICE_BOOT_START 않더라도 LoadOrderGroup 값을 지정해야 합니다. 이러한 방식으로 미니필터 드라이버는 레거시 파일 시스템 필터 드라이버와 다릅니다.

참고

필터 관리자의 StartType 값은 SERVICE_BOOT_START LoadOrderGroup 값은 FSFilter 인프라입니다. 이러한 값을 통해 필터 관리자는 항상 미니필터 드라이버가 로드되기 전에 로드됩니다.

StartTypeLoadOrderGroup 항목에서 드라이버가 로드되는 시기를 결정하는 방법에 대한 자세한 내용은 드라이버가 로드되는 시기를 결정하는 항목을 참조하세요.

미니필터 드라이버의 경우 레거시 파일 시스템 필터 드라이버와 달리 StartTypeLoadOrderGroup 값은 미니필터 드라이버가 미니필터 instance 스택에서 연결되는 위치를 결정하지 않습니다. 이 위치는 미니필터 instance 지정된 고도에 따라 결정됩니다.

ErrorControl 항목은 시스템 시작 중에 서비스가 시작되지 않을 경우 수행할 작업을 지정합니다. 미니필터 드라이버는 1(SERVICE_ERROR_NORMAL) 값을 지정해야 합니다. ErrorControl 항목에 대한 자세한 내용은 INF AddService 지시문을 참조하세요.

AddReg 지시문은 새로 설치된 서비스에 대한 레지스트리에 저장할 정보를 포함하는 하나 이상의 INF 기록기 정의 AddRegistry 섹션을 나타냅니다. 미니필터 드라이버는 AddRegistry 섹션을 사용하여 미니필터 드라이버 인스턴스를 정의하고 기본 instance 지정합니다.

종속성 항목은 드라이버가 종속된 서비스 또는 로드 순서 그룹의 이름을 지정합니다. 모든 미니필터 드라이버는 필터 관리자의 서비스 이름인 FltMgr을 지정해야 합니다.

AddRegistry 섹션(필수)

AddRegistry 섹션에서는 레지스트리에 키와 값을 추가합니다. 미니필터 드라이버는 AddRegistry 섹션을 사용하여 미니필터 인스턴스를 정의하고 기본 instance 지정합니다. 이 정보는 필터 관리자가 미니필터 드라이버에 대한 새 instance 만들 때마다 사용됩니다.

MiniSpy 샘플 드라이버에서 다음 AddRegistry 섹션은 Strings 섹션의 %strkey% 토큰 정의와 함께 3개의 인스턴스를 정의하며, 그 중 하나는 MiniSpy 샘플 드라이버의 기본 instance 명명됩니다.

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

문자열 섹션(필수)

Strings 섹션에서는 INF 파일에 사용되는 각 %strkey% 토큰을 정의합니다.

추가 로캘별 문자열을 만들어 단일 국제 INF 파일을 만들 수 있습니다. INF 파일의 LanguageID 섹션입니다. 국제 INF 파일에 대한 자세한 내용은 국제 INF 파일 만들기를 참조하세요.

다음 코드 예제에서는 일반적인 Strings 섹션을 보여 줍니다 .

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

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 섹션

참고

DefaultUninstallDefaultUninstall.Services 섹션은 Windows 10 버전 1903부터 금지됩니다(예외).

버전 1903 이전의 Windows 10 DefaultUninstallDefaultUninstall.Services 섹션은 선택 사항이지만 드라이버를 제거할 수 있는 경우 권장됩니다.

  • DefaultUninstall 에는 파일 및 레지스트리 항목을 제거하는 DelFilesDelReg 지시문이 포함되어 있습니다.
  • DefaultUninstall.Services 에는 미니필터 드라이버의 서비스를 제거하는 DelService 지시문이 포함되어 있습니다. DelService 지시문은 항상 서비스를 삭제하기 전에 중지할 SPSVCINST_STOPSERVICE 플래그(0x00000200)를 지정했습니다.

다음 예제에서는 Windows 10 버전 1903 이전의 일반적인 DefaultUninstall 및 DefaultUninstall.Services 섹션을 보여 줍니다.

[DefaultUninstall.NTamd64]
DelFiles   = Minispy.DriverFiles, Minispy.UserFiles
DelReg     = Minispy.DelRegistry

[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200