-3

我想以编程方式确定安装在 Windows 系统上的卷(又名文件系统)的集群(又名分配单元)大小。由于各种原因,我想找到一个使用GetDiskFreeSpace().

是否有任何 FSCTL_xxx 或 IOCTL_xxx 请求可用于此目的?

4

2 回答 2

4

您需要调用NtQueryVolumeInformationFile驻留在您的卷上的文件的句柄,请求FileFsSizeInformation. 您应该能够通过

GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"NtQueryVolumeInformationFile")

生成的FILE_FS_SIZE_INFORMATION结构将具有一个SectorsPerAllocationUnit值和一个BytesPerSector可用的值,当乘以它时,将为您提供分配单元(集群)的大小。

于 2012-07-17T06:00:00.443 回答
2

您可以将 DeviceIoControl 与IOCTL_STORAGE_QUERY_PROPERTY. 在输入时,将PropertyId结构中的STORAGE_PROPERTY_QUERY设置为StorageAccessAlignmentProperty

这将为您提供一个STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR,其中包含BytesPerLogicalSector和的成员BytesPerPhysicalSector。链接的参考页面包括用于检索和显示设备的逻辑/物理扇区大小的演示代码。

于 2012-07-08T07:13:42.780 回答