问题标签 [kernel-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
524 浏览

c++ - 如何将 char *(char 指针)转换为 PCSZ?

我有一个具有强制参数 as 的方法,char*我想转换为PCSZbeforeRtlInitiAnsiString()uNameafter的结果RtlAnsiStringToUnicodeString()是正确的值。

我怎样才能做到这一点?

第 1 版:

为了更好地理解这里是如何MyMethod()在我的内核驱动程序中使用:

0 投票
0 回答
225 浏览

driver - HLK Studio - 使用并行缩短 MiniFilter 测试持续时间

我也在Microsoft 论坛中发布了相同的问题,但似乎已经死了......也许这里有人可以提供帮助。

经过多次反复试验,我们终于成功地为我们的 MiniFilter 驱动程序设置了一个完全自动化的测试环境,作为我们持续集成系统 (Jenkins) 的一部分。这与安装在 1 个服务器上的 HLK Studio 和 1 个附加客户端(Windows 10)一起运行良好。

整个测试周期现在大约需要 7 个小时才能完成。我们设置了 2 台额外的客户端计算机,并希望通过拆分测试并在多台相同的机器上并行运行它们来缩短 MiniFilter 驱动程序认证周期。我们可以看到这个概念存在于 HLK Studio 产品(“分布式测试”)中,但由于某种原因,它不适用于“软件设备”(在我们的例子中是 MiniFilter)。

我们还考虑过手动拆分测试,并行创建多个 HLKX 文件然后合并它们(“深度合并”),但根据HLK 文档,即使这样也是不允许的。

现在微软强迫我们提交驱动程序进行签名(否则,具有“安全启动”功能的计算机将拒绝加载驱动程序),这正在成为一个关键任务过程。

有没有人成功地并行运行这些测试,缩短了测试时间?

0 投票
1 回答
867 浏览

c++ - 内核模式:如何逐行读取 txt 文件?

我需要读取 txt 文件的每一行并将这一行作为参数传递给方法。

我找到了这个例子:

参考

但这会读取文件的所有内容,而不是逐行读取。

关于如何做到这一点的一些想法?

0 投票
1 回答
364 浏览

linux - linux系统调用使用自旋锁将值返回给用户空间

我目前正在努力正确实现内核自旋锁以及返回语句,该语句应该返回一个值给用户空间。我实现了一个内核系统调用“sys_kernel_entropy_is_recording”,它应该返回一个内核变量“is_kernel_entropy_recording”的值:

此时出现两个问题:

Q1:这个实现是否正确,意味着'is_kernel_entropy_recording'的正确值会返回到用户空间,然后释放自旋锁?

我的担忧是:

  • a) 是否允许以这种方式将值从内核空间返回到用户空间?
  • b) return 语句位于spin_unlock 语句之前,因此 spin_unlock 会被调用吗?

Q2:为了自己回答这些问题,我反汇编了编译的 .o 文件,但确定(至少它看起来像)编译器完全忽略了 spin_lock/spin_unlock 调用,因为它只是将 'sys_kernel_entropy_is_recording' 的值移动到 eax调用ret(我不确定'callq 0xa5'行):

因此,我猜自旋锁的应用是不正确的。有人可以给我一个适当方法的建议吗?提前非常感谢!

0 投票
1 回答
218 浏览

operating-system - 更改任何寄存器(DR、IR 等)的值是否需要从用户模式切换到内核模式?

1)所以在我正在阅读的书中说,例如更改 IR 寄存器不需要从用户模式切换到内核模式,但我不明白,我怎么知道它是否需要切换?

2)还有其他寄存器呢,比如DR、PSW、PC等,我怎么知道它是否需要切换?

3)最后一个问题是,在某些时候这本书说:改变“内存管理寄存器”的值需要内核模式,但我什至不知道这个寄存器是什么?!

0 投票
0 回答
29 浏览

operating-system - 当一个主体为空的C程序执行时,它是否只涉及用户模式?

通常,当程序开始执行时,它从用户模式开始,然后根据代码的主体,如果需要进入内核/系统模式,并最终以合法退出的用户模式退出。但请考虑以下 C 程序prog1.c

