Общая память выполняется так быстро? - PullRequest
1 голос
/ 17 марта 2019

что я пытаюсь сделать в ядре:

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); в моем режиме пользователя (думал, что это выполняется очень быстро).

в основном мне просто нужно, чтобы они выполнялись нормально, так как сначала следует выполнить чтение, а затем запись.

1 Ответ

0 голосов
/ 18 марта 2019

кто-то помог мне с этим, это то, что я сделал

  while ( memcmp( pBufW, "Read", 4) == 0 )
    {
           Sleep(1);
    }
UnmapViewOfFile(pBufW);

простая проверка, и теперь она работает нормально: D

...