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.
Minidriver dostarcza strukturę KSPIN_DESCRIPTOR dla każdego typu pinu do zainstalowania. Struktura deskryptora pinu jest znana jako fabryka pinów. Każda fabryka pinów może utworzyć jedno lub więcej wystąpień pinów określonego typu. Fabryka pinezek zawiera kilka tablic, które opisują typ pinezki instancjonowany przez ten deskryptor.
Minidriver określa jedną lub więcej kategorii KS, do których należą piny utworzone przez ten deskryptor, w elemencie członkowskim Kategorie KSPIN_DESCRIPTOR. KS używa kategorii do łączenia instancji pinów podczas tworzenia grafu filtru. Właściwość KSPROPERTY_TOPOLOGY_CATEGORIES wykonuje zapytania dotyczące tablicy kategorii funkcjonalnych, które obsługuje sterownik.
Minidriver udostępnia plik INF, który rejestruje co najmniej jedną nazwę urządzenia pin. Podczas instalacji system operacyjny ładuje nazwy i odpowiadające im kategorie do rejestru systemowego. Klienci mogą następnie wykonywać wywołania create-file z tymi nazwami urządzeń w celu zainicjowania pinów.
Klienci trybu użytkownika nazywają funkcję Win32 CreateFile nazwą urządzenia. Na przykład "\\.\filters\audio\default renderer" może być linkiem do urządzenia audio, które zostało skonfigurowane dla domyślnego wyjścia. Klienci trybu jądra wywołują ZwCreateFile w trybie jądra. Po powrocie procedury tworzenia pliku do uchwytu pliku, klienci KS komunikują się z instancjami pinów za pomocą właściwości KS.
W strukturach deskryptorów pinów minidriver układa tablice struktur KSPIN_INTERFACE i KSPIN_MEDIUM, które określają interfejsy i nośniki obsługiwane przez tę fabrykę pinów. KSPIN_DESCRIPTOR to również miejsce, w którym minidriver określa poprawne zakresy danych dla pinów utworzonych przez tę fabrykę. Robi to poprzez dostarczenie wskaźnika do tablicy struktur KSDATARANGE. Minidriver określa również kierunki przepływu danych i komunikacji dla nowych pinów utworzonych przez tę fabrykę pinów.
Minidriver umożliwia odnajdywanie fabryk końcówek w czasie działania poprzez obsługę zestawu właściwości KSPROPSETID_Pin.
Aby utworzyć połączenie pin, wywołaj procedurę KsCreatePin . W tym wywołaniu minidriver przekazuje wskaźnik do struktury typu KSPIN_CONNECT opisującego żądane połączenie. Po utworzeniu pina filtr widzi nowy pin jako obiekt pliku podporządkowany obiektowi pliku tego filtru.
Minidriver wywołuje funkcję KsValidateConnectRequest z użyciem struktur deskryptora podanych w wynikowym IRP_MJ_CREATE. Ta rutyna weryfikuje te struktury i zwraca wskaźnik do struktury połączenia i obiektu pliku głównego.
Minidrivery używają elementów przepływów danych i komunikacjistruktur KSPIN_DESCRIPTOR do zdefiniowania następujących specyfikacji pinów:
Złącze źródłowe IRP a złącze odbiorcze IRP
Pin źródła IRP wydaje IRP; pin ujścia IRP je odbiera. Klient trybu użytkownika wysyła żądania we/wy bezpośrednio do ujścia IRP za pośrednictwem odpowiedniego dojścia do pliku. Klienci używają KSPROPERTY_PIN_COMMUNICATION do sprawdzania, czy dane przepływają do pinu lub z niego.
Pin źródła danych versus pin odbiorcy danych
Numer PIN źródła danych jest wyprowadzanym numerem PIN filtru; numer PIN ujścia danych jest numerem PIN wejściowym. Właściwość bycia źródłem danych lub ujściem jest niezależna od bycia źródłem lub ujściem IRP. Na przykład klient może połączyć źródło danych, przypięcie Ujścia IRP do ujścia danych, numer PIN źródła IRP. Klienci używają KSPROPERTY_PIN_DATAFLOW do sprawdzania, czy dane przepływają do typu pinu lub z niego.
Po zakończeniu połączenia należy zamknąć uchwyt źródłowego pinu, zanim obiekt bazowy pliku zostanie zniszczony. Jeśli źródłowy pin opiera się na zasobach dostarczonych przez pin wyjściowy, obowiązkiem pinu wyjściowego jest powiadomienie źródła w momencie zakończenia połączenia.
Klient wchodzi w interakcję z pinem przesyłania strumieniowego jądra, wywołując rutynę DeviceIoControl (opisaną w dokumentacji Microsoft Windows SDK) z użyciem IRP_MJ_DEVICE_CONTROL. Obiekt wywołujący identyfikuje swoje żądanie za pomocą kodu sterującego I/O, który umieszcza w Parameters.DeviceIoControl.IoControlCode w strukturze lokalizacji stosu I/O.
Aby obsłużyć żądania, minidriver dostarcza wskaźnik do struktury KSDISPATCH_TABLE w wywołaniu funkcji KsAllocateObjectHeader.
Żądania zapisu zawierają wskaźnik do tablicy struktur KSSTREAM_HEADER , które z kolei zawierają wskaźniki do strumieniowego przesyłania danych. Żądania odczytu zawierają wskaźnik do tablicy pustych struktur nagłówków, w których powinny zostać zwrócone dane odczytu.