【问题标题】:How do I "install" a custom-windows driver?如何“安装”自定义 Windows 驱动程序?
【发布时间】:2011-12-11 08:03:09
【问题描述】:

我打算用 C 编写一个基本的 Windows 注册表过滤器。过滤器的目的是挂钩所有(用户和内核特权)注册表调用,以便我可以在我的程序中使用它们。我基本上是在复制 Mark Rusinovich 的 regmon/process monitor,但更基本。

我的问题是,一旦过滤器是用 C 编写的,如何让系统实现自定义行为而不实现注册表调用的原始预期行为?

我使用的是 Windows 7

编辑:我正在尝试将此作为爱好 c++ 项目的一部分,该项目可以挂钩所有注册表调用。

【问题讨论】:

    标签: c windows registry kernel driver


    【解决方案1】:

    有一些特殊的功能。请参阅 MSDN 上的 CmRegisterCallback()CmRegisterCallbackEx()Filtering Registry Calls

    至于只安装内核模式驱动程序,您可以使用服务控制器(sc.exe)。使用sc create [service name] binPath= [path to your .sys file] type= kernel 创建内核模式服务并使用sc start [service name] 启动它。在更改驱动程序之前不要忘记sc stopsc delete

    【讨论】:

    • 嗨,您能否重复/详细说明您刚才所说的内容,但步骤要小一些。目前我有一些 C 语言示例代码,我将查看并确定我需要哪些部分,但我不是这些开发领域的专家。您是说我可以通过编译和运行 C 代码从 cmd 命令提示符启动我的驱动程序吗?
    • @user997112:是的,当您的 driver.sys 最终编译完成时,您可以从命令行启动它。请注意,它必须编译为驱动程序,而不是程序,使用内核模式 API 函数,并以所有内核驱动程序的特殊方式构造(例如,具有 DriverEntryRoutine(),可卸载,除非您可以在每次需要时重新启动改变它,内核模式驱动程序的开发远不止这些)。
    • 好的,谢谢,只有一个问题:您提到了一个名为 driver.sys 的文件,它会包含我的 C 代码吗?这将是我生成的唯一文件,然后我就按照你说的那样运行它?我以为我只会生成一个包含所有 C 代码的 .c 文件?
    • @user997112:您不需要将源代码(.c 文件)编译为二进制文件(例如 .exe)来执行它吗?与驱动程序相同。
    • 嗨,Alex,我现在有了更多想法。我遵循了一些创建简单驱动程序的在线示例,以便了解 .exe、.sys 和 .c 文件之间的关系
    【解决方案2】:

    基本上,驱动程序被视为服务,因此您可以使用Service COntrol manager 使用上述 API,您基本上实现的是注册表中 Services 键下的相应条目。有关如何实现此检查的示例this 文章,请滚动到底部到名为“动态加载和卸载驱动程序”的部分。此外,如果您想实现简单的调试/开发并使用 VS2k10,我建议您使用免费的VisualDDK,我相信这足以让您继续前进。

    【讨论】:

    • 感谢您的回复。我设法获得了所有 .c 和 .h 文件中的 regmon 源代码的副本。我是否正确,这将不包含与您提到的服务细节相关的任何内容?服务驱动程序注册会是 .exe 安装程序会做的事情吗?
    • 是的,我不知道 regmon 的结构,但通常安装程序的工作方式是将驱动程序作为资源嵌入其中,因此一旦您启动它们,它们就会解压缩然后安装它使用服务控制管理器例程或其他方法(归结为同一件事)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多