Почему следующее:
GetFileAttributes(L"D:");
вернуть 0x00002010
, но следующее на той же машине:
GetFileAttributes(L"\\\\?\\D:");
возвращается INVALID_FILE_ATTRIBUTES
и код ошибки ERROR_INVALID_PARAMETER
?
Три примера, которые вы приводите в вопросе и комментариях, относятся к разным вещам.
\\?\D:
ссылается на том, для которого атрибуты файла не существуют. \\?\D:\
является корневым каталогом диска, который имеет атрибуты. D:
это немного сложнее определить. Я считаю, что система использует GetFullPathName
или эквивалент, чтобы расширить этот путь. Итак, если текущий каталог процесса включен D
, то этот каталог используется. Или, если специальный переменная среды рабочего каталога для каждого диска определяется для этого диска, этот каталог используется. Иначе D:\
, корневой каталог используется.Вы хотите использовать D:\
или же \\?\D:\
Вот.