1

カーネル モード フィルター ドライバーを開発しています。このドライバーで、ユーザー モードで実行されている exe にUNICODE 文字列を送信する必要があります。私はドライバー開発の初心者であるため、この例を親切に提供してください。

以下は私のドライバーのコードです(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;
}
4

1 に答える 1