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.
Najlepsze praktyki dla sterownika kontrolera hosta do obsługi żądań I/O wysyłanych przez UCX.
UCX śledzi wszystkie punkty końcowe utworzone przez sterownik kontrolera hosta dla urządzeń na magistrali USB. Wszystkie żądania transferu danych wysyłane przez sterownik koncentratora lub przez inny sterownik, który znajduje się wyżej w stosie urządzeń USB, są najpierw obsługiwane przez UCX. UCX jest odpowiedzialny za przekazywanie obiektu żądania platformy do prawidłowej kolejki punktu końcowego. Blok żądań USB (URB) zawarty w żądaniu może określać deskryptor punktu końcowego. Jeśli określono uchwyt punktu końcowego, funkcja UCX sprawdza odpowiedni punkt końcowy wśród punktów końcowych znajdujących się na urządzeniu. Jeśli określony uchwyt punktu końcowego jest dostępny, żądanie jest przekazywane do kolejki tego punktu końcowego. Jeśli nie można odnaleźć określonego dojścia punktu końcowego, żądanie zakończy się niepowodzeniem. Jeśli nie określono uchwytu, żądanie dotyczy domyślnego punktu końcowego, a UCX przekazuje to żądanie do domyślnej kolejki punktu końcowego sterownika kontrolera hosta dla tego urządzenia.
Aby zapewnić zgodność z istniejącymi sterownikami USB, kontroler hosta musi spełniać następujące wymagania podczas realizacji żądania URB.
- WdfRequestComplete należy wywołać na poziomie DISPATCH_LEVEL.
- Jeśli URB został dostarczony do kolejki struktury i sterownik zaczął przetwarzać go synchronicznie w wątku sterownika wywołującego lub DPC, żądanie nie powinno być także kończone synchronicznie. Żądanie musi zostać ukończone na osobnym DPC, które można zaplanować, wywołując WdfDpcEnqueue.
- Podobnie jak w przypadku powyższego wymagania, po otrzymaniu EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE lub EVT_WDF_REQUEST_CANCEL sterownik kontrolera hosta musi wykonać żądanie URB na oddzielnym kontrolerze domeny od wątku wywołującego lub DPC. Domyślnie usługa WDF wykonuje anulowane żądania w kolejce synchronicznie. To zachowanie może powodować problemy z żądaniami URB. Z tego powodu sterownik musi dostarczyć wywołanie zwrotne EvtIoCanceledOnQueue dla kolejek URB.
Obiekt żądania platformy dla IOCTL_INTERNAL_USB_SUBMIT_URB zawiera adres URB znajdujący się w lokalizacji Parameters.Others.Arg1 żądania. Po zakończeniu żądania stan URB musi być ustawiony na USBD_STATUS_SUCCESS, lub na stan niepowodzenia, który wskazuje charakter błędu. Wartości stanu błędu są zdefiniowane w pliku nagłówka usb.h.