如何在用户模式下将数据从内核模式驱动程序发送到二进制文件

我正在开发一个内核模式筛选器驱动程序,我想这个驱动程序发送一个UNICODEstring到用户模式下运行的EXE。 请为此提供一个例子,因为我是驾驶员开发的初学者。

下面是我的驱动程序的代码( 从我要发送UNICODEstring

#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 (UNICODEstring)到用户模式下的可执行文件。 假设那个可执行文件只是在控制台上打印这个string。 以下是我在用户模式下的exe代码

 ....... ....... int main() { cout<< getUnicodeStringFromKernel(); // Just supposition return 0; } 

有几种不同的方法可以“访问”内核模式驱动程序。 在这种情况下最明显的是使用ioctl接口。

不幸的是,我无法为您提供一个示例,因为要实现这一点,需要我在我的虚拟机上安装Windows DDK,并且实际编写代码。

然而, 这里有一篇文章解释了过滤器驱动器中的ioctls是如何工作的。

从你的应用程序,你需要使用DeviceIoControl