使用 Dirids
INF 文件中出现的许多目录都可以使用目录标识符 (dirids) 来表示,这些标识符是标识特定目录的数字。 应用程序可以使用,但不能重新分配与值在 -1 到 32767 之间的 dirids 关联的系统定义目录。
要使用 32768 到 65534 或 65536 及以上的用户定义值创建 dirids,请使用 SetupSetDirectoryId 函数(如 Microsoft Windows SDK 文档中所述)。
请注意,值为 65535 的 dirid 被认为是值为 -1 的 dirid 的同义词,尽管后者 (dirid -1) 更可取。
如果要在 INF 文件中使用 dirids,请考虑以下两个准则:
当 INF 文件条目的语法明确指定一个 dirid 值(例如 INF DestinationDirs 部分)时,将该值表示为数字。
下面的示例演示这一语法:
[DestinationDirs] DefaultDestDir = 11 ; \system32 directory on Windows 2000 and later versions
当 INF 文件条目的语法指定文件路径时,可以使用系统提供的字符串替换来表示此路径的一部分或全部内容。 这种替换的形式如下:
%dirid%
此形式由一个百分比 (%) 字符组成,后面是要指定的目录的 dirid,后面是另一个百分比 (%) 字符。 终止反斜杠 () 字符将此表达式与路径中的以下文件名或其他目录分隔开。
下面的示例演示这一语法:
[aic78xx_Service_Inst] ServiceBinary = %12%\aic78xx.sys
完全展开后,上例中显示的路径变为 c:\windows\system32\drivers\aic78xx.sys(假设 Windows 安装在 c:\windows 目录中)。 请注意,字符串替换或 %dirid% 形式可以在任何需要字符串的地方使用,INF 文件的INF 字符串部分除外。
下面两个示例演示了不应使用字符串替换的方式。
[DestinationDirs] DefaultDestDir = %11% ; Error! - number expected [aic78xx_Service_Inst] ServiceBinary = 12\aic78xx.sys ; Error! - unknown directory name
在第一个示例中,DefaultDestDir 条目的语法要求其值为数字。 但是,%11% 表达式扩展为字符串。 第二个示例中,INF 编写器显然打算将 ServiceBinary 条目的值设置为包含驱动程序的目录中的文件(有关详细信息,请参阅下表)。 发生错误是因为 Windows 在名为“12”的目录中查找指定的文件,而该目录可能在计算机上不存在。
下表显示了几个常用的 dirids 以及它们所代表的目录。 表顶部列出了设备 INF 文件和驱动程序 INF 文件最常指定的值。
作为驱动程序包隔离要求的一部分,驱动程序必须从驱动程序存储区运行,并在安装时使用 DIRID 13 指定驱动程序包文件的位置。 从 Windows 11 版本 24H2 开始,在为 WHQL 签名提交 INF 时,一些常用的 dirids 已被弃用。 有关详细信息,请参阅 InfVerif /h。
值 | 目标目录 | 版本已弃用 |
---|---|---|
01 |
SourceDrive:\pathname(安装 INF 文件的目录) |
windows 11 24H2 |
10 |
Windows 目录。 这相当于 %SystemRoot%。 |
|
11 |
系统目录。 对于 Windows 2000 和更高版本的 Windows,这相当于 %SystemRoot%\system32。 |
|
12 |
驱动程序目录。 对于 Windows 2000 和更高版本的 Windows,这相当于 %SystemRoot%\system32\drivers。 |
|
13 |
驱动程序包的驱动程序存储目录。 对于 Windows 8.1 和更高版本的 Windows,指定导入驱动程序包的驱动程序存储目录的路径。 请勿对 DestinationDirs 包含 dirid 13 的文件使用 DelFiles。 文件的 SourceDiskFiles 部分中的可选子目录必须与适用于此文件的条目的 DestinationDirs 部分的子目录匹配。 不要使用 CopyFiles 重命名 DestinationDirs 包含dirid 13 的文件。 有关使用 dirid 13 的详细信息,请参阅从驱动程序存储区运行。 |
|
17 |
INF 文件目录 |
windows 11 24H2 |
18 |
帮助目录 |
windows 11 24H2 |
20 |
字体目录 |
windows 11 24H2 |
21 |
查看器目录 |
windows 11 24H2 |
23 |
颜色目录 (ICM)(不用于安装打印机驱动程序) |
|
24 |
系统磁盘的根目录。 这是安装 Windows 文件的磁盘的根目录。 例如,如果 dirid 10 是 "C:\winnt",那么 dirid 24 是 "C:\"。 |
windows 11 24H2 |
25 |
共享目录 |
windows 11 24H2 |
30 |
启动磁盘的根目录,也称为“ARC 系统分区”。 (这可能与 dirid 24 表示的目录相同,也可能不同。) |
windows 11 24H2 |
50 |
系统目录 这相当于 %SystemRoot%\system。 |
windows 11 24H2 |
51 |
Spool 目录(不用于安装打印机驱动程序 - 请参阅打印机目录) |
|
52 |
Spool 驱动程序目录(不用于安装打印机驱动程序) |
|
53 |
用户配置文件目录 |
windows 11 24H2 |
54 |
Ntldr.exe 和 Osloader.exe 所在的目录 |
windows 11 24H2 |
55 |
打印处理器目录(不用于安装打印机驱动程序) |
|
-1 |
绝对路径 |
windows 11 24H2 |
从 16384 到 32767 的 Dirid 值保留给特殊的 shell 文件夹。 下表显示了这些文件夹的 dirid 值。
值 | Shell 特殊文件夹 | 版本已弃用 |
---|---|---|
16406 |
所有用户\“开始”菜单 |
windows 11 24H2 |
16407 |
所有用户\“开始”菜单\程序 |
windows 11 24H2 |
16408 |
所有用户\“开始”菜单\程序\启动 |
windows 11 24H2 |
16409 |
所有用户\桌面 |
windows 11 24H2 |
16415 |
所有用户\收藏夹 |
windows 11 24H2 |
16419 |
所有用户\应用程序数据 |
windows 11 24H2 |
16422 |
Program Files |
|
16425 |
%SystemRoot%\SysWOW64 |
|
16426 |
%ProgramFiles(x86)% |
|
16427 |
Program Files\Common |
|
16428 |
%ProgramFiles(x86)%\Common |
|
16429 |
所有用户\模板 |
windows 11 24H2 |
16430 |
所有用户\文档 |
windows 11 24H2 |
除了此表中在 Setupapi.h 中定义的值外,还可以使用在 Shlobj.h 中定义了的任何 CSIDL_Xxx 值。 要为此表中未列出的文件夹定义 dirid 值,请将 16384 (0x4000) 添加到 CSIDL_Xxx 值中。 有关 CSIDL_Xxx 值的详细信息,请参阅 Windows SDK 文档。