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.
Procedura DispatchCleanup sterownika obsługuje IRPs dla kodu funkcji we/wy IRP_MJ_CLEANUP.
Sterowniki mogą używać procedury DispatchCleanup do wykonywania wszelkich operacji oczyszczania, które są potrzebne po zamknięciu wszystkich dojść do obiektu pliku. Należy pamiętać, że DispatchCleanup jest wywoływane w kontekście procesu, który zamknął końcowy uchwyt; ten proces może różnić się od procesu, który początkowo otworzył uchwyt. (Różnica ta zazwyczaj występuje, ponieważ inny proces używa funkcji w trybie użytkownika DuplicateHandle w celu zduplikowania uchwytów procesów). Sterowniki, które muszą wykonać oczyszczanie w oryginalnym kontekście procesu, mogą używać procedury PsSetCreateProcessNotifyRoutine, aby zarejestrować procedurę wywołania zwrotnego w tym celu, ale należy pamiętać, że takie wywołania zwrotne są ograniczonym zasobem systemowym.
Ogólnie rzecz biorąc, procedura DispatchCleanup musi przetworzyć żądanie IRP_MJ_CLEANUP, wykonując następujące czynności dla każdego IRP, który znajduje się obecnie w kolejce urządzenia (lub wewnętrznej kolejce sterownika IRP), dla obiektu urządzenia docelowego i jest skojarzony z obiektem pliku:
Wywołaj metodę IoSetCancelRoutine , aby ustawić wskaźnik procedury Anuluj na wartość NULL.
Anuluj każdy IRP znajdujący się obecnie w kolejce dla obiektu urządzenia docelowego, jeśli obiekt pliku określony w lokalizacji stosu wejścia/wyjścia sterownika dla zakolejkowanego IRP jest zgodny z obiektem pliku, który został odebrany w lokalizacji stosu wejścia/wyjścia dla żądania IRP_MJ_CLEANUP.
Wywołaj metodę IoCompleteRequest, aby ukończyć IRP i zwrócić STATUS_SUCCESS.
Podczas przetwarzania żądania IRP_MJ_CLEANUP sterownik może odbierać dodatkowe żądania, takie jak IRP_MJ_READ lub IRP_MJ_WRITE. W związku z tym sterownik, który musi cofnąć przydział zasobów, musi również zsynchronizować wykonywanie procedury DispatchCleanup z innymi procedurami wysyłania, takimi jak DispatchRead i DispatchWrite.