Чтение данных ОЗУ из определенного места с помощью драйвера? - PullRequest
0 голосов
/ 03 января 2012

Я пытаюсь прочитать данные ОЗУ из 0x00000001 и скопировать их в файл на жестком диске (просто учусь!), Поэтому я написал это, скомпилировал и запустил

#include <ntddk.h>

    void DriverUnload(PDRIVER_OBJECT pDriverObject)
    {
        DbgPrint("Driver Unloaded!");
    }


    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    {
            DWORD *pointer;
            pointer = 0x00000001;

            DriverObject->DriverUnload = DriverUnload;

        DbgPrint("Driver Loaded!\n");

            DbgPrint("Data at 0x00000000 is %x\n",*pointer);
        return STATUS_SUCCESS;
    }

так что я получил BSOD К счастью, я запускал это, используя мой Vmware :-) я всегда думал, что только приложения не имеют прав на прямое чтение из памяти.

Теперь мой вопрос: драйвер использует прямой физический адрес или виртуальный адрес ??? я имею в виду, какой тип значения & указатель возвращает физический или виртуальный, как в случае программирования драйвера (Ring 1 или 2). Я знаю, что приложение Ring 3 вернет виртуальный адрес. и да, я уже начал читать книги для водителей, просто хотел узнать быстрее.

1 Ответ

1 голос
/ 03 января 2012

Нет, ядро ​​использует виртуальные адреса.Это не связано с кольцами, они влияют только на право доступа к странице.Если вы хотите получить доступ к физическим адресам, взгляните на функцию ядра «MmMapIoSpace» ( here ). Возвращенный указатель подходит для доступа к памяти.

...