【发布时间】:2014-11-26 18:44:45
【问题描述】:
我需要一个函数来获取所有类型系统驱动器的物理扇区大小,在 Win7 或更高版本中。
这是我直到今天才使用的代码,当时我发现它不适用于我的外部 USB 硬盘(exFAT 文件系统)和我的 USB MP3 播放器 (FAT16)。在这些情况下,函数 DeviceIoControl 失败,我得到异常:“系统错误。代码 50。不支持请求”。但它适用于 NTFS 卷。
function GetSectorSize(Drive:Char):DWORD;
var h:THandle;
junk:DWORD;
Query:STORAGE_PROPERTY_QUERY;
Alignment:STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
begin
result:=0;
h:=CreateFileW(PWideChar('\\.\'+UpperCase(Drive)+':'),0,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);
if h=INVALID_HANDLE_VALUE then RaiseLastOSError;
try
FillChar(Query,SizeOf(Query),0);
Query.PropertyId:=StorageAccessAlignmentProperty;
Query.QueryType:=PropertyStandardQuery;
if not DeviceIoControl(h,IOCTL_STORAGE_QUERY_PROPERTY,@Query,SizeOf(Query),@Alignment,SizeOf(Alignment),junk,nil) then RaiseLastOSError;
result:=Alignment.BytesPerPhysicalSector;
finally
CloseHandle(h);
end;
end;
【问题讨论】:
-
这些其他驱动器是高级格式驱动器吗?
fsutil告诉您有关这些驱动器的哪些信息。 -
带有 FAT16 的 MP3 播放器我认为它不能是高级格式(它只是一个 U 盘),而
fsutil fsinfo ntfsinfo不适用于其他 USB 硬盘,因为它是 exFAT,但我认为它可以是高级格式,因为它有 1TB。
标签: delphi filesystems disk