Udostępnij za pośrednictwem


Jak używać transakcyjnego systemu plików NTFS

Transakcyjne dojścia plików

Transakcyjny system plików NTFS (TxF) wiąże transakcję z uchwytem pliku. W przypadku operacji, które działają na uchwycie (na przykład funkcje ReadFile i WriteFile), rzeczywiste wywołanie funkcji API nie zmienia się. W przypadku operacji na plikach, które przyjmują nazwę, istnieją jawne funkcje transakcyjne dla tych operacji. Na przykład zamiast wywoływać CreateFilewywołaj metodę CreateFileTransacted. Spowoduje to utworzenie transakcyjnego dojścia do pliku, który może być następnie używany dla wszystkich operacji na plikach wymagających obsługi. Wszystkie kolejne operacje korzystające z tego dojścia to operacje transakcyjne.

Podstawowe użycie txf

Poniższa seria kroków reprezentuje najbardziej podstawowe użycie txF. Bardziej złożone scenariusze są również obsługiwane według uznania projektanta aplikacji.

  1. Utwórz transakcję, wywołując funkcję KTM CreateTransaction lub używając interfejsu IKernelTransaction koordynatora transakcji rozproszonych Distributed Transaction Coordinator (DTC).
  2. Pobierz transakcyjne dojścia plików, wywołując CreateFileTransacted.
  3. Zmodyfikuj pliki zgodnie z potrzebami przy użyciu transakcyjnych dojść do plików.
  4. Zamknij wszystkie transakcyjne uchwyty plików skojarzone z transakcją utworzoną w kroku 1.
  5. Zatwierdzanie lub przerywanie transakcji przez wywołanie odpowiedniej funkcji KTM lub DTC.

Kluczowe punkty modelu programowania TxF

Model programowania TxF ma następujące kluczowe kwestie, które należy wziąć pod uwagę podczas tworzenia aplikacji TxF:

  • Zdecydowanie zaleca się, aby aplikacja zamykała wszystkie uchwyty transakcyjne plików przed zatwierdzeniem lub cofnięciem transakcji. System unieważnia wszystkie transakcyjne dojścia po zakończeniu transakcji. Dowolna operacja, z wyjątkiem zamknięcia, wykonywana na transakcyjnym dojściu po zakończeniu transakcji zwróci następujący błąd: ERROR_HANDLE_NO_LONGER_VALID.
  • Plik jest postrzegany jako jednostka magazynu. Obsługiwane są częściowe aktualizacje i kompletne zastępowania plików. Wiele transakcji nie może jednocześnie modyfikować tego samego pliku.
  • Mapowane we/wy pamięci są przezroczyste i spójne ze zwykłym we/wy plików. Aplikacja musi opróżnić i zamknąć otwartą sekcję przed zatwierdzeniem transakcji. Brak wykonania tej czynności może skutkować częściowymi zmianami w zamapowanym pliku w ramach transakcji. Wycofanie nie powiedzie się, jeśli nie zostanie to zrobione.

Typowe błędy programowania

Podczas tworzenia aplikacji transakcyjnych mogą wystąpić następujące typowe błędy:

  • Korzystanie z uchwytu do pliku po zakończeniu transakcji.
  • Nie można zamknąć dojść do usuniętych plików i katalogów przed zatwierdzeniem transakcji, co uniemożliwi wykonywanie operacji usuwania. To zdarzenie musi wystąpić przed wykonaniem zatwierdzenia operacji usuwania, która ma zostać uznana za część transakcji. Dzieje się tak dlatego, że system nie usuwa pliku do czasu zamknięcia ostatniego dojścia, nawet jeśli operacja nie jest wykonywana, w ramach podsystemu We/Wy pliku systemu Windows.
  • Nie można uwzględnić wycofywania transakcji zainicjowanych przez system, co może nastąpić w dowolnym momencie; na przykład transakcja zostanie wycofana, jeśli zasoby systemowe zostaną wyczerpane.