2011-03-18 45 views
0

我想开发一个NDIS过滤器驱动程序。但是,我似乎无法加载它。 我有debugtestsigning启动选项启用;我的驱动程序已经过测试签名,证书已加载到roottrustedpublisher商店中。NDIS过滤器驱动程序不加载在Windows 2008 R2

我启用testsigning之前,我的司机会在ntbootlog.txt显示为

没有加载驱动程序\ systemroot \ System32中\ DRIVERS \ mydriver.sys

我启用testsigning后,司机根本没有出现。然而,它在界面属性中提出。即使我的驱动程序目前是一个非常小的pass-through NDIS过滤器驱动程序,直到我禁用了我的过滤器,该界面都会中断。当我禁用我的过滤器时,再次正常工作。

该驱动程序未在windbg的模块列表中列出,但其列在“未加载模块”列表中,这表明驱动程序已在某个时间加载。 我的驱动程序在DriverEntryDriverUnload以及所有必需的NDIS挂钩期间都会生成一些输出。这个输出没有出现在windbg的!dbgprint中,这表明驱动程序的DriverEntry从未被调用过。

我很茫然如何调试这个问题;任何人都可以给我一些关于这里可能发生的事情的提示吗?

我正在使用Windows 2008 R2 DataCenter,检查构建。我目前仅限于一台机器设置。

+0

从示例驱动程序开始解决了我的问题。 下面的所有答案似乎假设驱动程序条目被调用,而这显然不是这种情况 – Ondergetekende 2011-03-31 11:10:21

回答

0

尝试首先加载一个简单的驱动程序,该驱动程序只在DriverEntry中打印一个跟踪字符串,测试它的签名并加载它。如果你看到踪迹,我们会试着了解你的特定驾驶员有什么问题。如果没有,可能是系统禁用了内核跟踪,并且由于问题导致您的NDIS驱动程序未加载,因为系统跟踪已禁用,所以您当然不会看到这个问题。

+0

我正在编写调试消息作为DriverEntry中的第一件事。它不会显示在dbgprint缓冲区中。 – Ondergetekende 2011-03-20 17:35:06

+1

默认情况下,在Vista/Server2008中禁用DbgPrint()输出。您可以按照注册表中的以下设置启用调试打印。 打开注册表并转到此路径“HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Debug Print Filter”并添加以下值“DEFAULT”:REG_DWORD:0xFFFFFFFF,然后重新启动。如果不存在,您可能必须创建“调试打印过滤器”键。 – MindBlower 2011-04-02 08:47:12

0

如果驱动程序显示在未加载的模块列表中,则它已加载。

如果您使用DbgPrint请确保您阅读MSDN文档,特别是关于过滤的部分。

要赶上驱动程序加载,您可以使用sxe ld:mydriver这将允许您在您的驱动程序条目中设置断点。另一种简单的调试方法是在DriverEntry中添加一个硬编码的断点DbgBreakPoint()

相关问题