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.
Ostrzeżenie
UMDF 2 jest najnowszą wersją UMDF i zastępuje UMDF 1. Wszystkie nowe sterowniki UMDF powinny być zapisywane przy użyciu funkcji UMDF 2. Do usługi UMDF 1 nie są dodawane żadne nowe funkcje, a obsługa UMDF 1 na nowszych wersjach systemu Windows 10 jest ograniczona. Sterowniki uniwersalne systemu Windows muszą używać funkcji UMDF 2.
Zarchiwizowane przykłady UMDF 1 można znaleźć w Windows 11, wersja 22H2 - Maj 2022 aktualizacja przykładów sterowników.
Aby uzyskać więcej informacji, zobacz Wprowadzenie do usługi UMDF.
Cały kod sterownika, który uzyskuje dostęp do buforu danych przerwania, musi być zsynchronizowany, tak aby tylko jedna procedura uzyskiwała dostęp do danych jednocześnie.
Kod przerwania można zsynchronizować przy użyciu ręcznego blokowania przerwań lub automatycznej serializacji wywołań zwrotnych.
Ręczne blokowanie przerwań
UMDF uzyskuje blokadę przerwania przed wywołaniem OnInterruptIsr, OnInterruptDisable lub OnInterruptEnable wywołań zwrotnych.
Jeśli sterownik musi zsynchronizować dowolny kod przy użyciu blokady przerwania, wywołuje metodę IWDFInterrupt::AcquireInterruptLock i IWDFInterrupt::ReleaseInterruptLock. Na przykład sterownik uzyskuje i zwalnia blokadę przerwania w procedurze wywołania zwrotnego OnInterruptWorkItem przy użyciu tych metod. Jednak w wywołaniach zwrotnych we/wy (takich jak OnRead i OnWrite) sterownik najpierw wywołuje IWDFInterrupt::TryToAcquireInterruptLock aby zdecydować, czy ustawić element roboczy w kolejce, czy wykonać pracę w tym samym wątku, aby uniknąć możliwego zakleszczenia. Przykład scenariusza zakleszczenia, który może być spowodowany wywołaniem metody IWDFInterrupt::AcquireInterruptLock z dowolnego kontekstu wątku, zobacz sekcję Uwagi IWDFInterrupt::AcquireInterruptLock.
Jeśli funkcja IWDFInterrupt::TryToAcquireInterruptLock zwraca wartość TRUE, sterownik nabył blokadę przerwania w tym samym wątku. W takim przypadku sterownik wykonuje pracę, która wymagała tej blokady, a następnie wywołuje metodę ReleaseInterruptLock. Jeśli IWDFInterrupt::TryToAcquireInterruptLock zwraca FALSE, sterownik umieszcza element roboczy w kolejce i wykonuje pracę w metodzie zwrotnej OnWorkItem. W takim przypadku element roboczy nie może używać automatycznej serializacji.
Używanie automatycznej serializacji
Sterownik UMDF może żądać automatycznej synchronizacji wywołania zwrotnego przez wywołanie IWDFDeviceInitialize::SetLockingConstraint z parametrem LockType ustawionym na WdfDeviceLevel.
Następnie sterownik ustawia członek AutomaticSerialization swojej struktury WUDF_INTERRUPT_CONFIG na wartość TRUE przed wywołaniem CreateInterrupt.
W rezultacie UMDF serializuje wywołania zwrotne OnInterruptWorkItem sterownika z kolejką we/wy, anulowaniem żądań i procedurami wywołania zwrotnego obiektów plików. W tym scenariuszu UMDF używa blokady wywołania zamiast blokady obiektu przerwania.