RtlCopyMemory никогда не возвращается, отстает от ПК - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь прочитать массив символов, а затем записать его в другой процесс в драйвере ядра. Для этого мне нужно скопировать массив char, который я прочитал из OtherProcess, и записать его в MyProcess. Проблема в том, что всякий раз, когда драйвер достигает RtlCopyMemory, он застревает и никогда не возвращается. Это также чертовски запаздывает из моего компьютера, пока он застрял.

    unsigned char* tempBytes;
    if (!NT_SUCCESS(KeReadProcessMemory(myProcess, (PVOID)ReadByteArrayRequest.Address, (PVOID)&tempBytes, ReadByteArrayRequest.bytes))) {
        log("Could not read byte array at address: %i with %i bytes", ReadByteArrayRequest.Address, ReadByteArrayRequest.bytes);
        return STATUS_NOT_FOUND;
    }
    ReadByteArrayRequest._return = (unsigned char*)ExAllocatePool(PagedPool, ReadByteArrayRequest.bytes); // alternative to malloc

    RtlCopyMemory((void*)ReadByteArrayRequest._return, tempBytes, ReadByteArrayRequest.bytes); // driver gets stuck on this & lags out pc

    if (!NT_SUCCESS(Write<KeReadByteArrayRequest>(myOtherProcess, READ_BYTE_ARRAY_REQUEST, ReadByteArrayRequest))) {
        log("There was an error when sending response for ReadByteArrayRequest");
        return STATUS_NOT_FOUND;
    }

    ExFreePool((PVOID)ReadByteArrayRequest._return); // we can't use free
...