Access Violation

quarta-feira, maio 10, 2006

Streams alternativas de dados
Poucas pessoas sabem que (pelo menos a partir do Windows 2000) o NTFS suporta o conceito de "Stream alternativa de dados". Uma stream de dados nada mais é que uma sequência de bytes gravadas no arquivo. O interessante é que, por default, o Windows sempre utiliza a stream principal, mas nada nos impede de criarmos outras streams:


No console acima observamos que não temos nenhum arquivo no dirertório c:\test (observe o 0 Files).

Logo a seguir criamos uma segunda stream no arquivo teste.txt chamada segunda_stream (ok, estou sem criatividade agora). Como o exemplo demonstra, a sintaxe para nomes de streams alternativas é:

nome_arquivo.ext:nome-stream

Mas como podemos verificar se um arquivo possui ou não streams alternativa? Simples; se você possui uma versão do Windows anterior ao Vista baixe o programa streams.exe do site Sysinternals.com.


Como podemos observar o programa detectou a stream segunda_stream.



Por outro lado, se você esta utilizando o Windows Vista basta acrescentar o parâmetro /r ao comando dir.

dir /r
Algumas considerações importantes:
  1. Apesar de muitos programas não trabalharem corretamente com stream a Win32 API não apresenta problemas para lidar com as mesmas (por exemplo a função CreateFile() trata nomes de arquivos com streams corretamente).
  2. Você pode utilizar streams alternativas para armazenar dados extras de um programa sem dar muito na cara :).
  3. O Windows Vista (build 5365) apresentou várias anomalias enquanto eu estava escrevendo este post (entre elas, o Explorer foi pro cacau várias vezes, o IE deu PT pelo menos uma vez, a performance para navegar no sistema de arquivos esta uma *$&*&@*, etc.); de qualquer forma não poss me esquecer que estou usando um produto beta.
  4. Falem o que quiser... o visual do Vista esta cada vez melhor! Aero, Side bar, Miniaturas na task bar, etc.

Bem, espero que tenham achado este post útil :)

[]'s

Adriano



[+/-] mostrar/esconder este post