NtLoadDriver 系统调用提供 C0000258 错误代码

问题描述

希望大家身体健康


我正在编写一个驱动程序加载器,它使用系统调用来实现其大部分功能作为一个爱好项目(在 C# 中,只是为了清楚起见)

我已经实现了两打以上的系统调用,它们似乎都按预期工作。因此,汇编系统调用并从内存中执行它们的代码没有任何问题。

然而,一个系统调用,'NtLoadDriver' 在它应该工作的情况下总是失败。即,

  1. 驱动程序服务应在“\Registry\Machine\System\CurrentControlSet\Services”下注册,并使用适当的值
  2. 调用程序应将 LoadDriverPrivilege 设置为启用
  3. 调用程序已提升,具有管理员权限

NTSTATUS 代码为:STATUS_NO_CALLBACK_ACTIVE C0000258

说明:当没有回调处于活动状态时,无法执行回调返回系统服务。

不幸的是,这是一个我无法理解的错误。也许有人可以更简单地解释一下。


我使用 OSR Driver Loader 来测试服务是否已注册/未注册或正在运行/停止。我可以确认该服务已注册,并且可以使用 OSR Driver Loader 启动和停止。而且我还可以在驱动程序启动后获取它的句柄。


我运行了一个测试,看看我的 NtLoadDriver 函数签名是否错误,或者我使用的 UNICODE_STRING 结构是否错误。 所以,我从 ntdll.dll DllImported NtLoadDriver 并使用它进行测试。我使用了与系统调用委托相同的签名,并传入了完全相同的参数。

令我惊讶的是,它似乎完美地工作并给出了成功的结果 (NT_SUCCESS)。


所以问题归结为:当通过系统调用直接调用时,为什么 NtLoadDriver 不起作用?为什么它在使用 ntdll 导出时有效?

我的猜测是 ntdll.dll 做了一些初始化,并围绕 NtLoadDriver 编写了一些代码,使其工作。我没有逆向工程能力来实际确认这一点。


任何帮助将不胜感激。

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)