2012-12-25 61 views
0

AllocationSize參數 在函數Ntcreatefile中的用途是什麼?Ntcreatefile分配大小

當使用AllocationSize非零值和NtClose關閉文件, 真實文件大小不等於AllocationSize

爲什麼?

此參數似乎沒有用。

感謝

+0

文檔說:「除非文件正在創建,覆蓋或取代,否則非零值不起作用。」是嗎? –

+0

好的,但是當它關​​閉時,真正的大小不等於AllocationSize – user382591

+0

您的評論並沒有真正與我的相關。 –

回答

4

NtCreateFile()不會做什麼特別的說法,它只是將其傳遞給在MJ_CREATE請求的文件系統驅動程序。您需要WDK來查看它是如何使用的。一個很好的例子是FAT驅動程序,你會發現src/filesys/fastfat/w2k/create.c中使用的AllocationSize。按照調用鏈進入allocsup.c,FatAllocateDiskSpace()。

預先了解預期分配大小的機會比比皆是。它可以預先分配簇,而磁盤驅動器頭已經在正確的位置來更新文件分配表。並且在消耗每個可用羣集之前,當卷空間不足時,創建調用可能會失敗。相反,如果不失敗,將確保您可以寫入文件而不會耗盡磁盤空間。無論如何,只要你寫的東西不多於你所要求的。

當然,當您關閉文件時,文件大小將更新爲實際寫入的字節數。 AllocationSize只是一個提示。