首页 文章

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

提问于
浏览
1

我正在开发内核模式过滤器驱动程序,我希望此驱动程序将 UNICODE String 发送到以用户模式运行的exe . 请为此提供一个示例,因为我是驱动程序开发的初学者 .

下面是我的驱动程序的代码( From where I want to send UNICODE string

#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;
}

1 回答

  • 2

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

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

    但是,有一篇文章here解释了过滤器驱动程序中的ioctl是如何工作的 .

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

相关问题