无法使用VC2015构建WDK 10样本而无需修改Windows标头

时间:2016-02-24 13:26:11

标签: c visual-studio-2015 driver wdk windows-kernel

我正在运行全新的Windows安装。除了VC和SDK的

之外,没有其他程序安装
  • 包含目录

    C:\ WinSDK10 \包括\ 10.0.10586.0 \共享;
    C:\ WinSDK10 \包含\ 10.0.10586.0 \公里;
    C:\ WinSDK10 \包含\ 10.0.10586.0 \公里\ CRT;
    C:\ WinSDK10 \包括\ WDF \ KMDF \ 1.11

  • 目标操作系统版本

    Windows 8.1

  • 目标平台

    桌面

  • 运行Wpp跟踪

  • 启用最小重建

<小时/> 的 来源:

#include <ntddk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;

NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT  DriverObject, _In_ PUNICODE_STRING RegistryPath)
{
    NTSTATUS status;
    WDF_DRIVER_CONFIG config;

    KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n"));
    WDF_DRIVER_CONFIG_INIT(&config, KmdfHelloWorldEvtDeviceAdd);
    status = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE);
    return status;
}

NTSTATUS KmdfHelloWorldEvtDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit)
{
    NTSTATUS status;
    WDFDEVICE hDevice;
    UNREFERENCED_PARAMETER(Driver);

    KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n"));
    status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &hDevice);
    return status;
}
Severity    Code    Description Project File    Line    Suppression State
Error   C2146   syntax error: missing ')' before identifier 'InformationClass'  Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2146   syntax error: missing ')' before identifier 'InformationClass'  Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2061   syntax error: identifier 'InformationClass' Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2061   syntax error: identifier 'InformationClass' Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2059   syntax error: ';'   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2059   syntax error: ';'   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2059   syntax error: ','   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2059   syntax error: ','   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2059   syntax error: ')'   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31792   
Error   C2059   syntax error: ')'   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31792   
Error   C2081   'EVENT_INFO_CLASS': name in formal parameter list illegal   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   
Error   C2081   'EVENT_INFO_CLASS': name in formal parameter list illegal   Test1   C:\WinSDK10\Include\10.0.10586.0\km\wdm.h   31789   

Hack:如果我修改wdm.h并删除#define _ETW_KM_

,则会成功构建驱动程序

WDM.H

#ifndef _ETW_KM_
#define _ETW_KM_
#endif

#include <evntprov.h>


//
// Optional callback function that users provide.
//

typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
_IRQL_requires_same_
VOID
NTAPI 
ETWENABLECALLBACK (
    _In_ LPCGUID SourceId,
    _In_ ULONG ControlCode,
    _In_ UCHAR Level,
    _In_ ULONGLONG MatchAnyKeyword,
    _In_ ULONGLONG MatchAllKeyword,
    _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData,
    _Inout_opt_ PVOID CallbackContext
    );

typedef ETWENABLECALLBACK *PETWENABLECALLBACK;

对不起这篇文章的篇幅!!
我很确定我在遵循MSDN Driver Example Link时做错了什么,但我无法弄清楚是什么。

感谢您的时间,

克里斯

3 个答案:

答案 0 :(得分:2)

下一版WDK(10.0.14393)遇到类似问题。 在这两种情况下看起来问题都是 Win SDK和WDK的不同版本。 通过安装相应版本的Win SDK解决。 this answer中的更多细节。

答案 1 :(得分:0)

看起来像一个未定义的标识符或宏...
您的第一条错误消息(syntax error: missing ')' before identifier)可能是理解该问题的最佳关键。 剩下的可能是那一个的结果,可能抱怨_IRQL_requires_same_(或其他标识符之一)没有定义。

根据错误消息中的建议,查看文件C:\WinSDK10\Include\10.0.10586.0\km\wdm.h以获取有关 InformationClass 之前未定义内容的线索。然后包括提供定义的头文件。

(目前,您的帖子中没有信息将错误消息中列出的行号 31789 与源代码中的确切对应行绑定。)

此链接包含有关 driver annotations (Microsoft源代码注释语言(SAL))的信息。

答案 2 :(得分:0)

该错误表示未找到EVENT_INFO_CLASS(在evntprov.h中定义)的定义。另一个有趣的事情是,您正在获取方法EtwSetInformation的第31789行。此方法只需要导入(NTDDI_VERSION&gt; = NTDDI_THRESHOLD),并且您的目标是Win8.1。这里不对劲。请分享诊断msbuild日志。分析会有所帮助。