Я разрабатываю драйвер фильтра режима ядра, я хочу, чтобы этот драйвер UNICODE String к исполняемому файлу, работающему в режиме пользователя. Пожалуйста, приведите пример для этого, так как я новичок в разработке драйверов.
Ниже приведен код моего драйвера (Откуда я хочу отправить строку 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;
}
Есть несколько разных способов, которыми вы можете «получить доступ» к драйверу режима ядра. Наиболее очевидным в этом случае будет использование интерфейса ioctl.
К сожалению, я не могу предоставить вам пример, потому что для достижения этого потребовалось бы установить Windows DDK на моей виртуальной машине, а также фактически написать для нее код.
Есть, однако, статья Вот который объясняет, как работают ioctls в драйверах фильтров.
Из вашего приложения вам нужно использовать DeviceIoControl
.
Других решений пока нет …