auto Readstring = (char*)MapViewOfFile(hMapFileW, FILE_MAP_WRITE, 0, 0, 4096);
printf("message has been sent to kernel [Read]! \n");
FlushViewOfFile(Readstring, 4096);
UnmapViewOfFile(Readstring);
// maybe am stupid
auto send_test = (char*)MapViewOfFile(hMapFileW, FILE_MAP_WRITE, 0, 0, 4096);
printf("message has been sent to kernel [Test]! \n");
FlushViewOfFile(send_test, 4096);
UnmapViewOfFile(send_test);
это то, что я пытаюсь сделать, и каждый раз, когда я пытаюсь отправить строку «Read» + «Test», она ничего не делает, но, если я только отправляю строку «Read» в свой сопоставленный раздел, я могупрочитай это нормально.Я просто хочу знать, это проблема, потому что я не определяю смещение для mapviewoffile, но я также пытался использовать (sizeof (char *)), и это не сработало.в основном это просто, я просто хочу отправить эти 2 строки моему второму процессу, у которого работает цикл while, он проверит первую строку, и если он равен разделу с общей памятью, он выполнит другой цикл while, который продолжает читать разделяемую память до тех пор, покаравно строке "Test", вот как я читаю строки из моего второго процесса "его ядро, кстати".
while (TRUE)
{
DbgPrintEx(0, 0, "running waiting for a command to execute.. \n");
ReadSharedMemory();
if (strcmp((PCHAR)SharedSection, "Stop") == 0) {
DbgPrintEx(0, 0, "breaking out of the loop");
break;
}
while (!(PCHAR)SharedSection == NULL && strcmp((PCHAR)SharedSection, "Read") == 0)
{
DbgPrintEx(0, 0, "Read loop is running\n");
ReadSharedMemory();
DbgPrintEx(0, 0, "sharedsection string - > : %s\n", (PCHAR)SharedSection);
LARGE_INTEGER Timeout;
Timeout.QuadPart = RELATIVE(SECONDS(1));
KeDelayExecutionThread(KernelMode, FALSE, &Timeout);
if (!(PCHAR)SharedSection == NULL && strcmp((PCHAR)SharedSection, "Test") == 0)
{
DbgPrintEx(0, 0, "it works finally !!!! \n");
DbgPrintEx(0, 0, "[Test while loop]sharedsection string - > : %s\n", (PCHAR)SharedSection);
}
}
и вот как я читаю разделяемую память
if (sectionHandle)
return;
if (SharedSection)
ZwUnmapViewOfSection(NtCurrentProcess(), SharedSection);
SIZE_T ulViewSize = 1024 * 10;
NTSTATUS ntStatus = ZwMapViewOfSection(sectionHandle, NtCurrentProcess(), &SharedSection, 0, ulViewSize, NULL, &ulViewSize, ViewShare, 0, PAGE_READWRITE | PAGE_NOCACHE);
if (ntStatus != STATUS_SUCCESS)
{
DbgPrintEx(0,0,"ZwMapViewOfSection fail! Status: %p\n", ntStatus);
ZwClose(sectionHandle);
return;
}
DbgPrintEx(0,0,"ZwMapViewOfSection completed!\n");
DbgPrintEx(0, 0, "String is : %s now !\n", (PCHAR)SharedSection);
и sharedsections - это просто нулевой PVOID.