簡體   English   中英

如何在用戶模式下從內核模式驅動程序向二進制文件發送和接收數據

[英]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字符串)發送到用戶模式下的可執行文件。 假設該可執行文件將僅在控制台上打印此字符串。 下面是我在用戶模式下的exe代碼

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

您可以通過幾種不同的方式來“訪問”內核模式驅動程序。 在這種情況下,最明顯的是使用ioctl接口。

不幸的是,我無法為您提供示例,因為要實現該示例,將需要我在虛擬機上安裝Windows DDK,並實際為其編寫代碼。

但是, 這里有一篇文章介紹了過濾器驅動程序中的ioctl的工作方式。

在您的應用程序中,您需要使用DeviceIoControl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM