1

我已经包含winioctl.h,并且该文件中没有#definefor IOCTL_STORAGE_QUERY_PROPERTYhttp://www.osronline.com/ddkx/storage/k307_8z3m.htm说它在但我 在我的 Windows XP 上ntddstor.h找不到任何东西。ntddstor.h但是IOCTL_STORAGE_QUERY_PROPERTY 提到它应该与 Windows XP 一起工作(我不需要> Vista 特定查询)并且它提到winioctl.h只包含!(我没有使用 Visual C++,我使用 Qt 和 MinGW)

4

2 回答 2

1

我在 WinIoCtl.h 中看到了 IOCTL_STORAGE_QUERY_PROPERTY 定义,它在没有任何 #ifdef 条件的情况下编译。你这个文件的版本是什么,它是如何安装的?我使用 VC++ 2010 的 WinIoCtl.h。也许你需要安装 Windows SDK。

您的 WinIoCtl.h 可能来自旧的 Visual Studio 或 SDK。安装最新的 Visual Studio 版本,如果这是不可能的 - 安装最新的 Microsoft Windows SDK 并确保它的包含目录在你的编译器中首先列出。

于 2011-10-01T10:11:43.917 回答
0

我已经使用 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

That's particularly useful if you intend to publish your code, as most people don't have the DDK headers, and they insist on using VisualStudio instead of MinGW.

于 2011-10-01T11:06:03.280 回答