我想以编程方式确定安装在 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
。链接的参考页面包括用于检索和显示设备的逻辑/物理扇区大小的演示代码。