Настройки проекта в Visual Studio 7 Net
Настройка проекта для компиляции и сборки драйвера режима ядра существенно отличаются от настроек, которые используются для работы с приложениями и динамическими библиотеками пользовательского режима. Ниже приводится точный текст файл Example.sln ("sln" является сокращением от "solution"), который описывает проект драйвера Example, рассматриваемого в следующей главе.
Microsoft Visual Studio Solution File, Format Version 7.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Example", "Example.vcproj", "{E524BA09-7993-4528-91A9-7E27FAA3565F}" EndProject Global GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Checked EndGlobalSection GlobalSection(ProjectDependencies) = postSolution EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {E524BA09-7993-4528-91A9-7E27FAA3565F}.Checked.ActiveCfg = Checked|Win32 {E524BA09-7993-4528-91A9-7E27FAA3565F}.Checked.Build.0 = Checked|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal
Значительно более важным в проекте Example является файл Example.vcproj, который содержит конкретные значения настроек и описания используемых файлов. Точный текст Example.vcproj (файла настроек для компиляции и сборки простейшего не-WDM драйвера checked-версии в среде Visual Studio 7 Net) приводится ниже.
<?xml version="1.0" encoding = "windows-1251"?> <VisualStudioProject ProjectType="Visual C++" Version="7.00" Name="Example" SccProjectName="" SccLocalPath=""> <Platforms><Platform Name="Win32"/></Platforms> <Configurations> <Configuration Name="Release|Win32" OutputDirectory=".\checked" IntermediateDirectory=".\checked" ConfigurationType="2" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="1"> <Tool Name="VCCLCompilerTool" AdditionalOptions="/Zel -cbstring /QIfdiv- /QIf /Gi- /Gm- /GX" Optimization="0" EnableIntrinsicFunctions="FALSE" OmitFramePointers="TRUE" OptimizeForProcessor="2" AdditionalIncludeDirectories="C:\WinDDK\2600\inc\ddk\w2k; C:\WinDDK\2600\inc\w2k;C:\WinDDK\2 600\inc\crt" PreprocessorDefinitions="_X86_=l;i386=l; CONDITION_HANDLING=1;NT_UP=1; NT_INST=0; WIN32=100;_NT1X_=100;WINNT=l; _WIN32_WINNT=0x0400;WIN32_LEAN_AND_MEAN=1; DEVL=l;DBG=l;FPO=0" IgnoreStandardIncludePath="TRUE" StringPooling="TRUE" ExceptionHandling="TRUE" RuntimeLibrary="O" StructMemberAlignment="4" BufferSecurityCheck="FALSE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\checked/Example.pch" AssemblerListingLocation=".\checked/" ObjectFile=".\checked/" ProgramDataBaseFileName=".\checked\Example.pdb" WarningLevel="3" SuppressStartupBanner="TRUE" DebugInformationFormat="l" CallingConvention="2" CompileAs="0" ForcedIncludeFiles="warning.h"/> <Tool Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" AdditionalOptions="" AdditionalDependencies="hal.lib ntoskrnl.lib int64.1ib msvcrt.lib " OutputFile=".\checked\Example.sys" Version="5.0" LinkIncremental="l" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="C:\WinDDK\2 600\lib\w2k\i386" IgnoreAllDefaultLibraries="TRUE" ProgramDatabaseFile=".\checked/Example.pdb" GenerateMapFile="TRUE" MapFileName="Example.map" StackReserveSize="262144" StackCommitSize="4096" OptimizeReferences="2" EnableCOMDATFolding="2" EntryPointSymbol="DriverEntry" SetChecksum="TRUE" BaseAddress="0x10000" ImportLibrary="" MergeSections=".rdata=.text" TargetMachine="1"/> <Tool Name="VCMIDLTool" MkTypLibCompatible="TRUE" SuppressStartupBanner="TRUE" TargetEnvironment="1" TypeLibraryName=".\checked/Example.tlb"/> <Tool Name="VCPostBuildEventTool"/> <Tool Name="VCPreBuildEventTool"> <Tool Name="VCPreLinkEventTool"/> <Tool Name="VCResourceCompilerTool"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> </Configuration> </Configurations> <Files> <Filter Name="Header Files" Filter=".h"> <File RelativePath=".\Driver.h"> </File> </Filter> <Filter Name="Source Files" Filter=".c;.cpp"> <File RelativePath="Init.cpp"> </File> </Filter> </Files> <Globals></Globals> </VisualStudioProject>
Приведенный выше текст переформатирован (для удобства чтения в формате книги), поэтому расположение слов несколько отличается от их размещения в оригинальных .vcproj файлах, генерируемых средой Visual Studio 7 Net. Значения строковых параметров AdditionalIncludeDirectories и PreprocessorDefinitions обязательно должны быть записаны в одну строку. |
Из параметров сборки следует отметить параметры IgnoreAllDefaultLibraries (здесь он отменяет использование библиотек, назначаемых в Visual Studio по умолчанию), AdditionalLibraryDirectories и AdditionalDependencies (они определяют используемые библиотеки — в данном случае для сборки не-WDM драйвера под Windows 2000), BaseAddress (обязательно следует указать равным 0x10000) и "неприметный" коварный параметр SetChecksum (должен быть "TRUE").
Все эти параметры можно настроить интерактивно и в самой интегрированной среде Visual Studio, однако, затем рекомендуется сравнить содержимое файла .vcproj с приведенным текстом, стараясь получить полное совпадение.