使用 Dirids

INF 文件中出现的许多目录都可以使用目录标识符 (dirids) 来表示,这些标识符是标识特定目录的数字。 应用程序可以使用,但不能重新分配与值在 -1 到 32767 之间的 dirids 关联的系统定义目录。

要使用 32768 到 65534 或 65536 及以上的用户定义值创建 dirids,请使用 SetupSetDirectoryId 函数(如 Microsoft Windows SDK 文档中所述)。

请注意,值为 65535 的 dirid 被认为是值为 -1 的 dirid 的同义词,尽管后者 (dirid -1) 更可取。

如果要在 INF 文件中使用 dirids,请考虑以下两个准则:

  1. 当 INF 文件条目的语法明确指定一个 dirid 值(例如 INF DestinationDirs 部分)时,将该值表示为数字。

    下面的示例演示这一语法:

    [DestinationDirs]
    DefaultDestDir = 11  ;  \system32 directory on Windows 2000 and later versions
    
  2. 当 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.exeOsloader.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 文档。