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 lui-même et il n’est pas nécessaire de créer un handle, car le mappage est effectué au moyen d’une section. Les systèmes de fichiers doivent case activée 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 à case activée pour ce cas se trouve dans la fonction FatOpenExistingFCB du fichier source Create.c à partir des exemples fastfat que contient le WDK :

    //
    //  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.