我认为这个程序/进程只在用户模式下运行。特别是,我也认为这个程序/进程永远不会涉及任何内核模式。但想知道专家的意见。

谢谢,SS

0 投票
1 回答
582 浏览

java - 从内核模式驱动程序调用 java 程序

我有一个命令行 java 程序,我需要从内核模式驱动程序(Windows 上的 MiniFilter 驱动程序)调用它。

可能吗 ?有什么我需要注意避免问题的吗?我怎样才能做到这一点 ?

0 投票
0 回答
373 浏览

c - 驱动程序卸载通知

我对 Windows 开发非常陌生,特别是在驱动程序创建领域。我想创建一个驱动程序,每当卸载另一个驱动程序(任何类型的驱动程序,但最好不是设备驱动程序)时都会收到通知。到目前为止(我可能弄错了)我还没有找到任何允许我实现它的回调函数。

以下是我的问题:

1.) 有一个函数可以让我检测驱动程序负载 (PsSetLoadImageNotifyRoutine/Ex)。有人告诉我,也许我可以获取另一个驱动程序的驱动程序对象并将我的函数设置在从那里卸载的驱动程序中,但我还没有找到任何函数可以做到这一点。是否有在卸载驱动程序时直接获取通知的功能?如果没有,是否有获取驱动程序对象的功能?

2.)因为我还没有找到第一种“方式”的功能。现在我正在尝试使用“事件”来实现这一点。当我在 WinDbg 中运行“.eventlog”时,它显示“模块已卸载”消息。现在我的问题是,有没有办法在使用 C 的驱动程序中收听这个事件?我只能看到用于消费这些事件的工具。如果没有,我可以只读取“.eventlog”文件并进行处理吗?如果是这样,“.eventlog”文件的名称应该是什么?

0 投票
0 回答
1523 浏览

windows - Windows 7,数字签名驱动程序显示警告:Windows 无法验证此驱动程序软件的发布者

我正在尝试安装一个结构简单的 Windows USB 驱动程序(仅包含以下内容 -

  • 应用程序.inf,
  • 应用程序.cat
  • WdfCoInstaller01005.dll
  • WinUSBCoInstaller.dll

)。该驱动程序使用Digicert 颁发的有效标准内核模式代码签名证书进行sha 256签名。当我看到文件的属性时,我可以在app.cat文件中看到数字签名。我正在尝试在安装了所有最新更新(包括KB3033929)的 Windows 7 SP1 64 位机器中通过install-shield setup 安装驱动程序。它仍然显示警告Windows 无法验证此驱动程序软件的发布者。

为了解决这个问题,我尝试按照 Stackoverflow 链接之一的建议在目标机器中安装证书。还是没有希望。

在生成 .cat 文件和签署 .cat 文件的过程中,我使用了以下命令。(没有 .sys 文件)

编辑添加更多信息。

数字签名信息

安装驱动程序时出错

我也尝试过 Sha256 签名(来自https://www.digicert.com/code-signing/driver-signing-in-windows-using-signtool.htm (部分:Internet Explorer 或 Chrome for Windows)

我仍然遇到同样的错误。

编辑 2-添加 Inf 文件的源

请参考下面的.inf 文件的来源(可能有点旧)。

我也验证了反签名的详细信息。请参考下图。

  • 用于交叉签名的证书指纹(指纹:2f 25 13 af 39 92 db 0a 3f 79 70 9f f8 14 3b 3f 7b d2 d1 43 DigiCert High Assurance EV Root CA 的交叉证书)
  • 从签名文件的属性可以看出交叉签名证书的指纹是‎40 01 91 47 5c 98 89 1d eb a1 04 af 47 09 1b 5e b6 d4 cb cb(我不知道它是否正确)

在此处输入图像描述

请帮忙。我花了很多时间在这上面,但最终还是没有结果。对此的任何帮助都将非常可观。

0 投票
2 回答
1729 浏览

c++ - 简单的内核模式驱动程序

我正在创建简单的内核模式驱动程序(空项目)来尝试一些

用户模式应用程序上的读/写内存操作。

我在编译项目时遇到错误在这些行上:

VS编译错误:

这是我的代码:也使用相同的 SDK 和 WDK 版本

我究竟做错了什么?我该如何改进,有什么建议吗?谢谢。