将我的应用程序与内核连接的最佳方法是什么?

时间:2012-04-05 20:37:35

标签: c++ windows winapi kernel

我知道可以通过谷歌搜索来回答这个问题。但我花了几个晚上寻找尝试让我的应用程序与我的编程驱动程序连接。 当我开始搜索时,我阅读了一些如何在用户模式和内核模式之间共享信息的技术,这些技术是:

•I / O请求

•同步和通知

•共享句柄

•共享内存

white paper解释了这些技巧。但我很困惑!哪种技术最好???? 对于I / O请求:嗯......,我不明白它的完整性,但我知道(简要地)关于它在应用程序请求I / O操作时交换数据,并且msdn article解释I / O控制代码。

我已经阅读了很多复杂的文章,但我不知道让我以正确的方式让我的程序快速运行的道路,毫不拖延地与驱动程序交换数据。

所以,我问:将我的应用程序与内核连接的最佳方式是什么? 我的意思是“最好的方式”。 这是我的驱动程序代码:

#include <ntddk.h>

VOID
Unload(
    IN PDRIVER_OBJECT DriverObject
)
{
    DbgPrint("Driver Unloaded");
};


NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPathName
)
{
    DbgPrint("Driver Loaded");
    DriverObject->DriverUnload = Unload;
    return STATUS_SUCCESS;
};

如您所见,驱动程序很简单。除了在加载时输出“Driver loaded”并在卸载时输出“Driver unloaded”时不执行任何操作。 只有我想让这个驱动程序能够从用户接收并打印它,使程序从驱动程序接收并打印它。 我不想制作代码,我只想要你指导我:我必须做什么?什么是最好的方法呢?

非常感谢

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用IoCreateSymbolicLink

在DriverEntry中创建符号链接

然后从用户模式程序调用{​​{1}}并使用符号链接的名称,并使用CreateFile / ReadFileWriteFile向/从中发送/接收数据司机。

对于DeviceIoControl / ReadFile选项,您需要在驱动程序中实施WriteFile / IRP_MJ_READ处理。

对于IRP_MJ_WRITE,您需要处理DeviceIoControl

这是一个非常好的article演示此技术,包含内核和用户模式的示例代码。我复制了与您的问题相关的主要部分:

IRP_MJ_DEVICE_CONTROL