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.
Podstawowy sterownik portu magazynu jest odpowiedzialny za ponawianie żądań, jeśli wystąpią błędy urządzenia, które obejmują przesyłanie danych w magistrali, w tym błędy parzystości magistrali, przekroczenia czasu wyboru i błędy zajętości elementu docelowego/kontrolera. Jeśli ponowienie próby zakończy się niepowodzeniem, sterownik portu pamięci zakończy żądanie z odpowiednim błędem i także zapisuje błąd I/O.
Sterownik klasy magazynu nigdy nie powinien próbować ponowić żądania, które sterownik portu już zakończył niepowodzeniem z powodu któregokolwiek z wymienionych wcześniej błędów.
Sterownik klasy magazynu jest odpowiedzialny za ponawianie żądań, które kończą się niepowodzeniem z powodu błędów specyficznych dla urządzenia, błędów docelowych/kontrolerów innych niż docelowy/kontroler zajęty, resetowanie magistrali lub przekroczenia limitu czasu żądania. Ogólnie rzecz biorąc, procedura RetryRequest może ponownie przekazać taki IRP do następnego niższego sterownika i spowodować, aby SRB został umieszczony na czele kolejki specyficznej dla jednostki logicznej (LU) w sterowniku portu.
W szczególności należy wykonać procedurę RetryRequest :
Upewnij się, że żądanie częściowego transferu ma poprawne wartości ustawione dla adresu początkowego i długości.
Wyzeruj członków SrbStatus i ScsiStatus w SRB.
Skonfiguruj pole SrbFlags, jeśli to konieczne dla urządzenia.
Skonfiguruj lokalizację stosu we/wy dla sterownika portu w IRP zgodnie z opisem w temacie Procedury wysyłania sterownika klasy magazynu za pomocą procedury SplitTransferRequest sterownika klasy magazynu.
Wywołaj metodę IoSetCompletionRoutine dla protokołu IRP, ponieważ procedura IoCompletion sterownika musi zwolnić SRB przed zwróceniem protokołu IRP. Procedura IoCompletion może również wymagać ponawiania próby wykonania żądania więcej niż raz lub wywołania procedury InterpretRequestSense lub ReleaseQueue sterownika.
Przekaż żądanie do następnego niższego sterownika za pomocą usługi IoCallDriver.