0

WDK の PHYSICAL_ADDRESS 構造を理解するのに少し問題があります。物理メモリ内の実際の物理アドレスだと思いました。これを試してみました - 512 MB の RAM とコードをドライバーに搭載した仮想 PC を手に入れました

PHYSICAL_ADDRESS pa;
pa.QuadPart = 9223372036854775805; //max LONGLONG - 1
mr = MmMapIoSpace(pa , 100, 0);
DbgPrint("%i ", MmGetPhysicalAddress(mr));

...そして問題なく動作しました。これは 512 MB の RAM でどのように可能ですか? 最大物理アドレスは 512 MB = cca 512 000 000 ではありませんか? PHYSICAL_ADDRESS 値の本当の意味は何ですか?

PS: なぜ私がこれをやっているのか聞かないでください。私はこれがどのように可能であるか疑問に思っています。

4

1 に答える 1

0

問題なく動作するコードは、その (おそらく偽の) 物理アドレスを、コードが読み書きできる仮想アドレスに正常にマップしたことを意味します。これは、ページ テーブルの単なるエントリです。どうやら、システムは物理アドレスの範囲を確認していません。取得した仮想アドレスの参照解除を試みます: DbgPrint("%x\n", *((PULONG)mr));

于 2012-05-17T18:17:34.983 に答える