Dela via


Körbara bilder

Körbara filer läses in i adressutrymmet för en process med hjälp av en minnesmappad bildfil. Själva filen behöver inte öppnas och inte heller behöver ett handtag skapas eftersom mappningen görs med hjälp av en sektion. Filsystemen måste kontrollera för att säkerställa dessa särskilda semantiker, förutsatt att de stöder minnesmappade filer. Till exempel finns FASTFAT-filsystemkoden för att kontrollera detta fall i funktionen FatOpenExistingFCB i källfilen Create.c från fastfat-exemplen som ingår i 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 );
        }
    }

Filsystemet säkerställer därför att en minnesmappad fil, inklusive en körbar avbildning, inte kan tas bort trots att filen inte är öppen.