На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> DeviceIoControl + IOCTL_DISK_SET_CACHE_INFORMATION Ошибка 24
Пытаюсь изменить кэш диска, но получаю ошибку 24.

ExpandedWrap disabled
    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;
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0865 ]   [ 20 queries used ]   [ Generated: 20.10.20, 18:14 GMT ]