Что означает имя объекта ядра Windows, начинающееся с \??\?

Я поддерживаю устаревшее приложение Windows с пользовательским пространством и компонентом ядра. Пользовательское пространство передает некоторые пути к файлам к драйверу устройства через ключи реестра.

В настоящее время код находит полный путь к файлу, а затем добавляет \??\ перед записью в реестр, поэтому путь заканчивается \??\C:\foo.bar, Водитель проходит этот путь к InitializeObjectAttributes() а также ZwCreateFile(), который успешно открывает файл (или создает его соответствующим образом).

Я знаком с \\.\ префикс в качестве псевдонима для \DosDevices\, но нет \??\И это не та вещь, которую можно гуглить. Кто-нибудь знает что это значит?

1 ответ

Решение

Это подкаталог пространства имен, созданный в процессе загрузки. В нем есть ссылки на ресурсы, доступные через Win32 API. Во время загрузки до полного запуска системы, если на этот путь ссылаются, он может не разрешиться без наличия \??\.

Другие вопросы по тегам