2012-01-03 17 views
0

私は0x00000001のから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)の場合のようにポインタが物理または仮想を返すことを意味します.iは、リング3アプリケーションが仮想アドレスを返すことを知っています。 と私はすでにドライバの書籍を読んで始めてすぐに知ってほしかった。

答えて

1

いいえ、カーネルは仮想アドレスを使用します。これはリングと関係なく、ページアクセス権にのみ影響します。物理アドレスにアクセスしたい場合は、 "MmMapIoSpace"(here)カーネル関数を見てください。返されたポインタはメモリアクセスに適しています。

関連する問題