Złamanie blokad oportunistycznych
Zerwanie oportunistycznej blokady polega na pogorszeniu poziomu blokady, którą ma jeden klient w pliku, tak aby inny klient mógł otworzyć plik z blokadą oportunistyczną lub bez nich. Gdy inny klient żąda operacji otwierania, serwer opóźnia operację otwierania i powiadamia klienta o blokadzie oportunistycznej.
Następnie klient przechowujący blokadę podejmuje odpowiednie działania dla typu blokady, na przykład porzucanie odczytu, zamykanie pliku itd. Tylko gdy klient trzymający blokadę oportunistyczną powiadomi serwer o zakończeniu działania, serwer otwiera plik dla klienta żądającego operacji otwarcia. Jednak gdy blokada poziomu 2 jest uszkodzona, serwer zgłasza klientowi, że został uszkodzony, ale nie czeka na potwierdzenie, ponieważ nie ma buforowanych danych do opróżnienia na serwer.
Przy uznaniu przerwania jakichkolwiek wyłącznych blokad (filtr, poziom 1 lub partia) posiadacz przerwanej blokady nie może zażądać nowej blokady wyłącznej. Może obniżyć wyłączną blokadę do blokady poziomu 2 lub całkowicie ją usunąć. Uchwyt zazwyczaj zwalnia blokadę i zamyka plik, gdy ma zamiar go zamknąć.
Aplikacje są powiadamiane, że blokada oportunistyczna jest uszkodzona przy użyciu hEvent elementu członkowskiego OVERLAPPED struktury skojarzonej z plikiem, na którym blokada jest uszkodzona. Aplikacje mogą również używać funkcji, takich jak GetOverlappedResult i HasOverlappedIoCompleted.