加快对卷的createFile调用

时间:2017-09-11 08:30:26

标签: delphi winapi disk

我正在编写一个软件来与录音设备进行通信 如果通过USB连接到PC,则模拟大容量存储设备。 通过通信在该设备上访问一些特殊功能 在该设备上的特殊部门。在Windows上访问该扇区 我需要:

  • 打开新到达的驱动器的句柄
  • 通过deviceIOControl和IOCTLVolumeGetVolumeDiskExtents获取物理驱动器号
  • 打开那里找到的物理驱动器,读写特殊扇区。

到目前为止一切都那么好 - 一切都运转良好,但获得了第一个首字母 音量处理可能需要很长时间。

我正在做的基本上是这样的:

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)。 任何人都知道如何加快这个过程?我永远不需要读任何东西 从文件系统,但我需要处理获取信息 关于底层的物理驱动器编号,从那里我进行读写操作。

0 个答案:

没有答案