我想以编程方式确定安装在Windows系统上的卷(a.k.a.文件系统)的群集(a.k.a.分配单元)大小。出于各种原因,我想找到一个不使用GetDiskFreeSpace()
的解决方案。
是否有可用于此目的的FSCTL_xxx或IOCTL_xxx请求?
答案 0 :(得分:4)
您需要在驻留在卷上的文件句柄上调用NtQueryVolumeInformationFile
,请求FileFsSizeInformation
。你应该能够通过
GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"NtQueryVolumeInformationFile")
生成的FILE_FS_SIZE_INFORMATION
结构将具有SectorsPerAllocationUnit
值和BytesPerSector
值,当相乘时,它会为您提供分配单元(群集)的大小。
答案 1 :(得分:2)
您可以将DeviceIoControl与IOCTL_STORAGE_QUERY_PROPERTY
一起使用。输入时,将PropertyId
结构中的STORAGE_PROPERTY_QUERY
设置为StorageAccessAlignmentProperty
。
这将为您提供STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR
,其中包含BytesPerLogicalSector
和BytesPerPhysicalSector
的成员。链接的参考页面包括用于检索和显示设备的逻辑/物理扇区大小的演示代码。