что я пытаюсь сделать в ядре:
while (TRUE)
{
//DbgPrintEx(0, 0, "First loop is running \n");
ReadSharedMemory();
if (!(PCHAR)SharedSection == NULL && strcmp((PCHAR)SharedSection, "Read") == 0)
{
DbgPrintEx(0, 0, "Read looping \n");
RtlZeroMemory(SharedSection, sizeof(SharedSection));
break;
}
else if (!(PCHAR)SharedSection == NULL && strcmp((PCHAR)SharedSection, "Write") == 0)
{
DbgPrintEx(0, 0, "Write looping \n");
RtlZeroMemory(SharedSection, sizeof(SharedSection));
break;
}
LARGE_INTEGER Timeout;
Timeout.QuadPart = RELATIVE(SECONDS(1));
KeDelayExecutionThread(KernelMode, FALSE, &Timeout);
}
и в пользовательском режиме:
auto pBufW = (char*)MapViewOfFile(hMapFileW, FILE_MAP_WRITE, 0, 0, 4096);
RtlCopyMemory(pBufW, "Read", 4);
printf("message has been sent to kernel! \n");
UnmapViewOfFile(pBufW);
Sleep(10);
auto pBfW = (char*)MapViewOfFile(hMapFileW, FILE_MAP_WRITE, 0, 0, 4096);
RtlCopyMemory(pBfW, "Write", 5);
printf("message has been sent to kernel! \n");
UnmapViewOfFile(pBfW);
Я не могу понять, почему, когда я звоню «Чтение и запись». только запись выполнить я пробовал это несколько раз, и он всегда делал это + я пытался добавить сон (1); в моем режиме пользователя (думал, что это выполняется очень быстро).
в основном мне просто нужно, чтобы они выполнялись нормально, так как сначала следует выполнить чтение, а затем запись.