AllocationSize
参数的目的是什么?
在函数Ntcreatefile
?
对AllocationSize
使用非零值并使用NtClose
关闭文件时,
实际文件大小不等于 AllocationSize
。
为什么?
这个参数似乎毫无用处。
由于
答案 0 :(得分:4)
NtCreateFile()不对参数做任何特殊操作,它只是将其传递给MJ_CREATE请求中的文件系统驱动程序。你需要WDK才能看到它是如何被使用的。一个好看的是FAT驱动程序,你会发现在src / filesys / fastfat / w2k / create.c中使用的AllocationSize。跟随调用链进入allocsup.c,FatAllocateDiskSpace()。
预先知道预期的分配规模,机会比比皆是。它可以预先分配集群,磁盘驱动器头已经在正确的位置更新文件分配表。在消耗每个可用集群之前,当卷空间不足时,它可能会失败创建调用。相反,如果没有失败,将确保您可以写入文件而不会耗尽磁盘空间。只要你写的不比你要求的多。
当然,当您关闭文件时,文件大小将更新为写入的实际字节数。 AllocationSize只是一个提示。