2010-08-05 5 views
2

Я хотел бы узнать, можно ли вызвать функцию CreateFile в Visual C++ для создания файла с атрибутом FILE_ATTRIBUTE_DEVICE (0x00000040 hex, 64 десятичного). Согласно API MSDN, FILE_ATTRIBUTE_DEVICE зарезервирован, поэтому я не могу его использовать, но я знаю, что должен быть какой-то способ создать файл с такими атрибутами. Что я должен сделать, чтобы сделать это? Существуют ли другие вызовы API, или мне нужно создать новую структуру?Настройка FILE_ATTRIBUTE_DEVICE в Visual Studio

Благодаря

ответ

2

Флаг существует для того чтобы определить маркеры, которые представляют собой устройства, а не файлы. Например, использование CreateFile для открытия \\.\C: возвращает дескриптор устройства устройства, а не дескриптор файла или каталога.

Вы не можете создать новый «файл» с этим флагом, так как файл не является устройством. Изобретение/создание (а не открытие) дескриптора файла с этим флагом требует написания драйвера устройства для его предоставления (в частности, вы создаете имя для вашего объекта устройства, которое клиент пользовательского режима может передать CreateFile - ядро ​​создает дескриптор файла и устанавливает флаг FILE_ATTRIBUTE_DEVICE).

Страница CreateFile и раздел «Замечания» на странице DeviceIOControl должны прояснить ситуацию немного дальше.

+0

Интересно, что в то время как CreateFile на '\\. \ C:' преуспевает, [GetFileAttributes] (https://msdn.microsoft.com/en-us/library/aa364944 (v = vs.85) .aspx) не удается (возврат ERROR_INVALID_PARAMETER в Win XP и ERROR_BAD_DEV_TYPE под Wine 1.9.23) вместо возврата FILE_ATTRIBUTE_DEVICE. –

Смежные вопросы