Usando a posição do arquivo atual

Ao criar ou abrir um arquivo, você pode fazer com que o gerenciador de E/S crie um ponteiro de posição de arquivo atual associado ao identificador de arquivo. Depois de fazer isso, você pode ler e gravar dados na posição atual do arquivo, e o gerenciador de E/S atualizará automaticamente a posição pelo número de bytes que foram lidos ou gravados.

Por padrão, o gerenciador de E/S não mantém um ponteiro de posição de arquivo atual. Esse padrão fornece eficiência, pois manter corretamente a posição atual do arquivo requer que o gerenciador de E/S sincronize cada operação de leitura e gravação no objeto de arquivo.

Para criar um identificador que tenha um ponteiro de posição de arquivo atual associado, especifique o acesso SYNCHRONIZE diretamente no parâmetro DesiredAccess para ZwCreateFile, IoCreateFile ou ZwOpenFile e FILE_SYNCHRONOUS_IO_ALERT ou FILE_SYNCHRONOUS_IO_NONALERT no parâmetro CreateOptions ou OpenOptions . Certifique-se de que você também não especifique o direito de acesso FILE_APPEND_DATA.

ZwReadFile e ZwWriteFile atualizam automaticamente o ponteiro de posição do arquivo atual para que ele aponte para além dos dados afetados pela operação. Por exemplo, se você ler 20 bytes começando no deslocamento de bytes 101, zwReadFile atualizará a posição do arquivo atual para 121.

Você pode examinar ou alterar a posição atual do arquivo chamando ZwQueryInformationFile ou ZwSetInformationFile, respectivamente. Em ambos os casos, defina o parâmetro FileInformationClass como FilePositionInformation.