2012-01-03 56 views
0

我試圖讀取00000001 RAM中的數據並將其複製到硬盤中(剛學的!)的文件,所以我寫了這一點,並編譯和運行它使用驅動程序從特定位置讀取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)。我知道環3應用程序將返回虛擬地址。 是的,我已經開始閱讀司機書籍只是想更快地知道。

回答

1

不,內核使用虛擬地址。這不必與戒指,他們隻影響頁面訪問權限。如果你想訪問物理地址,看一下「MmMapIoSpace」(here)內核函數。返回的指針適用於內存訪問。

相關問題