建立小型篩選驅動程式的 INF 檔案
檔案系統迷你篩選驅動程式需要在 Windows 作業系統上安裝 INF 檔案。 您可以在小型篩選範例中找到數個範例 INF 檔案,可用來作為起點。
從 Windows 10 版本 1903 開始,基本驅動程式的 INF 需求已變更,其中包括文件系統迷你篩選程式。 如需詳細資訊,請參閱 建立新的基本驅動程式 。
檔系統篩選驅動程式的 INF 區段
檔案系統篩選驅動程式的 INF 檔案通常包含下列各節:
區段 | 備註 |
---|---|
版本 | 必要 |
DestinationDirs | 必要 |
DefaultInstall | 必要 |
DefaultInstall.Services | 必要 |
ServiceInstall | 必要 |
AddRegistry | 必要 |
字串 | 必要 |
從 Windows 10 版本 1903 開始,禁止使用 DefaultUninstall 和 DefaultUninstall.Services 區段(但例外)。 這些區段在舊版操作系統中是選擇性的。
所有在64位版本的Windows系統上執行的驅動程式都必須經過簽署,Windows才能載入它們。 如需詳細資訊,請參閱 簽署驅動程式。
版本區段 (必要)
Version 區段會指定由迷你篩選驅動程式類型所決定的類別和 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
下表顯示檔案系統迷你篩選驅動程序應該在 [版本 ] 區段中指定的值。
Entry | 值 |
---|---|
簽章 | “$WINDOWS NT$” |
類別 | 請參閱 檔案系統篩選驅動程式類別和類別 GUID。 |
ClassGuid | 請參閱 檔案系統篩選驅動程式類別和類別 GUID。 |
提供者 | 在您自己的 INF 檔案中,您應該指定Microsoft以外的提供者。 |
DriverVer | 請參閱 INF DriverVer 指示詞。 |
CatalogFile | 針對已簽署的 防毒迷你篩選驅動程式,此專案包含 WHQL 提供之類別目錄檔案的名稱。 所有其他迷你篩選驅動程式都應該將此專案保留空白。 如需詳細資訊,請參閱 INF 版本一節中的 CatalogFile 專案描述 |
DestinationDirs 区段 (必要)
DestinationDirs 區段會指定要複製迷你篩選驅動程式和應用程式檔的目錄。
在本節和 ServiceInstall 區段中,您可以依系統定義的數值來指定已知的系統目錄。 如需這些值的清單,請參閱 INF DestinationDirs 區段。 在下列程式代碼範例中,值 13 是指系統上 OS 定義的驅動程式存放區位置。
[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles = 13
DefaultInstall 區段 (必要)
在 DefaultInstall 區段中,CopyFiles 指示詞會將迷你篩選驅動程式的驅動程式檔案和使用者應用程式檔案複製到 DestinationDirs 區段中指定的目的地。
注意
CopyFiles 指示詞不應該參考目錄檔案或 INF 檔案本身,這些檔案會自動複製。
您可以建立單一 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 = %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 及其對應開始類型的可能值。
值 | 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 Infrastructure。 這些值可確保在載入任何小型篩選驅動程式之前,一律會載入篩選管理員。
如需 StartType 和 LoadOrderGroup 專案如何判斷載入驅動程式時的詳細資訊,請參閱決定載入驅動程序的時機。
不同於舊版篩選驅動程式, StartType 和 LoadOrderGroup 值不會判斷迷你篩選驅動程式附加在迷你篩選實例堆疊中的位置。 相反地,為迷你篩選實例指定的高度會決定位置。
ErrorControl 專案會指定要在系統啟動期間服務無法啟動時所要採取的動作。 迷你篩選驅動程式應指定 1 的值(SERVICE_ERROR_NORMAL)。 如需 ErrorControl 專案的詳細資訊,請參閱 INF AddService 指示詞。
AddReg 指示詞是指一或多個 INF 寫入器定義的 AddRegistry 區段,其中包含要儲存在新安裝服務的登錄中的資訊。 迷你篩選驅動程式會使用 AddRegistry 區段來定義迷你篩選驅動程式實例,以及指定預設實例。
[ 相依性 ] 專案會指定驅動程式相依的任何服務或載入順序群組的名稱。 所有迷你篩選驅動程式都必須指定 FltMgr,這是篩選管理員的服務名稱。
AddRegistry 區段 (必要)
AddRegistry 區段會將機碼和值新增至登錄。 迷你篩選驅動程式會使用 AddRegistry 區段來定義迷你篩選實例,以及指定預設實例。 每當篩選管理員為迷你篩選驅動程式建立新的實例時,就會使用這項資訊。
在 MiniSpy 範例驅動程式中,下列 AddRegistry 區段會定義三個實例,其中一個實例會命名為 MiniSpy 範例驅動程式的預設實例。
注意
下列值應該在從 Windows 11 版本 24H2 開始的 Parameters 子機碼下。
[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 區 段會定義 INF 檔案中使用的每個 %strkey% 令牌。
您可以建立其他地區設定特定的 字串,以建立單一國際 INF 檔案。INF 檔案中的 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 區段
注意
從 Windows 10 版本 1903 開始,禁止使用 DefaultUninstall 和 DefaultUninstall.Services 區段。但例外。
在 1903 版之前的 Windows 10 中,DefaultUninstall 和 DefaultUninstall.Services 區段是選擇性的,但如果可以卸載驅動程式,則建議使用:
- DefaultUninstall 包含 DelFiles 和 DelReg 指示詞,可移除檔案和登錄專案。
- 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