#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
, что он уже существует.