Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DeviceIoControl + IOCTL_DISK_SET_CACHE_INFORMATION, Eror code 24 
:(
    Опции темы
navodri
Дата 16.10.2020, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 26.10.2007

Репутация: нет
Всего: -1



Пытаюсь изменить кэш диска, но получаю ошибку 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;

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1193 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.