2
MSDNには、ファイルマッピングオブジェクトを(CreateFileMapping関数がINVALID_HANDLE_VALUEに設定HFILEパラメータで呼び出される)ページングファイルによってバックアップされている場合は、ページングファイルは、全体のマッピングを保持するのに十分な大きさでなければならないMapViewOfFileが失敗しないのはなぜですか?
を言います。そうでない場合、MapViewOfFileはに失敗します。
しかし、このコードは、ページファイルが存在しない場合でも動作します。どうして?
HANDLE mm;
LPVOID addr;
mm = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1024 * 1024, NULL);
if (mm != NULL) {
addr = MapViewOfFile(mm, FILE_MAP_ALL_ACCESS, 0, 0, 1024 * 1024);
if (addr != NULL) {
MessageBox(0, NULL, NULL, 0);
}
}
どのようにページファイルを削除したのですか? –
それが決定的に_not_何ページファイルを持っていないシステム上のメッセージボックスを表示する必要がありますようなコードは(念のために、あなたはそれがメッセージボックスを表示_does_言っている?)見えます。 SEC_COMMIT考えると、オペレーティングシステムは(だけでなく、理論的にはSEC_RESERVEのように)、メモリが実際に存在することを確認する必要があり、私は非としてRAMにメモリ全体をロックすることによって、それはよりも、そのページファイルなしに、他の操作を行う可能性がどのように表示されませんそれは確かにしません。 – Damon
明らかにあなたは間違っており、システムは依然として対処するページファイルを持っています。そうしないと、呼び出しが失敗するだけです。 –