如何在内核中向用户显示消息,而消息只能由内核访问

时间:2012-03-07 11:34:23

标签: windows security kernel device-driver

目前我正在开发可以保护用户密码的Windows驱动程序,我想在用户激活保护时向用户显示一条消息,表明驱动程序已经开始工作。但是,如果恶意软件可以伪造此消息而实际上驱动程序根本不起作用,则用户空间无法访问此消息。此消息由用户定义,因此我无法在驱动程序中编写它。 我在互联网上搜索了答案,但都失败了。我曾尝试使用bcdedit.exe编辑启动参数,但我不知道如何在驱动程序中获取此消息。谁有好主意?只要用户空间应用程序无法访问该消息,并且此消息来自用户。谢谢!

1 个答案:

答案 0 :(得分:0)

(这是一个答案,但请阅读有关威胁模型的脚注)

  1. 在过滤器中,请致电FltCreateCommunicationPortPFLT_MESSAGE_NOTIFY MessageNotifyCallback参数是指向消息传递回调函数的指针。
  2. 您的客户将致电FilterSendMessage将讯息发送给司机
  3. 在您的驱动程序的回调函数(MessageNotifyCallback)中,存储用户选择的消息。小心内存对齐。
  4. 如果需要,您的客户端会再次调用FilterSendMessage,这次要检索它发送给驱动程序的字符串。
  5. 调用FltCloseCommunicationPort和其他清理功能。
  6. 在WDK安装的findstr /s FltCreateCommuncationPort *.c目录中键入src。查找任何Microsoft过滤器示例以尝试您的想法,它将帮助您快速启动并运行。完成后将工作代码复制到过滤器。

    但是考虑你的线程模型。要么我不明白(很可能;)或者这不值得努力。为什么不检查您的驱动程序是否已安装,正在运行且数字签名是否有效?

    也许你可以通过告诉我们用户模式代码如何知道它首先将字符串(要显示的消息)发送给合法的驱动程序来更新你的OP?