Компиляция драйвера VS2008

Тема в разделе "WASM.NT.KERNEL", создана пользователем simnet_, 24 дек 2009.

  1. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    VS 2008 при компиляции выдает

    1>.\Init.c(19) : warning C4013: 'KeSetEvent' undefined; assuming extern returning int
    1>.\Init.c(34) : warning C4013: 'ExFreePool' undefined; assuming extern returning int
    1>.\Init.c(35) : warning C4013: 'ExAllocatePool' undefined; assuming extern returning int
    ....и т. д.

    подключаю и ntddk.h, и wdm.h для верности. Судя по заголовочным файлам, у меня не выполняется условие
    #if (NTDDI_VERSION >= NTDDI_WIN2K)
    ....
    #endif
    (иначе б компилятор нашел объявления). Вы не знаете, как можно явно указать версию этого NTDDI?
    при попытке написать
    #define NTDDI_VERSION 0x5010000
    (это WinXP), получаю

    #error : NTDDI_VERSION setting conflicts with _WIN32_WINNT setting

    компилирую в Win7, WDK 7600. Что я не так делаю?
    При компоновке подключаю только ntoskrnl.lib, но кажется не только в этом проблема (хотя линкер тоже не хочет собирать, мне бы пока только откомпилировать.. :) )

    Самые простые драйверы, не содержащие эти и некоторые другие ф-ции, студия компилирует.
    Спасибо!
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    _X86_ определен?
    И всё же для верности нужен исходник.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Глянь при каком условии это выполняется?
    Попробуй #define _WIN32_WINNT 0x0600
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    у меня постоянно выскакивают такие ворнинги, но драйвер компилируется и работает работает отлично)))
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Код (Text):
    1. #ifndef NTDDI_VERSION
    2. #ifdef _WIN32_WINNT
    3. // set NTDDI_VERSION based on _WIN32_WINNT
    4. #define NTDDI_VERSION   NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
    5. #else
    6. #define NTDDI_VERSION   0x06000000
    7. #endif
    8. #endif
    Т.е. просто нужно указать нужное значение _WIN32_WINNT, а NTDDI_VERSION вычислится автоматически. Либо указывать неконфликтующие значения:

    Код (Text):
    1. #if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_LONGHORN) && (_WIN32_WINNT != _WIN32_WINNT_LONGHORN))
    2. #error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
    3. #endif
     
  6. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Great
    Спасибо это помогло, непонятно только, почему оно неправильно было установлено по умолчанию. Может я что-то забыл подключить?