Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pliki wykonywalne są ładowane do przestrzeni adresowej procesu przy użyciu zamapowanego pliku obrazu pamięci. Sam plik nie jest wymagany do otwarcia ani nie trzeba tworzyć uchwytu, ponieważ mapowanie odbywa się za pomocą sekcji. Systemy plików muszą sprawdzić, aby wymusić te specjalne semantyki, zakładając, że obsługują one pliki mapowane pamięci. Na przykład kod systemu plików FASTFAT do sprawdzenia tego przypadku można znaleźć w funkcji FatOpenExistingFCB w pliku źródłowym Create.c z przykładów FastFAT, które zawiera Windows Driver Kit (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 );
}
}
W związku z tym system plików gwarantuje, że plik zmapowany pamięci, w tym obraz wykonywalny, nie może zostać usunięty, mimo że plik nie jest otwarty.