Partager via


Images exécutables

Les fichiers exécutables sont chargés dans l’espace d’adressage d’un processus à l’aide d’un fichier image mappé en mémoire. Il n'est pas nécessaire d'ouvrir le fichier, ni de créer un descripteur, car le mappage est effectué par le biais d'une section. Les systèmes de fichiers doivent vérifier pour appliquer ces sémantiques spéciales, en supposant qu’ils prennent en charge les fichiers mappés en mémoire. Par exemple, le code du système de fichiers FASTFAT à rechercher dans ce cas se trouve dans la fonction FatOpenExistingFCB dans le fichier source Create.c à partir des exemples fastfat que le WDK contient :

    //
    //  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 );
        }
    }

Ainsi, le système de fichiers garantit qu’un fichier mappé en mémoire, y compris une image exécutable, ne peut pas être supprimé même si le fichier n’est pas ouvert.