如何将数据从内核模式驱动程序发送和接收到用户模式下的二进制文件
How to send and receive data from a kernel mode driver to a binary in user mode
我正在开发一个内核模式过滤器驱动程序,我希望这个驱动程序发送一个UNICODE字符串到在用户模式下运行的exe。请为此提供一个示例,因为我是驱动程序开发的初学者。
下面是我的驱动程序的代码(从我想发送UNICODE字符串)
#include "drv_common.h"
#include "ntddk.h"
#include "FsFilter.h"
#define SOME_SIZE
// PassThrough IRP Handler
NTSTATUS FsFilterDispatchPassThrough( __in PDEVICE_OBJECT DeviceObject, __in PIRP Irp )
{
PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(pDevExt->AttachedToDeviceObject, Irp);
}
///////////////////////// struct file info ////////////////////////////////////
struct {
OBJECT_NAME_INFORMATION NameInfo;
WCHAR Buffer[64]; // 64 chars must be enough for everybody :)
} InfoBuffer;
///////////////////////////////////////////////////////////////////////////////////////////////////
// IRP_MJ_CREATE IRP Handler
NTSTATUS FsFilterDispatchCreate(
__in PDEVICE_OBJECT DeviceObject,
__in PIRP Irp
)
{
PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;
PUNICODE_STRING **temp**;
RtlInitUnicodeString( temp, L"\vs\vs\Setup\eula.txt" );
LONG flag = RtlCompareUnicodeString( temp, &pFileObject->FileName, TRUE );
if ( flag == 0 )
{
DbgPrint("File is opened.n" );
return STATUS_UNSUCCESSFUL;
}
return FsFilterDispatchPassThrough(DeviceObject, Irp);
}
我想从上述代码发送& &;pFileObject->FileName (UNICODE String)到用户模式下的可执行文件。假设,该可执行文件将只在控制台上打印此字符串。下面是我在用户模式下的exe代码
.......
.......
int main()
{
cout<< getUnicodeStringFromKernel(); // Just supposition
return 0;
}
有几种不同的方法可以"访问"内核模式驱动程序。在这种情况下,最明显的方法是使用ioctl接口。
不幸的是,我不能给你提供一个例子,因为要做到这一点,我需要在我的虚拟机上安装Windows DDK,并为它实际编写代码。
然而,这里有一篇文章解释了过滤器驱动程序中的ioctl是如何工作的。在应用程序中,您需要使用DeviceIoControl
。
相关文章:
- 用户定义的文本运算符(在原始模式下)存在问题
- 内核模式到用户模式通信
- 微筛选器从用户模式应用程序接收常量值
- Visual Studio在发布模式下构建,但用户收到消息说他们需要调试文件
- QtLineEdit 占位符:如何让用户在插入模式下将字符 1 替换为 1
- 使用用户模式和内核之间共享内存的慢速通信
- C++;仅当用户输入与预设模式匹配时才接受用户输入
- 在 windbg 中的用户模式转储中查找 hwnd 信息
- 如何在具有 WppEnabled 标志的用户模式应用程序中使用 WPP 跟踪
- 从用户应用程序访问环0模式(以及Borland允许这样做的原因)
- 服务和用户模式进程之间的共享全局事件不起作用
- 在用户模式下从另一个进程回调,没有额外的线程
- Windows内核是否安全,不会在用户模式下发生损坏
- 用户定义的字符串文字和模式与sscanf匹配
- Windows 用户模式调试器传输 Visual Studio 2012
- 从用户模式发送IRP_MJ_SYSTEM_CONTROL请求
- 从用户模式程序在 Windows 上发送和接收 ARP 数据
- 用户模式计划程序线程的最大数量
- 强制用户模式程序在非分页内存下运行
- 当我们从用户模式转移到内核模式时,哪些寄存器会发生变化?!以及转移到内核模式的原因是什么