Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Arquivos executáveis são carregados no espaço de endereço de um processo usando um arquivo de imagem com mapeamento de memória. O arquivo em si não precisa ser aberto, nem um identificador precisa ser criado, pois o mapeamento é realizado por meio de uma seção. Os sistemas de arquivos devem verificar para impor essas semânticas especiais, supondo que eles dão suporte a arquivos mapeados de memória. Por exemplo, o código do sistema de arquivos FASTFAT para verificar esse caso pode ser encontrado na função FatOpenExistingFCB no arquivo de origem Create.c dos exemplos de fastfat que o WDK contém:
//
// If the user wants write access to the file, make sure there
// is not a process mapping this file as an image. Any attempt to
// delete the file will be stopped in fileinfo.c
//
// If the user wants to delete on close, check at this
// point though.
//
if (FlagOn(*DesiredAccess, FILE_WRITE_DATA) || DeleteOnClose) {
Fcb->OpenCount += 1;
DecrementFcbOpenCount = TRUE;
if (!MmFlushImageSection( &Fcb->NonPaged->SectionObjectPointers,
MmFlushForWrite )) {
Iosb.Status = DeleteOnClose ? STATUS_CANNOT_DELETE :STATUS_SHARING_VIOLATION;
try_return( Iosb );
}
}
Assim, o sistema de arquivos garante que um arquivo mapeado de memória, incluindo uma imagem executável, não possa ser excluído mesmo que o arquivo não esteja aberto.