【发布时间】:2013-02-10 22:16:32
【问题描述】:
这个问题可能不像你最初想象的那么容易解决。
FILTER_MESSAGE_HEADER 是在头文件 fltUserStructures.h 中定义的结构,它是位于 SDK 包含路径的标准 Windows SDK 头文件,即
"C:\Program Files (x86)\Windows Kits\8.0\Include\shared\fltUserStructures.h"。
typedef struct _FILTER_MESSAGE_HEADER {
//
// OUT
//
// Total buffer length in bytes, including the FILTER_REPLY_HEADER, of
// the expected reply. If no reply is expected, 0 is returned.
//
ULONG ReplyLength;
//
// OUT
//
// Unique Id for this message. This will be set when the kernel message
// satifies this FilterGetMessage or FilterInstanceGetMessage request.
// If replying to this message, this is the MessageId that should be used.
//
ULONGLONG MessageId;
//
// General filter-specific buffer data follows...
//
} FILTER_MESSAGE_HEADER, *PFILTER_MESSAGE_HEADER;
但是,VC++ 2012 无法编译以下代码。
#include <fltUserStructures.h>
int main()
{
//
// error C2065: 'FILTER_MESSAGE_HEADER' : undeclared identifier
//
FILTER_MESSAGE_HEADER v;
}
或
#define NTDDI_VERSION 0x06000000 // Vista or later
#include <FltUser.h>
int main()
{
//
// fltuserstructures.h(27): fatal error C1012:
// unmatched parenthesis : missing ')'
//
FILTER_MESSAGE_HEADER v;
}
虽然我尝试了很多方法,但编译器总是拒绝上面的代码。根本原因是什么?
【问题讨论】:
-
对于我们这些没有安装 Windows SDK 的人来说,结构的定义是什么样的?
-
尝试包含 FltUser.h
-
@André,包括 FltUser.h 会产生另一个错误:致命错误 C1012:不匹配的括号:缺少')'
-
不知道为什么这被否决了...
标签: c windows compiler-errors macros c-preprocessor