3

私のシステムでは、特定のサイズになるように作成されたメモリ マップ ファイルは、デフォルトで常に完全にゼロになることが経験的にわかりました。たとえば、呼び出しを使用して

HANDLE hMM = 
    CreateFileMapping (h,
                        NULL,
                        PAGE_READWRITE,
                        0,
                        0x01400000,//20MB
                        NULL);

..そしてそのファイルのマップされたビューに書き込むと、ゼロ以外のデータを書き込んだ場合を除いて、常に完全にゼロになった20MBのファイルになります。

ファイルの初期化されていない部分をゼロと見なすことができるかどうか疑問に思っています。一般に、この動作は Windows で保証されていますか?

4

3 に答える 3

7

CreateFileMappingのドキュメント ( 「備考」セクション) には、明示的に次のように記載されています。

ファイルが拡張されている場合、ファイルの古い終わりとファイルの新しい終わりの間のファイルの内容はゼロであるとは限りません。動作はファイル システムによって定義されます。

そのため、ディスク上のファイルが空で始まる場合、(ファイルを展開しているため) ゼロになることは保証されません。ファイル システム ドライバーが潜在的に機密性の高い情報をそのように漏洩するリスクを冒すとは思いませんが、一部のファイル システム ドライバーは、プロセスで既に使用されているページをリサイクルする可能性があります (これはセキュリティ リスクではありません)。

一方、セキュリティをまったく提供しないファイルシステム (FAT など) が、たまたまファイルの新しい部分に割り当てたクラスターの内容を提供することに関心があるかどうかはわかりません。

代わりに、ディスク上のファイルではなく、ページング ファイルによってバックアップされるメモリ セクションを作成する場合、取得するメモリがすべてゼロになることが保証されます。

オペレーティング システムのページング ファイルによってサポートされるファイル マッピング オブジェクト内のページの初期コンテンツは 0 (ゼロ) です。

これはおそらく、メモリのみのページング ファイルを作成するときに、メモリ マネージャーが何が起こっているかを完全に制御し、空白のページ プールからページを取得するためです。

于 2011-01-28T00:36:48.053 に答える
6

新しく割り当てられたすべてのページは、ユーザー モードからアクセスできるようになる前にゼロにされます。そうしないと、機密情報がカーネル モードまたは他のプロセスから漏洩する可能性があるためです。NtAllocateVirtualMemoryこれは/VirtualAllocNtCreateSection/などに当てはまりますCreateFileMapping

適切なファイル システムであれば、このような方法で情報が漏洩することは望ましくないため、同じ概念がファイルにも適用されると思います。

編集:ただし、その最後の段落を一粒の塩で取ります-CreateFileMappingとSetEndOfFileの両方のドキュメントは、ファイルの拡張部分が定義されていないと主張しています。もう少し調査します。

編集 2: OK、Win32 MSDN のドキュメントは間違いなく間違っています。ZwSetInformationFileのドキュメントには次のように記載されています。

FileInformationClass を FileEndOfFileInformation に設定し、FILE_END_OF_FILE_INFORMATION の EndOfFile メンバーが現在のファイル終了マークを超えるオフセットを指定している場合、ZwSetInformationFile はファイルを拡張し、拡張子にゼロを埋め込みます。

では、どうぞ。拡張部分ゼロであることが保証されています。

于 2011-01-28T00:38:41.847 に答える
1

Yes, as pointed out by wj32. This is related to c2 requirements which NT has met since its birth. However depending on what you are trying to do, you should probably look into sparse files.

于 2011-02-07T17:29:07.330 に答える