WDK & Visual Studio 2010
От: Аноним  
Дата: 21.09.10 18:43
Оценка:
Последняя студия и последний WDK — как подружить? Трюк Неббитта не проходит. При попытке подключить ntddk.h в консольном проекте:

/ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\test.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue

пути настроены так, чтобы цеплялись хидеры из WDK, а SDK подавлялись
$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WDK7600)inc\api;$(WDK7600)inc\ddk

stdafx.h

#define _X86_
#define _NT_TARGET_VERSION 0x501
#include <sdkddkver.h>

#define WIN32_NO_STATUS
#include <windows.h>
#undef  WIN32_NO_STATUS

namespace NT 
{

extern "C" 
{

#pragma warning(disable: 4005)  // macro redefinition
#include <ntddk.h>
#pragma warning(default: 4005)

}

}


вылезают редефинишны:

:\winddk\7600.16385.1\inc\ddk\wdm.h(3308): error C2371: 'NT::PSECURITY_QUALITY_OF_SERVICE' : redefinition; different basic types
c:\winddk\7600.16385.1\inc\ddk\wdm.h(87) : see declaration of 'NT::PSECURITY_QUALITY_OF_SERVICE'
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): error C2144: syntax error : 'int' should be preceded by ';'
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): error C2143: syntax error : missing ';' before '__stdcall'
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): error C2433: 'LARGE_INTEGER' : 'inline' not permitted on data declarations
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): error C2377: 'NT::LARGE_INTEGER' : redefinition; typedef cannot be overloaded with any other symbol
c:\winddk\7600.16385.1\inc\api\ntdef.h(944) : see declaration of 'NT::LARGE_INTEGER'
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8844): error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8845): error C2146: syntax error : missing ';' before identifier 'Result'
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8845): error C2065: 'Result' : undeclared identifier
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8847): error C2065: 'Result' : undeclared identifier
c:\winddk\7600.16385.1\inc\ddk\wdm.h(8847): error C2228: left of '.QuadPart' must have class/struct/union
type is ''unknown-type''

видимо, надо поставить какие-то дефайны? у кого-нибудь есть какие-то мысли? или готовое решение?
спасибо
Re: WDK & Visual Studio 2010
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 21.09.10 20:53
Оценка:
А>Последняя студия и последний WDK — как подружить? Трюк Неббитта не проходит. При попытке подключить ntddk.h в консольном проекте:

ntddk.h нельзя использовать вместе с windows.h

Кстати, почему бы не строить общепринятым и единственным официально рекомендованным методом — самим WDK? А со студией подружить с помощью того же ddkbuild, например?

PS Неббет вообще не самый правильный автор для подражания \ использования.
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: WDK & Visual Studio 2010
От: Аноним  
Дата: 21.09.10 21:41
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

А>>Последняя студия и последний WDK — как подружить? Трюк Неббитта не проходит. При попытке подключить ntddk.h в консольном проекте:


VAB>ntddk.h нельзя использовать вместе с windows.h


лошади кушают овёс и сено

VAB>Кстати, почему бы не строить общепринятым и единственным официально рекомендованным методом — самим WDK? А со студией подружить с помощью того же ddkbuild, например?


понятное дело, мне просто нужно сделать несколько нэйтивных вызовов. а я вдруг обнаружил, что хидер, которым я пользовался раньше, не совсем точен. поэтому идеальным вариантом было бы подключить ддк хидеры и вытянуть оттуда структуры и прототипы функций. а так мне придётся либо весь проект преносить на ddk buikd либо использовать две билд системы.

раз уж зашёл разговор, то не могли бы вы коротко сравнить visual ddk и ddkbuild?

VAB>PS Неббет вообще не самый правильный автор для подражания \ использования.


иногда приходится пользоваться такими методами
Re: WDK & Visual Studio 2010
От: EFiR  
Дата: 21.09.10 22:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Последняя студия и последний WDK — как подружить?


используйте makefile project и бат файлы приблизительно такого содержания


rem
rem Dirddk == подправить путь к вашему DDK
rem

        set Dirddk=D:\winddk\7600.16385.1

        call %Dirddk%\bin\setenv.bat %Dirddk% %1 %2

rem
rem dir == current directory
rem

        set dir="%~dp0"

        cd /d %dir%

        build -ceZ
Re[3]: WDK & Visual Studio 2010
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 21.09.10 22:53
Оценка:
А>>>Последняя студия и последний WDK — как подружить? Трюк Неббитта не проходит. При попытке подключить ntddk.h в консольном проекте:
VAB>>ntddk.h нельзя использовать вместе с windows.h
А>лошади кушают овёс и сено
Попробуйте windef.h \ ntdef.h вместо windows.h на старте stdafx.h — поможет собраться?

VAB>>Кстати, почему бы не строить общепринятым и единственным официально рекомендованным методом — самим WDK? А со студией подружить с помощью того же ddkbuild, например?

