移动磁盘文件,用NtFsControlFile还是用DeviceIoControl

  • Post author:
  • Post category:其他


移动磁盘文件,用NtFsControlFile还是用DeviceIoControl NT4以上的系统中,NtFsControlFile以其方便的特性成为winmm的API之一,DeviceIoControl则是更加原始的API,提供重要的驱动程序支持。 显然,如果只是搬运文件的话,NtFsControlFile是优于DeviceIoControl的,也更加安全。但是,这个函数至今并不是标准Windows API函数,也不能保证以后修改的可能。所以获得分区表、无差别的修改硬盘数据这种脏活累活,非DeviceIoControl莫属。 NtFsControlFile的用法并不是非常困难的,通过CreateFile打开文件、文件夹、磁盘卷之后,传入FSCTL_GET_VOLUME_BITMAP参数,可以得到文件系统的占用情况。传入FSCTL_MOVE_FILE就可以将一个文件的指定偏移量、指定大小转移到另一个簇中。 遗憾的是,[tc]的一个实验程序虽然成功的搬移了一个文件的一部分(使之产生了碎片),但是效率却是极为低下。[tc]将一个5763 簇(47,206,422 字节)的文件的前3000簇移动到另一处,居然花去了9秒钟,如果磁盘碎片整理程序效率都如此低下的话,那我看主要的精力大概应该花在提高搬移速度,而不是优化移动算法了。 为此,[tc]还不能为NtFsControlFile叫好。稍候再来做一个DeviceIoControl的实验,以便验证前者的效率问题。 整个 Yo2 上的相关文章: