O que pode ser a razão para ERROR_DISK_FULL erro do Windows (112) ao abrir um NTFS alternativo fluxo de dados?

StackOverflow https://stackoverflow.com/questions/1606245

  •  05-07-2019
  •  | 
  •  

Pergunta

Meu aplicativo grava alguns bytes de dados para um fluxo de dados alternativo. Esta multa funciona em todos, mas uma máquina (Windows Server 2003 SP2). Em vez disso, CreateFile retorna ERROR_DISK_FULL quando eu tento criar um fluxo de dados alternativo (no diretório raiz). Eu não encontrar a razão para este resultado, porque ...

  • Há muito espaço nessa unidade.

  • A unidade é formatada NTFS (devido a GetVolumeInformation).

  • Os dados apoios unidade intercalam correntes (devido a GetVolumeInformation).

Edit: eu posso fornecer mais algumas informações sobre o que a razão não é: Eu adicionei muitos fluxos em um sistema de teste que não mostrar o erro e se perguntou se poderia ocorrer o erro. Ele não o fez. Em vez após cerca de 2000 Streams com nomes de arquivo longos ocorreu outro erro e persistiu:. 1450 (ERROR_NO_SYSTEM_RESOURCES)

EDIT: Aqui está um exemplo de um dos nomes de arquivos usados:

char szStreamFileName[] = "C:\\:abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnoqrstuvwxyz012345";

EDIT: O nosso cliente usa algum software antivírus corporativo da Avira no servidor. Talvez esta é a razão (fluxos de dados alternativos podem ser abusado por malware).

Foi útil?

Solução

Depois de abrir um ticket de suporte em MS eu sei que havia um conjunto de sinalizador somente leitura que só se pode definir (e redefinir) com funções não documentadas do Windows. Ninguém sabe quem definir este sinalizador e por que, mas eu mandei-lhes uma imagem da unidade (depois que eu comecei a máquina de nosso cliente) e assim que percebi isso. Nós só temos uma solução em nossa aplicação (Usamos outro local se detectar este erro). Enquanto isso sabemos que alguns de nossos clientes têm esse problema.

Outras dicas

Existem / arquivos compactados peças ou fluxos de dados alternativo?

Muitas vezes, aplicativos de backup receber erros ERROR_DISK_FULL tentando fazer backup de arquivos compactados e isso causa um pouco de confusão quando ainda existem vários gigabytes de espaço livre na unidade. Outras questões também pode ocorrer quando a cópia de arquivos compactados. O objetivo deste blog é para dar ao leitor uma compreensão mais completa do que realmente acontece quando você compactar arquivos NTFS.

De Entendimento NTFS compressão

Apenas um tiro cego, mas são os direitos definidos corretamente?

Apenas uma outra possibilidade ...

O senhor checou o número de arquivos atualmente Opend em seu sistema operacional? O apoio OS máx. número de identificadores de arquivo reservados depois que ERROR_DISK_FULL relatório ou ERROR_NO_SYSTEM_RESOURCES.

E segunda possibilidade ... O diretório raiz é limitado pelo número de arquivos. Pelo que me lembro 512 arquivos em versões mais antigas do sistema operacional. Mas os NTFS apoiar número ilimitado de arquivos na raiz!

Você pode querer ver o que algo como de Sysinternal Process Monitor captura de serviços públicos ao tentar criar este arquivo - é mostrar os códigos de retorno de várias APIs envolvidas na I / o pilha e um deles pode lhe dar uma pista sobre por que 112 está sendo devolvido a você. Esperemos que o nível de detalhe em ProcMon é suficiente - se não, eu imagino que há outros, mais detalhada de E / S instalações de rastreamento para Windows (mas eu não sei deles fora do topo da minha cabeça)

O nome do arquivo que você dá é

char szStreamFileName[] = "C:\\:abcdefghijklm...

que começa com

C:\\:

Isso é um erro de digitação no post, ou há realmente uma vírgula após a barra? Eu acho que é um nome de arquivo ilegal.

Se você tentar copiar um arquivo maior do que 2 GB de outro sistema de arquivos (NTFS) para FAT / FAT32 que tem um limite de 2GB você poderá ver esse erro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top