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.
System operacyjny wysyła wszystkie żądania we/wy na urządzeniu do sterownika klasy. Sterownik klasy z kolei żąda informacji specyficznych dla sprzętu z minidriver, przekazując SPP do minidriver. Sterownik klasy określa operację żądaną w elemencie Command bloku żądania strumienia.
Zarówno cały minidriver, jak i każdy strumień w ramach minidrivera, mogą odbierać żądania we/wy. Minidriver musi zapewnić procedurę StrMiniReceiveDevicePacket do obsługi żądań obejmujących całe urządzenie. Każdy strumień musi obsługiwać dwie procedury obsługi żądań we/wy: jeden dla żądań danych i jeden dla żądań kontroli. Sterownik klasy wywołuje wywołanie zwrotne żądania danych StrMiniReceiveStreamDataPacket w celu obsługi wszystkich żądań odczytu i zapisu w strumieniu. Wszystkie inne żądania strumienia są przekazywane do elementu StrMiniReceiveStreamControlPacket.
Jeśli sterownik klasy obsługuje synchronizację dla mini sterownika, kolejkuje żądania strumieniowe i wysyła je do mini sterownika pojedynczo. Sterownik klasy obsługuje trzy oddzielne kolejki — jeden dla żądań urządzeń i jeden dla żądań strumienia danych i żądań kontroli. Minidriver może sygnalizować gotowość do przyjęcia nowego żądania z jednej z tych kolejek w następujący sposób:
| Typ żądania | Procedura | NotificationType Parametr procedury |
|---|---|---|
żądanie urządzenia |
GotowyNaZapytanieONastępneUrządzenie |
|
żądanie kontroli strumienia |
GotowyDoNastępnegoŻądaniaKontroliStrumienia |
|
żądanie strumienia danych |
GotowyDoŻądaniaDanychNastępnegoStrumienia |
Gdy sterownik klasy wywołuje StrMiniReceiveXXXPacket, przekazuje blok żądania strumieniowego do minidrivera. Procedura minidrivera ma wyłączny dostęp do bloku żądania strumienia, dopóki nie zasygnalizuje sterownikowi klasy, że ukończyła żądanie.
Gdy minidriver zakończy przetwarzanie żądania, powinien zasygnalizować sterownik klasy, który ukończył żądanie w następujący sposób:
Minidriver powinien ustawić stan żądania w polu Stan bloku żądania strumienia.
Minidriver powinien zasygnalizować, że żądanie zostało zakończone, wywołując element StreamClassDeviceNotification lub StreamClassStreamNotification. Aby ukończyć żądanie urządzenia, minidriver wywołuje funkcję StreamClassDeviceNotification z parametrem NotificationType DeviceRequestComplete. Aby ukończyć żądanie strumienia, minidriver wywołuje StreamClassStreamNotification z parametrem NotificationType StreamRequestComplete.
Jeśli sterownik klasy obsługuje synchronizację, a minidriver nie zasygnalizował jeszcze sterownikowi klasy, że jest gotowy na kolejne żądanie w tej kolejce, powinien to zrobić teraz.
Minidriver może połączyć 2 i 3 poprzez wywołanie StreamClassCompleteRequestAndMarkQueueReady.
Minidriver przetwarza żądania asynchronicznie, więc sterownik klasy może wymagać anulowania lub przekroczenia limitu czasu żądania. W tym celu minidriver musi dostarczyć StrMiniCancelPacket i rutynę StrMiniRequestTimeout. Sterownik klasy wywołuje odpowiednią procedurę minidriver, gdy anuluje lub przekracza limit czasu żądania.
Sterownik klasy anuluje żądanie, gdy bazowe żądanie we/wy zostanie anulowane przez system operacyjny. Sterownik klasy powoduje przekroczenie limitu czasu żądań, które trwają zbyt długo do przetworzenia — zmniejsza licznik liczby sekund, pozostających do przekroczenia limitu czasu żądania, w elemencie TimeoutCounter bloku żądania strumienia. Jeśli minidriver musi odroczyć przetwarzanie na żądanie na długi czas, powinien ustawić członka TimeoutCounter na zero — sterownik klasy nie policzy limitu czasu dla żądania. Po wznowieniu przetwarzania żądania przez minidriver należy zresetować element TimeoutCounter , aby był równy członkowi timeoutOriginal bloku żądania strumienia. Minidriver może zresetować TimeoutOriginal, aby zmienić czas przed wygaśnięciem żądania. Aby uzyskać szczegółowe informacje, zobacz HW_STREAM_REQUEST_BLOCK.