Пытаюсь изменить кэш диска, но получаю ошибку 24. Код | type TScalarPrefetch = record Minimum: Word; Maximum: Word; MaximumBlocks: Word; end;
TBlockPrefetch = record Minimum: Word; Maximum: Word; end;
DISK_CACHE_RETENTION_PRIORITY = (EqualPriority, KeepPrefetchedData, KeepReadData); TDiskCacheRetentionPriority = DISK_CACHE_RETENTION_PRIORITY;
_DISK_CACHE_INFORMATION = record ParametersSavable: Boolean; ReadCacheEnabled: Boolean; WriteCacheEnabled: Boolean; ReadRetentionPriority: DISK_CACHE_RETENTION_PRIORITY; WriteRetentionPriority: DISK_CACHE_RETENTION_PRIORITY; DisablePrefetchTransferLength: Word; PrefetchScalar: Bool; ScalarPrefetch: TScalarPrefetch; BlockPrefetch: TBlockPrefetch; end; DISK_CACHE_INFORMATION = _DISK_CACHE_INFORMATION; TDiskCacheInformation = DISK_CACHE_INFORMATION;
const IOCTL_DISK_GET_CACHE_INFORMATION = $000740D4; IOCTL_DISK_SET_CACHE_INFORMATION = $0007C0D8; IOCTL_DISK_SET_CACHE_SETTING = $0007c0e4; IOCTL_DISK_GET_LENGTH_INFO = $0007405C;
procedure TForm1.Button2Click(Sender: TObject); var h: THandle; info: TDiskCacheInformation; response: DWord; E: Integer; begin h := CreateFile(PChar('\\.\D:'), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, 0); if h = INVALID_HANDLE_VALUE then begin ShowMessage('Can''t access disk.'); Exit; end;
info.WriteCacheEnabled := True; info.ReadCacheEnabled:= false; info.DisablePrefetchTransferLength := 1; if not DeviceIoControl(h, IOCTL_DISK_SET_CACHE_INFORMATION, nil, 0, @info, SizeOf(info), response, nil) then begin E:=GetLastError; Showmessage(Format('Error: %d', [E])); //ERROR 24 Exit; end;
CloseHandle(h); end;
|
|