API - desativar o cache de disco do Windows XP

Top  Previous  Next

function DesativarCacheDiscoXP(const ExibirMensagem: Boolean): Boolean;

var

  R         : TRegistry;

  Chave     : string;

  CacheAtivo: Boolean;

begin

  Result     := False;

  if mRot.VersaoWindows in [vw95, vw98] then Exit;

 

  CacheAtivo := True;  // por padrão vamos dizer que ele está ativado (default do WindowsXP)

  R          := TRegistry.Create;

  R.RootKey  := HKEY_LOCAL_MACHINE;

 

  // vamos ver como está o cache

  if R.OpenKey('\SYSTEM\CurrentControlSet\Services\Disk\Enum', False) then

    Chave := R.ReadString('0');

 

  if R.OpenKey('\SYSTEM\CurrentControlSet\Enum\' + Chave + '\Device Parameters\Disk', False) then

    CacheAtivo := R.ReadInteger('UserWriteCacheSetting') = 1;

 

  if CacheAtivo then

  begin

    if R.OpenKey('\SYSTEM\CurrentControlSet\Enum\' + Chave + '\Device Parameters\Disk', True) then

      R.WriteInteger('UserWriteCacheSetting'0);

 

    if ExibirMensagem then

      mDlg.Alerta('O sistema operacional Windows XP estava com cache de disco ativado.'#13#13              +

                  'Esta configuração ativa a gravação em cache para aprimorar o desempenho do disco, '#13  +

                  'mas uma falta de energia ou falha no equipamento pode resultar '#13                     +

                  'em dados perdidos ou corrompidos.'#13#13                                                +

                  'Por estes motivos o cache foi desativado pela Frente de Caixa, '#13                     +

                  'para esta alteração entrar em vigor, o Windows será reiniciado.'#13#13        +

                  'ATENÇÃO: Se a Frente de Caixa exibir esta mensagem sempre que iniciar o computador,'#13 +

                  'consulte o manual do usuário para saber como desativar o cache de disco manualmente.');

 

    if (not mRot.FlagProgramador) then

    begin

      mRot.Reboot;

      Result := True;

    end;

  end;

 

  R.CloseKey;

  R.Free;

end;