А>понятное дело, мне просто нужно сделать несколько нэйтивных вызовов. а я вдруг обнаружил, что хидер, которым я пользовался раньше, не совсем точен. поэтому идеальным вариантом было бы подключить ддк хидеры и вытянуть оттуда структуры и прототипы функций.
верно, если нужно просто собраться в UM — вырезайте недостающие (убедитесь, что их совсем нет в фолдере <SDK>\inc) определения в свой заголовок. Либо можно разносить код использующий windows.h и ntddk.h по разным единицам трансляции (.cpp файлам).

А>а так мне придётся либо весь проект преносить на ddk buikd либо использовать две билд системы.

А>раз уж зашёл разговор, то не могли бы вы коротко сравнить visual ddk и ddkbuild?
к сожалению, Visual DDK не пользовался.

Когда-то давно (во времена Неббета ) тоже сидел на самопально сгенеренных всякими driver wizard & клонированных студийных проектах. А сейчас просто не вижу смысла, т.к. подключение ddkbuild в студию через создание проекта типа makefile (при уже настроенных WDK & ddkbuild) делается за минуту и является официальным способом постройки kernel mode code. Так что 2 build системы тут не нужно — достаточно иметь установленный правильно WDK и пару env variables для корректной работы с ddkbuild. Если речь идет об использовании хеадеров из WDK — все это уже все равно должно быть и на вашей основной build системе установлено, ничего сверх (и тем более еще одну билд систему) тут городить не придется.

Разумеется, здесь мы уже говорим про сборку ядерного кода — а если у Вас проект UM консольный, то см пару вариантов как быть выше, ddkbuild в этом случае не нужен.
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[4]: WDK & Visual Studio 2010
От: Аноним  
Дата: 22.09.10 00:21
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

А>>>>Последняя студия и последний WDK — как подружить? Трюк Неббитта не проходит. При попытке подключить ntddk.h в консольном проекте:

VAB>>>ntddk.h нельзя использовать вместе с windows.h
А>>лошади кушают овёс и сено
VAB>Попробуйте windef.h \ ntdef.h вместо windows.h на старте stdafx.h — поможет собраться?

было и windef.h и ntdef.h. что характерно, и windows.h это не из SDK, а из WDK (да-да, в WDK есть windows.h) и всё примерно то-же. дублированные определения есть в WDK, и мне не удалось настроить среду так, чтобы они не мешали друг другу. то есть проблемы не из-за интерференции SDK и WDK.


VAB>>>Кстати, почему бы не строить общепринятым и единственным официально рекомендованным методом — самим WDK? А со студией подружить с помощью того же ddkbuild, например?

А>>понятное дело, мне просто нужно сделать несколько нэйтивных вызовов. а я вдруг обнаружил, что хидер, которым я пользовался раньше, не совсем точен. поэтому идеальным вариантом было бы подключить ддк хидеры и вытянуть оттуда структуры и прототипы функций.
VAB>верно, если нужно просто собраться в UM — вырезайте недостающие (убедитесь, что их совсем нет в фолдере <SDK>\inc) определения в свой заголовок. Либо можно разносить код использующий windows.h и ntddk.h по разным единицам трансляции (.cpp файлам).

А>>а так мне придётся либо весь проект преносить на ddk buikd либо использовать две билд системы.

А>>раз уж зашёл разговор, то не могли бы вы коротко сравнить visual ddk и ddkbuild?
VAB>к сожалению, Visual DDK не пользовался.

VAB>Когда-то давно (во времена Неббета ) тоже сидел на самопально сгенеренных всякими driver wizard & клонированных студийных проектах. А сейчас просто не вижу смысла, т.к. подключение ddkbuild в студию через создание проекта типа makefile (при уже настроенных WDK & ddkbuild) делается за минуту и является официальным способом постройки kernel mode code. Так что 2 build системы тут не нужно — достаточно иметь установленный правильно WDK и пару env variables для корректной работы с ddkbuild. Если речь идет об использовании хеадеров из WDK — все это уже все равно должно быть и на вашей основной build системе установлено, ничего сверх (и тем более еще одну билд систему) тут городить не придется.


VAB>Разумеется, здесь мы уже говорим про сборку ядерного кода — а если у Вас проект UM консольный, то см пару вариантов как быть выше, ddkbuild в этом случае не нужен.


вообщем, раз готового рецепта нет, то выберу наиболее простой способ — поправлю определения в ранее используемом хидере.
Re[5]: WDK & Visual Studio 2010
От: _cb_  
Дата: 22.09.10 06:02
Оценка:
А>вообщем, раз готового рецепта нет, то выберу наиболее простой способ — поправлю определения в ранее используемом хидере.

имхо оптимальнее сделать как тебе уже советовали — "разнеси код использующий windows.h и ntddk.h по разным единицам трансляции (.cpp файлам)".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.