Использование режима ядра общей памяти для -> usermode
Итак, сразу к делу, я создал драйвер ядра, который сопоставляет общий раздел с пользовательским режимом. моя проблема заключается в том , что я пытаюсь читать/записывать память с помощью драйвера, но у меня есть 0 опыта работы с ReadFile, WriteFile . у меня есть дескриптор, который был создан с помощью CreateFileA.
теперь я мой старый драйвер проекта, который я использовал для связи с кодом IOCTL примерно так .
#define IO_READ_REQUEST CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0701 /* Our Custom Code */, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
typedef struct _KERNEL_READ_REQUEST { ULONG ProcessId; ULONG Address; ULONG Response; ULONG Size; } KERNEL_READ_REQUEST, *PKERNEL_READ_REQUEST;
template <typename type> type ReadVirtualMemory(ULONG ProcessId, ULONG ReadAddress, SIZE_T Size) { if (hDriver == INVALID_HANDLE_VALUE) return (type)false; DWORD Return, Bytes; KERNEL_READ_REQUEST ReadRequest; ReadRequest.ProcessId = ProcessId; ReadRequest.Address = ReadAddress; ReadRequest.Size = Size; // send code to our driver with the arguments if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), 0, 0)) return (type)ReadRequest.Response; else return (type)false; }
и да, я знаю, что это вставлено из kernelbhop, но это то, что мой драйвер делает то же самое (старый).
теперь , как я мог бы сделать точно такой же процесс, но без кода IOCTL и только с ReadFile, WriteFile . и еще 1 вещь , прежде чем я использовал для вызова своего кода IOCTL из ядра
if (ControlCode == IO_READ_REQUEST) { // then do something here }
но насколько я знаю я не могу сделать это сейчас я хочу знать должен ли я использовать ,
IRP_MJ_WRITEили
IRP_MJ_READчтобы заниматься своими делами. потому что я думал об этом, и если бы я мог использовать только их обоих, то я не могу справиться со всеми своими функциями ядра, так что это было бы невозможно. спасибо всем, кто поможет мне в этом, я просто хочу фрагмент или пример, чтобы я мог учиться на нем и решать свою проблему. :)
Что я уже пробовал:
я еще ничего не пробовал. жду кого-то, кто, возможно, имел эту проблему раньше и может помочь с ней :)