【问题标题】:Problems with stopping file system filter drivers停止文件系统过滤器驱动程序的问题
【发布时间】:2017-10-09 20:47:45
【问题描述】:

我开发了一个简单的过滤器驱动程序。

驱动程序运行良好。

然后我使用“SC STOP”命令卸载驱动程序。

但这并不好,我不得不使用“FLTMC UNLOAD”命令。

我将为我的驱动程序添加几个功能。

“FLTMC UNLOAD”命令停止所有驱动程序的功能似乎有点奇怪。 (我认为)

我想用“SC STOP”命令停止驱动程序。

这可能吗?


以下是修改后的问题。

我现在正在使用 OSRLoader 加载和卸载驱动程序。

但是,当我第一次开发过滤器驱动程序时,它并没有以加载旧版驱动程序的方式加载过滤器驱动程序。

FltRegisterFilter() 发生错误。

我认为我的代码没有错。

但它没有加载,我将驱动类型更改为 MiniFilter 并且它工作正常。

我认为这是 FLTMC 命令和 SC 命令的区别。

为什么 FltRegisterFilter() 不适用于旧版驱动程序?

【问题讨论】:

  • But this did not work well - 你怎么能这么问问题?
  • 我不明白问题出在哪里。 sc 命令用于启动和停止 Windows 服务fltmc 用于加载和卸载 过滤器驱动程序。您开发了一个过滤器驱动程序。因此,fltmc 似乎是正确的工具......我错过了什么?
  • @selbie,某些类型的驱动程序可以使用sc 启动和停止,因为驱动程序和服务共享一些相同的基础架构。我认为文件系统过滤器驱动程序不是这样,但我不能肯定。
  • 嗯……没错……我只想对文件系统过滤驱动程序使用SC命令。我会改变我的问题。我现在使用 OSRLoader 加载和卸载驱动程序。但是,当我第一次开发过滤器驱动程序时,它并没有以加载旧版驱动程序的方式加载过滤器驱动程序。 FltRegisterFilter() 中发生错误。我认为我的代码没有错。但它没有加载,我将驱动程序类型更改为 MiniFilter 并且它工作正常。我认为这是 FLTMC 命令和 SC 命令之间的区别。为什么 FltRegisterFilter() 不适用于旧版驱动程序?
  • An error occurred in - 如果发生错误 - 写出究竟是什么错误,错误代码。这很难理解和做吗? sc 也可以使用微过滤器 - 它询问 services.exe 并调用 ZwUnloadDriverfltmc 调用 FilterUnload 最终调用 FltpDoUnloadFilter 也调用 ZwUnloadDriver

标签: windows driver minifilter


【解决方案1】:

FltRegisterFilter 是一个特定于微过滤器的函数。所有 Flt* API 都是过滤器管理器的一部分,它是在 Windows 2000 SP5 plus 汇总包 IIRC 中引入的。它不适用于旧式过滤器,因为它不应该 - 按照设计。

fltmc unload <driver> 是卸载微型过滤器的首选方式,因为它使您的过滤器有机会在其卸载回调中拒绝卸载。如果您正在编写可以卸载的驱动程序,这可能很有用,但前提是它当前没有过滤某些内容。 sc stop 不允许您有这种灵活性。

【讨论】:

    猜你喜欢
    • 2012-08-11
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多