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