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.
Podczas usuwania urządzenia podrzędnego (PDO podrzędnego) główny sterownik magistrali musi cofnąć wszystkie operacje, które zostały wykonane, aby dodać i uruchomić urządzenie.
Kierowca autobusu usuwa urządzenie podrzędne, stosując taką procedurę, jak poniższa w swojej procedurze DispatchPnP:
Czy sterownik obsłużył poprzednie żądanie IRP_MN_SURPRISE_REMOVAL dla tego PDO?
Jeśli tak, wykonaj pozostałe czyszczenie i przejdź do kroku 4.
Sterownik zwykle utrzymuje flagę w rozszerzeniu urządzenia, która wskazuje, czy sterownik obsłużył żądanie IRP_MN_SURPRISE_REMOVAL dla urządzenia.
Zrealizuj wszystkie żądania oczekujące w kolejce w sterowniku.
Usuń zasilanie z urządzenia, jeśli sterownik magistrali jest w stanie to zrobić, i powiadomić menedżera zasilania przez wywołanie PoSetPowerState.
Sterownik magistrali wyłącza urządzenie podrzędne, jeśli to możliwe, i powiadamia menedżera zasilania o zmianie stanu zasilania urządzenia. Kierowca autobusu robi to w odpowiedzi na żądanie IRP_MN_REMOVE_DEVICE ; właściciel zasad zasilania urządzenia nie wysyła żądania IRP_MN_SET_POWER po usunięciu urządzenia. Aby uzyskać dodatkowe informacje, zobacz Power Management.
Jeśli sterownik magistrali zgłosił to urządzenie w najnowszej odpowiedzi na żądanie IRP_MN_QUERY_DEVICE_RELATIONS dotyczącym BusRelations, urządzenie jest nadal fizycznie obecne na maszynie. W tym przypadku kierowca autobusu:
Zachowuje PDO dla urządzenia aż do jego fizycznego usunięcia.
Ustawia parametr Irp-IoStatus.Status> na STATUS_SUCCESS.
Kończy proces IRP za pomocą funkcji IoCompleteRequest.
Zwraca wartość z procedury DispatchPnP .
Sterownik magistrali musi nadal zgłaszać to urządzenie w kolejnych wyliczeniach (IRP_MN_QUERY_DEVICE_RELATIONS dla busRelations), dopóki urządzenie nie zostanie fizycznie usunięte. Menedżer PnP śledzi, czy urządzenie enumerowane zostało dodane i uruchomione.
Jeśli urządzenie nie zostało uwzględnione w najnowszej odpowiedzi sterownika magistrali na żądanie IRP_MN_QUERY_DEVICE_RELATIONS dla BusRelations, sterownik magistrali uznaje, że urządzenie jest fizycznie usunięte z maszyny. W takim przypadku kierowca autobusu wykonuje następujące czynności:
Czyści alokacje specyficzne dla urządzenia, pamięć, zdarzenia itd.
Ustawia parametr Irp-IoStatus.Status> na STATUS_SUCCESS.
Kończy proces IRP za pomocą funkcji IoCompleteRequest.
Zwalnia PDO przy użyciu IoDeleteDevice.
Kierowca autobusu musi usunąć PDO, jeśli pominął urządzenie na najnowszej liście BusRelations. Jeśli użytkownik ponownie podłączy urządzenie do maszyny, sterownik magistrali musi utworzyć nowe PDO w odpowiedzi na następne zapytanie BusRelations. Jeśli sterownik magistrali ponownie wykorzystuje to samo PDO dla nowego wystąpienia urządzenia, urządzenie nie będzie działać prawidłowo.
Zwraca wartość z procedury DispatchPnP .
Jeśli urządzenie jest nadal obecne, gdy Menedżer PnP wysyła żądanie IRP_MN_REMOVE_DEVICE, sterownik magistrali zachowuje PDO. Jeśli w późniejszym czasie urządzenie zostanie fizycznie usunięte z magistrali, menedżer PnP wyśle kolejny IRP_MN_REMOVE_DEVICE. Po otrzymaniu kolejnej operacji usuwania protokołu IRP sterownik magistrali usuwa obiekt PDO dla urządzenia.
Kierowca magistrali musi mieć możliwość obsługi IRP_MN_REMOVE_DEVICE dla urządzenia, które zostało już usunięte i którego pdO jest oznaczone do usunięcia. W odpowiedzi na taki IRP sterownik magistrali może zakończyć IRP z powodzeniem lub zwrócić STATUS_NO_SUCH_DEVICE. Opis uruchomieniowy urządzenia nie został jeszcze usunięty w tym przypadku, pomimo że sterownik magistrali wcześniej wywołał IoDeleteDevice, ponieważ jakiś komponent nadal ma odwołanie do obiektu. W związku z tym kierowca autobusu może uzyskać dostęp do obiektu PDO podczas obsługi drugiego usuwania IRP. Sterownik magistrali nie może wywołać IoDeleteDevice ponownie w przypadku PDO; system we/wy usuwa obiekt PDO, gdy jego liczba odwołań osiągnie zero.
Sterownik magistrali nie usuwa struktur danych dla urządzenia podrzędnego, dopóki nie otrzyma żądania IRP_MN_REMOVE_DEVICE dla urządzenia. Sterownik magistrali może wykryć, że urządzenie zostało usunięte i wywołać metodę IoInvalidateDeviceRelations, ale nie może usunąć PDO urządzenia, dopóki menedżer PnP nie wyśle żądania IRP_MN_REMOVE_DEVICE.