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, 0, 0); end; |