使用Driver从特定位置读取RAM数据?

时间:2012-01-03 04:38:00

标签: c winapi memory driver bsod

我正在尝试从0x00000001读取RAM数据并将其复制到硬盘中的文件(只是学习!)所以我写了这个并编译并运行它

#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运行这个:-) 我一直认为只有应用程序才有权直接从内存中读取。

现在我的问题是驱动程序是否使用直接物理地址或虚拟地址??? 我的意思是什么类型的值和指针返回物理或虚拟,如在驱动程序编程(环1或2)的情况下。我知道Ring 3应用程序将返回虚拟地址。 是的,我已经开始阅读司机书,只是想更快地了解。

1 个答案:

答案 0 :(得分:1)

不,内核使用虚拟地址。这与环无关,它们只影响页面访问权限。如果您想获得对物理地址的访问权限,请查看“MmMapIoSpace”(here)内核函数。返回的指针适合内存访问。