【问题标题】:Compiling a Windows 8 minifilter Driver for Windows 7为 Windows 7 编译 Windows 8 微过滤器驱动程序
【发布时间】:2015-01-19 04:31:17
【问题描述】:

是否可以编译 Windows 7 的 MSDN 示例中给出的 AVScan Minifilter?因为它的目标客户端是 Windows 8。我正在使用带有 WDK 8.1 的 Visual Studio 2013,示例项目在配置管理器中没有 Win7 调试/发布。如果有可能怎么办?请指导我。

【问题讨论】:

    标签: c++ visual-studio-2013 driver wdk minifilter


    【解决方案1】:

    我必须做类似的事情(必须为 win 7 x64 构建更改微过滤器驱动程序)。我刚刚从 minispy fs minifilter 驱动程序的项目文件中复制了设置,该驱动程序具有工作的 win7 配置。所以你需要做的是:

    • 在配置管理器中添加一个名为“Win7 Debug”的新配置。保存并关闭。
    • 在记事本中打开 AVScan minifilter C++ 项目
    • 覆盖项目文件中的这些部分:

      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'" Label="Configuration">
      <TargetVersion>Win7</TargetVersion>
      <UseDebugLibraries>True</UseDebugLibraries>
      <DriverType>WDM</DriverType>
      <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
      <ConfigurationType>Driver</ConfigurationType>
      </PropertyGroup>
      
      
      <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'">
      <Link>
        <AdditionalOptions>%(AdditionalOptions) /map</AdditionalOptions>
        <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\fltMgr.lib</AdditionalDependencies>
      </Link>
      <ClCompile>
        <TreatWarningAsError>true</TreatWarningAsError>
        <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
        <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN2K_COMPAT_SLIST_USAGE</PreprocessorDefinitions>
        <ExceptionHandling>
        </ExceptionHandling>
      </ClCompile>
      <ResourceCompile>
        <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
        <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN2K_COMPAT_SLIST_USAGE</PreprocessorDefinitions>
      </ResourceCompile>
      <Midl>
        <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
        <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN2K_COMPAT_SLIST_USAGE</PreprocessorDefinitions>
      </Midl>
      </ItemDefinitionGroup>
      
    • 保存并关闭。

    • 在 VS 中打开并构建!

    【讨论】:

    • 进行上述更改后,项目无法加载
    • 也许你缺少一个 xml 标签。您可以打开项目文件并检查您是否确实缺少一个?在上面的答案中,&lt;/PropertyGroup&gt; 标签丢失了。我现在已经添加了。
    • 是的,我已经关闭了标签,但问题仍然存在,无法加载项目
    【解决方案2】:

    没有必要为 Windows 7 或不同版本的操作系统提供单独的二进制文件,但需要满足一些条件。

    驱动程序二进制文件只是普通的旧可执行文件,就像 DLL 或 EXE 一样。他们有一个 PE 标头 IAT 等。

    只要您编译的驱动程序不尝试调用该操作系统不支持的 API,您应该没问题。 对于这些 API 或函数,如果您运行的版本通过 MmGetSystemRoutineAddress 或 FltGetRoutineAddress 支持它们,则只需动态加载它们。

    因此,只需使用您计划支持的最低操作系统版本编译您的驱动程序,然后祝您好运。

    干杯,
    加布里埃尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2013-08-20
      • 2019-02-23
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多