Как отправлять и получать данные из драйвера режима ядра в двоичный файл в пользовательском режиме

Я разрабатываю драйвер фильтра режима ядра, я хочу, чтобы этот драйвер 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;
}

1

Решение

Есть несколько разных способов, которыми вы можете «получить доступ» к драйверу режима ядра. Наиболее очевидным в этом случае будет использование интерфейса ioctl.

К сожалению, я не могу предоставить вам пример, потому что для достижения этого потребовалось бы установить Windows DDK на моей виртуальной машине, а также фактически написать для нее код.

Есть, однако, статья Вот который объясняет, как работают ioctls в драйверах фильтров.

Из вашего приложения вам нужно использовать DeviceIoControl.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]