2010-07-12 176 views
4

我很擔心FAT文件系統上使用內存映射IO的危險,通過CreateFileMapping。具體的情況是用戶直接從USB棒打開文件(是的,試圖禁止他們這樣做!)。Win32是否支持FAT文件系統上的內存映射文件(CreateFileMapping)?

MSDN Managing Memory-Mapped Files article沒有對文件系統約束做任何說明。

更新

我沒有任何真正的理由擔心,但我會了解在某一時刻與他們的問題(我的職業生涯跨越了25年,所以我有很多模糊的感覺在我的記憶中模糊的深度,一直回到8位微軟!)。他們是否應該得到支持的問題對我來說很重要,因此我想問問任何人是否可以證實我的擔憂。感謝您放下我的頭腦。

回答

6

是的。它甚至支持在CDFS或網絡驅動器上映射文件。你懷疑的根源是什麼?

7

內存映射文件是我最喜歡的功能之一。 絕對沒有危險。它是極其優化的Windows I/O特性之一。如果你啓動一個EXE或者加載一個DLL,它就會在內部實現爲內存映射文件映射。

它支持所有類型的文件系統包括FAT。

順便說一下atzz說內存映射文件是允許在網絡驅動器上。我可以添加它不僅是允許的,但它也嚴格建議使用內存映射文件也來自網絡文件。在I/O操作將以非常好的方式被緩存的情況下,這不會在其他(C/C++)I/O中完成。

如果您希望EXE不會因CD或網絡打開而崩潰,可以使用頭中的一位標記程序可執行文件(鏈接器開關/ SWAPRUN請參閱http://msdn.microsoft.com/en-us/library/chzz5ts6.aspx)。沒有選擇從USB棒打開的文件。

但是用戶有什麼確切的問題?他們是否不使用「安全刪除硬件」圖標?然後,他們必須學會如何做到這一點,就像他們必須學會不切換電腦電源一樣,但要正確關閉電腦。

你能否解釋爲什麼你會發現使用內存映射文件的危險,以及在哪些情況下你有問題並且是否使用其他I/O操作沒有這樣的問題?