Partilhar via


Imagens executáveis

Os arquivos executáveis são carregados no espaço de endereço de um processo usando um arquivo de imagem mapeada na memória. Não é necessário abrir o ficheiro, nem criar um identificador, porque o mapeamento é realizado por meio de uma seção. Os sistemas de arquivos devem verificar a imposição destas semânticas específicas, assumindo que eles suportam arquivos mapeados na memória. Por exemplo, o código do sistema de arquivos FASTFAT para verificar este caso pode ser encontrado na função FatOpenExistingFCB no arquivo de origem Create.c das amostras 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.