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