如何发送和接收从内核模式驱动程序到用户模式的二进制数据

问题描述:

我正在开发内核模式过滤器驱动程序,我想这个驱动程序发送一个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->从上面的代码文件名(Unicode字符串)用户模式下的可执行文件。 假设,该可执行文件将只在控制台上打印该字符串。 下面是在用户模式下

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

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

不幸的是,我不能为你提供一个例子,因为要实现这一目标需要我我的虚拟机上安装Windows DDK,与实际编写的代码,它一边。

有,然而,文章here这也解释了在过滤器驱动程序的ioctl是如何工作的。

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

+0

Thanks Mats ..以及如何将数据从内核模式驱动程序发送回用户模式applicationaction ..? – 2013-04-04 13:26:15

+0

IOCTL调用是同步的,所以传递到被填充的缓冲器,并且所述IOCTL处理代码填充所述缓冲液[提防溢出!],然后返回,在该点的数据是在用户应用[经由可用'lpOutBuffer'中的一些将内核模式数据复制到用户模式的神奇函数]。您可能会觉得这很有用: http://www.codeproject.com/Articles/9575/Driver-Development-Part-2-Introduction-to-Implemen – 2013-04-04 13:36:41