Arquivos - criando um arquivo que nao possa ser deletado ou movido por outros programas

Top  Previous  Next

Depois de várias noites sem dormir estou finalizando meu software de

proteção de ambiente windows e com uma coisa que parecia impossível com

delphi porém "O impossível é o difícil que não foi tentado" não é rsrs.

 

Bom é o seguinte no windows (todas versões) existe uma função para

criar/recriar arquivos com parâmetros de modo que se definido como somente

READ o arquivo não pode ser (Aberto, Renomeado, Movido, Substituido ou

Excluido) além de restringir mudanças de attributos e comandos de deleção

pelo DOS como DEL e DelTree.

 

Vejam como funciona:

 

  HANDLE CreateFile(

                    LPCTSTR lpFileName, // Nome do arquivo

                    DWORD dwDesiredAccess, // Tipo de acesso.

                    DWORD dwShareMode, // Compartilhamento

                    LPSECURITY_ATTRIBUTES lpSecurityAttributes, // Atributos de segurança

                    DWORD dwCreationDistribution, // Criação ou abertura

                    DWORD dwFlagsAndAttributes, // Atributos e Flags

                    HANDLE hTemplateFile // Gabarito de atributos

                   );

 

Comentários sobre os parâmetros:

 

lpFileName 

   Nome do arquivo a ser aberto ou criado

 

dwDesiredAccess

   GENERIC_READ               : Abre apenas para leitura GENERIC WRITE: abre apenas para escrita

   GERNERIC_READ|GENERIC_WRITE: Abre para leitura e escrita

    

dwShareMode 

  Indica como o arquivo será compartilhado:

    0                               : Nenhuma outra abertura pode ser efetuada

    FILE_SHARE_READ                 : só aberturas para leitura serão permitidas

    FILE_SHARE_WRITE                : só aberturas para escrita serão permitidas

    FILE_SHARE_READ|FILE_SHARE_WRITE: quaisquer operações de aberturas serão permitidas

 

lpSecurityAttributes

  Apontador para descritor de segurança para o handle do novo arquivo (contém

  a ACL do novo handle). Se NULL, será utilizada estrutura default e o handle

  para o arquivo será herdável.

 

dwCreationDistribution

  CREATE_NEW       : Tenta ciar um novo arquivo.Retorna erro se já existir

  CREATE_ALWAYS    : Cria novo arquivo em qualquer situação.

  OPEN_EXISTING    : Abre arquivo. Se não existir retorna erro.

  OPEN_ALWAYS      : Tenta abrir um arquivo. Se não existir é criado.

  TRUNCATE_EXISTING: Abre arquivo existente truncando tamanho para 0 bytes. Se não existir: erro.

 

dwFlagsAndAttributes 

  Atributos usados na criação do arquivo:

    FILE_ATTRIBUTE_HIDDEN   : Arquivo oculto. Não aparece em diretórios.

    FILE_ATTRIBUTE_SYSTEM   : O arquivo é usado apenas pelo S.O.

    FILE_ATTRIBUTE_READONLY : Só pode ser lido.

    FILE_ATTRIBUTE_TEMPORARY: arquivo será mantido na memória.

    FILE_ATTRIBUTE_NORMAL   : deve ser usado sozinho.

 

Flags

  Alteram o modo como as operações de escrita e leitura são realizadas:

    FILE_FLAG_RANDOM_ACCESS  : otimiza acesso randômico.

    FILE_FLAG_SEQUENTIAL_SCAN: otimiza acesso seqüencial.

    FILE_FLAG_DELETE_ON_CLOSE: O arquivo será deletado quando for fechado.

    FILE_FLAG_OVERLAPPED     : habilita operações assíncronas sobre o arquivo.

 

hTemplateFile 

  Especifica handle para arquivo que será usado como gabarito de atributos ou NULL.

 

Segue um exemplo da função:

 

procedure LockFile(Arquivo : String);

var

  HF: THandle;

begin

  // o 2º parâmetro indica se será aberto para leitura ou não sendo

  // "GENERIC_READ" permite ou "0" para não permitir.

  HF := CreateFile(PChar(Arquivo), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 00);

end;