我正在编写一个软件来与录音设备进行通信 如果通过USB连接到PC,则模拟大容量存储设备。 通过通信在该设备上访问一些特殊功能 在该设备上的特殊部门。在Windows上访问该扇区 我需要:
到目前为止一切都那么好 - 一切都运转良好,但获得了第一个首字母 音量处理可能需要很长时间。
我正在做的基本上是这样的:
var hdl : THandle;
start, stop, freq : INT64;
begin
hdl := INVALID_HANDLE_VALUE;
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(start);
fHandle := CreateFile( PChar('\\.\' + fDriveLetter + ':'),
GENERIC_READ,
FILE_SHARE_WRITE or FILE_SHARE_READ,
nil,
OPEN_EXISTING,
0,
0);
QueryPerformanceCounter(stop);
OutputDebugString( PChar( Format('Open drive took %.3fms', [(stop - start)/freq*1000]) ));
if hdl = INVALID_HANDLE_VALUE then
raise EVolumeError.Create( 'Cannot Open Drive: '+fDriveLetter+#13#10+
SysErrorMessage(GetLastError));
end;
这个电话可能需要几秒钟,直到驱动器到达。
我的猜测是Windows首先读取完整的FAT,这需要很长时间 这个小记录设备实际上总是创建文件 保留完整的磁盘空间(4GB)。 任何人都知道如何加快这个过程?我永远不需要读任何东西 从文件系统,但我需要处理获取信息 关于底层的物理驱动器编号,从那里我进行读写操作。