Использование dirids

Многие каталоги, отображаемые в INF-файлах, можно выразить с помощью идентификаторов каталогов (dirids), которые представляют собой числа, определяющие определенные каталоги. Приложения могут использовать, но не могут переназначить системные каталоги, связанные с dirids , значения которых находятся в диапазоне от -1 до 32767.

Чтобы создать ограничения с определяемыми пользователем значениями от 32768 до 65534 или 65536 и выше, используйте функцию SetupSetDirectoryId (описанную в документации по Microsoft Windows SDK).

Имейте в виду, что dirid со значением 65535 считается синонимом dirid со значением -1, хотя последний (dirid -1) является предпочтительным.

Если вы планируете использовать dirids в INF-файле, примите во внимание следующие два правила:

  1. Если в синтаксисе для записи INF-файла явно указано резкое значение (например, раздел INF DestinationDirs), это значение выражается в виде числа.

    Следующий пример демонстрирует этот синтаксис:

    [DestinationDirs]
    DefaultDestDir = 11  ;  \system32 directory on Windows 2000 and later versions
    
  2. Если синтаксис для записи INF-файла указывает путь к файлу, можно использовать подстановку строки, предоставляемую системой, чтобы представить часть или весь этот путь. Эта подстановка имеет следующий вид:

    %dirid%

    Эта форма состоит из символа процента (%), за которым следует знак для каталога, который вы хотите указать, а затем еще один символ процента (%). Завершающий символ обратной косой черты () отделяет это выражение от имени файла или дополнительных каталогов в пути.

    Следующий пример демонстрирует этот синтаксис:

    [aic78xx_Service_Inst]
    ServiceBinary = %12%\aic78xx.sys
    

    При полном развертывании путь, показанный в предыдущем примере, становитсядрайверами\c:\windows\system32\aic78xx.sys (предполагается, что Windows была установлена в каталоге c:\windows). Имейте в виду, что подстановку строки или форму %dirid% можно использовать в любом месте, где ожидается строка, за исключением раздела INF Strings в 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

Системный каталог.

Это эквивалентно %SystemRoot%\system32 для Windows 2000 и более поздних версий Windows..

12

Каталог драйверов.

Это эквивалентнодрайверам%SystemRoot%\system32\ для Windows 2000 и более поздних версий Windows.

13

Каталог хранилища драйверов пакета драйверов .

Для Windows 8.1 и более поздних версий Windows указывает путь к каталогу Хранилища драйверов, в который был импортирован пакет драйверов.

Не используйте DelFiles в файле, для которого DestinationDirsсодержит 13.

Необязательный подкаталог в разделе SourceDiskFiles для файла должен соответствовать подкаталогу в разделе DestinationDirs для записи, которая применяется к этому файлу.

Не используйте CopyFiles для переименования файла, для которого DestinationDirsсодержит 13.

Дополнительные сведения об использовании dirid 13 см. в разделе Запуск из хранилища драйверов.

17

Каталог INF-файла

18

Каталог справки

20

Каталог шрифтов

21

Каталог средств просмотра

23

Каталог Color (ICM) (не используется для установки драйверов принтера)

24

Корневой каталог системного диска.

Это корневой каталог диска, на котором установлены файлы Windows. Например, если dirid 10 — "C:\winnt", то dirid 24 — "C:\".

25

Общий каталог

30

Корневой каталог загрузочного диска, также известный как "системный раздел ARC". (Это может быть или не тот же каталог, что и каталог, представленный dirid 24.)

50

Системный каталог

Это эквивалентно %SystemRoot%\system.

51

Каталог Spool (не используется для установки драйверов принтера — см. раздел Printer Dirids)

52

Каталог драйверов очереди (не используется для установки драйверов принтера)

53

Каталог профилей пользователей

54

Каталог, в котором находятся Ntldr.exe и Osloader.exe

55

Каталог процессоров печати (не используется для установки драйверов принтера)

-1

Абсолютный путь

Значения dirid от 16384 до 32767 зарезервированы для специальных папок оболочки. В следующей таблице приведены подробные значения для этих папок.

Значение Специальная папка оболочки

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, можно использовать любые значения CSIDL_Xxx, определенные в Shlobj.h. Чтобы определить малое значение для папки, не указанной в этой таблице, добавьте 16384 (0x4000) в значение CSIDL_Xxx . Дополнительные сведения о значениях CSIDL_Xxx см. в документации по Windows SDK.