我正在开发内核模式过滤器驱动程序,我希望此驱动程序将 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 String)发送到用户模式下的可执行文件。 假设,该可执行文件只会在控制台上打印此字符串。 下面是我在用户模式下的exe代码
.......
.......
int main()
{
cout<< getUnicodeStringFromKernel(); // Just supposition
return 0;
}
答案 0 :(得分:2)
您可以通过几种不同的方式“访问”内核模式驱动程序。在这种情况下最明显的是使用ioctl接口。
不幸的是,我无法为您提供示例,因为要实现这一点需要我在我的虚拟机上安装Windows DDK,并实际为其编写代码。
然而,有一篇文章here解释了过滤器驱动程序中的ioctl是如何工作的。
从您的应用程序中,您需要使用DeviceIoControl
。