2016-02-24 1 views
2

Я запускаю новую установку Windows. Никаких других программ, установленных кроме VC и SDK,Невозможно создать образцы WDK 10 с VC2015 без изменения заголовков Windows

  • Include Directories

    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

  • Target OS Version

    для Windows 8.1

  • Целевая платформа

    Desktop

  • Запуск трассировки 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, но я не могу понять, что.

Спасибо за ваше время,

Kris

+0

аннотации драйверов определены в Driverspecs.h. (для таких вещей, как '_IRQL_requires_same_'). У вас есть этот файл .h? – ryyker

+0

@ryyker Я не напрямую включаю 'driverspecs.h', но я включил каталог, в котором он находится; а именно '10.0.10586.0 \ shared'. Непосредственно включив его, над '', не действует. –

+0

«Синтаксическая ошибка: отсутствует» 'обычно встречается, когда макрос не определен. вы должны убедиться, что все идентификаторы определены. Как только это будет сделано, остальные сообщения об ошибках, вероятно, также будут устранены. – ryyker

ответ

0

Похоже на неопределенный идентификатор или макро ...
Первое из ваших сообщений об ошибках (syntax error: missing ')' before identifier), вероятно, является лучшим ключом к пониманию проблемы , Остальное, вероятно, является следствием того, что может быть вызвано тем, что _IRQL_requires_same_ (или один из других идентификаторов) не определен.

Как указано в сообщении об ошибке, зайдите в файл C:\WinSDK10\Include\10.0.10586.0\km\wdm.h, чтобы узнать, что еще не определено до InformationClass. Затем включите файл заголовка, который предоставляет определение.

(В настоящее время, Там нет информации в сообщении привязав номер строки перечислены в сообщении об ошибке для точной соответствующей строки в исходном коде.)

Эта ссылка содержит информацию о driver annotations (Язык комментариев исходного кода Microsoft (SAL).

+0

Ваша ссылка сломана remove ') .' –

+0

@I. - Да, прости. Исправлена. – ryyker

0

Ошибка указывает, что определение EVENT_INFO_CLASS (Определено в evntprov.h) не обнаружено. Еще одна интересная вещь: вы получаете это для номера строки 31789 для метода EtwSetInformation. Этот метод нужно импортировать только для (NTDDI_VERSION> = NTDDI_THRESHOLD), и вы нацеливаете Win8.1. Что-то здесь не так. Поделитесь диагностическим журналом msbuild. Было бы полезно проанализировать.

2

Обнаружена аналогичная проблема со следующей версией WDK (10.0.14393). Похоже, в обоих случаях проблема различных версий Win SDK и WDK. Решено путем установки соответствующей версии Win SDK. Подробнее в this answer.

+0

Версии WSDK и WDK не всегда совпадают. –