ошибка: ‘IOCTL_STORAGE_QUERY_PROPERTY’ не был объявлен в этой области

#c #winapi #deviceiocontrol

#c #winapi #deviceiocontrol

Вопрос:

Я включил winioctl.h и #define IOCTL_STORAGE_QUERY_PROPERTY в этом файле нет for !! http://www.osronline.com/ddkx/storage/k307_8z3m.htm Говорит ntddstor.h , что он включен, но я не могу найти ни ntddstor.h одного в своей Windows XP. Однако IOCTL_STORAGE_QUERY_PROPERTY упоминается, что он должен работать с Windows XP (мне не нужны запросы > Vista Specifc) и упоминается winioctl.h только для включения! (Я не использую Visual C , я использую Qt с MinGW)

Ответ №1:

Я вижу определение IOCTL_STORAGE_QUERY_PROPERTY в WinIoCtl.h, и оно компилируется без каких-либо условий #ifdef. Какова ваша версия этого файла, как он устанавливается? Я использую WinIoCtl.h из VC 2010. Возможно, вам нужно установить Windows SDK.

Возможно, ваш WinIoCtl.h взят из старой Visual Studio или SDK. Установите последнюю версию Visual Studio, если это невозможно — установите последнюю версию Microsoft Windows SDK и убедитесь, что его каталог include указан первым в вашем компиляторе.

Комментарии:

1. Тогда почему я получаю все другие определения и структуры?

Ответ №2:

Я использовал MinGW для компиляции программ такого рода. Это может быть не так просто найти, потому что, честно говоря, сайт MinGW довольно беспорядочный, но они предоставляют много заголовков DDK без каких-либо проблем. Затем я просто копирую / вставляю нужные мне структуры и определения, которые я не могу найти в заголовках SDK. Макросы, я определяю их условно, чтобы избежать конфликтов, на всякий случай.

Например, ваше СВОЙСТВО IOCTL_STORAGE_QUERY_PROPERTY находится в mingw/include/ddk/ntddstor.h

 #define IOCTL_STORAGE_QUERY_PROPERTY 
  CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
  

Поэтому я добавляю в свои проекты:

 #ifndef IOCTL_STORAGE_QUERY_PROPERTY
    #define IOCTL_STORAGE_QUERY_PROPERTY 
      CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
  

Это особенно полезно, если вы собираетесь опубликовать свой код, поскольку у большинства людей нет заголовков DDK, и они настаивают на использовании VisualStudio вместо MinGW.

Комментарии:

1. Да, я только что нашел то же самое решение сегодня вечером. в файле diskid32.cpp

2. Однако как насчет mingw/include/ddk указания пути включения?

3. @NeelBasu Я думаю, что они предназначены для включения как #include <ddk/ntddstor.h> . Нет необходимости добавлять путь включения, предполагая mingw/include , что он уже существует.