• XSS.stack #1 – первый литературный журнал от юзеров форума

не работает функция чтения физ памяти

mddbs

RAID-массив
Пользователь
Регистрация
09.02.2024
Сообщения
98
Реакции
3
C:
NTSTATUS Read_Physical_memory(LONGLONG Address, PVOID buffer, SIZE_T bitetoread)
{
    PVOID Pool = ExAllocatePoolWithTag(0, bitetoread, 'Tag');

    if (Pool == NULL) return STATUS_UNSUCCESSFUL;
    else
    {
        PHYSICAL_ADDRESS ad;
        ad.QuadPart = Address;
        PVOID MemoryMap = MmMapIoSpaceEx(ad, bitetoread, PAGE_READONLY);

        if (MemoryMap == NULL) return STATUS_UNSUCCESSFUL;
        else
        {
            MM_COPY_ADDRESS copyaddress;
            copyaddress.VirtualAddress = MemoryMap;
            SIZE_T counter;
            MmCopyMemory(buffer, copyaddress, bitetoread, MM_COPY_MEMORY_VIRTUAL, &counter);
            MmUnmapIoSpace(MemoryMap, bitetoread);
            ExFreePoolWithTag(Pool, 'Tag');
            return STATUS_SUCCESS;
        }
    }
}

я новичок в разработке драйверов так что не судите строго за ошибки)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Предлагаю посмотреть на функцию ExAllocatePoolWithTag и что там должно быть в третьем параметре.
 
Предлагаю посмотреть на функцию ExAllocatePoolWithTag и что там должно быть в третьем параметре.
да это тег выделяемой памяти для её отслеживания не понимаю в чём тут может быть проблема
 
Пожалуйста, обратите внимание, что пользователь заблокирован
да это тег выделяемой памяти для её отслеживания не понимаю в чём тут может быть проблема
Разве такой формат тега допустим?
A pool tag is a four-byte character that is associated with a dynamically allocated chunk of pool memory.

Должен быть такой. Т.е. с пробелом. У тебя тег трехбайтовый.
'Tag '
 
Разве такой формат тега допустим?


Должен быть такой. Т.е. с пробелом. У тебя тег трехбайтовый.
'Tag '
Да, признаю, не заметил. Спасибо, но всё равно не работает(
 
Пожалуйста, обратите внимание, что пользователь заблокирован
C:
BOOL ReadPhysicalMemory(PHYSICAL_ADDRESS PhysicalAddress, PVOID Buffer, SIZE_T BufferSize) {
    PVOID VirtualAddress = MmMapIoSpace(PhysicalAddress, BufferSize, MmNonCached);
    if (VirtualAddress == NULL) return FALSE;

    RtlCopyMemory(Buffer, VirtualAddress, BufferSize);
    
    MmUnmapIoSpace(VirtualAddress, BufferSize);
    return TRUE;
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх