【发布时间】:2016-02-24 13:26:11
【问题描述】:
我正在运行全新安装的 Windows。除了 VC 和 SDK 没有安装其他程序
-
包括目录
C:\WinSDK10\Include\10.0.10586.0\shared;
C:\WinSDK10\Include\10.0.10586.0\km;
C:\WinSDK10\Include\10.0.10586.0\km\crt;
C:\WinSDK10\Include\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 时做错了什么,但我不知道是什么。
感谢您的宝贵时间,
克里斯
【问题讨论】:
-
驱动注解在 Driverspecs.h 中定义。 (对于诸如
_IRQL_requires_same_之类的东西)。你有这个 .h 文件包含在任何地方吗? -
@ryyker 我没有直接包含
driverspecs.h,但我已经包含了它所在的目录;即10.0.10586.0\shared。直接包含在<ntddk.h>上面,没有效果。 -
syntax error: missing )在未定义宏时很常见。您必须确保定义了所有标识符。一旦完成,其余的错误消息也可能会得到解决。 -
@ryyker 删除
_ETW_KM_可解决 所有 错误,因为否则无法达到evntprov.h中的EVENT_INFO_CLASS。但这是一个 hack,出了点问题。 -
我按照 MSDN 指南逐字进行了干净的 Windows 安装,可能是 WDK 中的错误?
标签: c visual-studio-2015 driver wdk windows-kernel