[英]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.