2016-03-29 27 views
1

\Device\PhysicalMemoryはセクションオブジェクトで、Win32 API用語ではメモリマップファイルです。その名前が与えられるとMMF 完全にがRAMにバックアップされます。物理ページの1つのマッピング上の1つである。Windowsの Device PhysicalMemoryに説明が必要

そして、それはかなり私の質問です:このセクションオブジェクトは、物理メモリまたは非ページシステムアドレス空間を非ページング表していますか?

前者の場合、物理メモリの「穴」はどうですか?たとえば、PAE対応システムでは、システムアドレス空間の基礎となる物理メモリは、実際には「断片化」されている可能性があります。その\Device\PhysicalMemoryセクションオブジェクトにビューをマッピングした後に、そのような穴にアクセスするとどうなりますか?

私が混乱する理由は、MmMapIoSpace関数がPHYSICAL_ADDRESS PhysicalAddressパラメータを受け取り、その物理アドレスを非ページングシステムアドレス空間にマップするためです。 MmAllocateContiguousMemoryのような他のメモリマネージャ機能も参照してください。 実際の物理メモリが利用可能になり、連続した方法でアクセスできるように見せかけるのはかなり危険です。

明らかに、非ページングされた物理メモリと非ページングシステムアドレス空間の間に必ずしも1対1ではないマッピングがあります。

Windows Internals、第6版で上記および多数の関連用語を検索しようとしています。明確な答えは得られなかった。第10章では、主にWDKのドキュメントがシステムアドレス空間と呼ぶものについて扱います。したがって私はここで尋ねています。

回答の正式な情報源を参照してください。

答えて

3

\Device\PhysicalMemoryは、物理メモリによって直接サポートされるセクションオブジェクトです。ビューオフセットは実際の物理アドレスを表します。このように連続していないので、どの範囲が有効であるかを知る必要があります。

\ Device \ PhysicalMemoryの使用方法に関する権威ある情報はありません。マイクロソフトでは、これを行う必要はないと想定しているためです。実際、彼らはWindows XP/2003で完全に削除することなく、このセクションの使用を可能な限り難しくしました。

MmMapIoSpaceまで:マッピングされたメモリを必要とするデバイスドライバは、PnPの初期化中にリソース経由で要求します。 Windowsは、デバイスドライバによって排他的に使用される物理メモリのページの範囲を割り当て、割り当てられたメモリを記述するCmResourceTypeMemoryリソースを返します。その後、デバイスドライバはMmMapIoSpaceを使用してカーネルモードのアクセス可能なアドレスを取得します。ドライバはマップされるランダムなアドレスを決して与えません。これは、MmMapIoSpace MSDN docsとこのページからリンクされている他のページに記載されています。

このセクションまたはMmMapIoSpaceを使用する場合は、マップされているメモリが同じ物理アドレスの他のマッピングと同じキャッシングセマンティクスを使用するように注意する必要があります。破損が発生しない場合は、データをマッピングを使用して書き込む場合は特に重要です。これは、所有デバイスドライバが一貫したキャッシュを使用してマップする方法を知っている必要があるため、Microsoftが意図したとおりに使用する場合は、通常はMmMapIoSpaceの問題ではありません。セクションを使用する場合、メモリが他のコードによって互換性のない方法でマップされているかどうかを知る方法がありません。

ドライバベリファイアは、セクションまたはMmMapIoSpaceを使用する際に一貫性のあるマッピングを使用できないことを示し、不正なマッパー障害として報告します。Windows 10では、ドライバベリファイアを使用しなくても、OSの停止を引き起こさずにどちらの方法も使用することが非常に困難になった場合でも、このタイプのレポートが発生します。

あなたは何をしようとしているのかを指定していませんが、MM_COPY_MEMORY_PHYSICALでMmCopyMemoryを見たいと思うかもしれません。MmCopyMemory MSDN docsを参照してください。

+0

詳細をお寄せいただきありがとうございます。私は本当に '\ Device \ PhysicalMemory'に関心があり、好奇心から多くのものを(ab)使用するより興味がありました。 – 0xC0000022L

+0

私にはあなたに与える情報源がありません。 –

+0

ところで、私は本当に何かしようとしていません。私は文書化されていないように見える内部について知ろうとしています。そして、ここで質問を入力することは、IDAを起動して逆アセンブリのページを覗くよりも賢明だとわかりました:) – 0xC0000022L

関連する問題