1

この問題は、あなたが最初に考えるほど簡単には解決できないかもしれません。

FILTER_MESSAGE_HEADERは、ヘッダーファイルfltUserStructures.hで定義された構造体です。これは、SDKインクルードパスにある標準のWindowsSDKヘッダーファイルです。

「C:\ ProgramFiles(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; 
}

私は多くの方法を試しましたが、コンパイラーは常に上記のコードを拒否しました。根本的な原因は何ですか?

4

1 に答える 1

2

その構造(およびその中の多くは、次のように設定されているものにfltUserStructures.h基づいて条件付きでコンパイルされます:FLT_MGR_BASELINEfltUser.h

#define FLT_MGR_BASELINE (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
                          ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WINXPSP2))) || \
                          ((OSVER(NTDDI_VERSION) == NTDDI_WS03)  && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) ||  \
                          (NTDDI_VERSION >= NTDDI_VISTA))

したがって、#include <fltuser.h>代わりに、それNTDDI_VERSIONが適切に設定されていることを確認してください(WINVERたとえば、を使用して):

#define WINVER 0x0600
#include <windows.h>
#include <fltUser.h>

int main()
{
    //
    // error C2065: 'FILTER_MESSAGE_HEADER' : undeclared identifier
    //
    FILTER_MESSAGE_HEADER v; 
}
于 2013-02-10T22:32:28.977 に答える