Udostępnij przez


Podstawowe zapytania pomocy technicznej dotyczące właściwości dźwięku

Podczas określania danych dla żądania właściwości zestawu dla filtru, pinu lub węzła, klient często musi znać prawidłowe zakresy danych dla wartości, które określa dla tej właściwości. Zakresy mogą się różnić od urządzenia do urządzenia, a nawet od węzła do węzła w ramach tego samego urządzenia.

Niektóre właściwości są definiowane tak, aby zezwalać na składanie żądań dotyczących właściwości w celu określenia wartości, które są poza zakresem, ale sterowniki miniportu dyskretnie ograniczają te wartości do obsługiwanego zakresu (na przykład zobacz KSPROPERTY_AUDIO_VOLUMELEVEL). Kolejne żądanie GET o tę samą właściwość pobiera rzeczywiste ustawienia sterownika dla wartości, które mogą być ograniczonymi wersjami wartości określonych przez klienta w żądaniu ustawienia.

Jednak klient może potrzebować znajomości zakresu wartości właściwości zamiast polegać na sterowniku miniportu, aby automatycznie zaciskać wartość poza zakresem. Na przykład aplikacja z oknem, która przedstawia suwak sterowania głośnością dla urządzenia audio, może wymagać znajomości zakresu głośności urządzenia, aby zamapować ten zakres na pełną długość suwaka.

Routyna obsługi sterownika dla danej właściwości musi dostarczać informacje o zakresie w odpowiedzi na żądanie podstawowego wspomagania właściwości (KSPROPERTY_TYPE_BASICSUPPORT). Podczas wysyłania żądania właściwości podstawowej obsługi do sterownika klient udostępnia bufor wartości, do którego program obsługi właściwości zapisuje informacje podstawowe, które składają się ze struktury KSPROPERTY_DESCRIPTION, po której mogą występować dane specyficzne dla danej właściwości. Te dane zwykle składają się ze specyfikacji dla co najmniej jednego zakresu parametrów, w zależności od właściwości.

Ogólnie rzecz biorąc, klient nie wie z wyprzedzeniem, jak duży powinien być ten bufor wartości i musi wysłać jedno lub dwa wstępne żądania do programu obsługi właściwości, aby określić rozmiar wartości. Format tych wstępnych żądań jest dobrze zdefiniowany. Klienci oczekują, że sterowniki będą zgodne z tymi konwencjami podczas obsługi żądania podstawowej pomocy technicznej:

  • Jeśli żądanie określa rozmiar wartości jako sizeof(ULONG), program obsługi właściwości powinien zapisać wartość elementu członkowskiego AccessFlags struktury KSPROPERTY_DESCRIPTION do buforu wartości o rozmiarze ULONG. Program obsługi ustawia bit flagi KSPROPERTY_TYPE_BASICSUPPORT, jeżeli obsługuje dalsze żądania dotyczące właściwości wsparcia podstawowego.

  • Jeśli żądanie określa rozmiar wartości jako sizeof(KSPROPERTY_DESCRIPTION), program obsługi powinien zapisać strukturę KSPROPERTY_DESCRIPTION w buforze danych. Program obsługi ustawia pole DescriptionSize struktury równe rozmiarowi tej struktury oraz rozmiar wszystkich dodatkowych informacji specyficznych dla właściwości, które program obsługi ma do załadowania do buforu danych zgodnie ze strukturą. Jest to rozmiar buforu wartości, który klient musi przydzielić, aby zawierał podstawowe informacje o obsłudze właściwości.

  • Jeśli żądanie określa rozmiar wartości, który jest wystarczająco duży, aby zawierać zarówno strukturę KSPROPERTY_DESCRIPTION, jak i informacje specyficzne dla właściwości, program obsługi powinien zapisać strukturę KSPROPERTY_DESCRIPTION na początku buforu i zapisać informacje specyficzne dla właściwości w części buforu danych, która następuje po końcu struktury KSPROPERTY_DESCRIPTION. Podczas zapisywania struktury KSPROPERTY_DESCRIPTION, program obsługi powinien ustawić pole DescriptionSize na rozmiar tej struktury plus rozmiar informacji specyficznych dla właściwości, które następują po strukturze.

Jeśli żądanie określa rozmiar wartości, który nie jest zgodny z jednym z tych trzech przypadków, program obsługi właściwości odrzuca żądanie i zwraca kod stanu STATUS_BUFFER_TOO_SMALL.

Informacje specyficzne dla właściwości, które program obsługi zapisuje w buforze wartości, mogą zawierać zakresy danych dla wartości właściwości. Element członek MembersSize KSPROPERTY_MEMBERSHEADER wskazuje, czy zakresy danych są uwzględnione.

  • Wartość MembersSize jest równa zero, jeśli nie są potrzebne żadne zakresy. Jest to na przykład przypadek, jeśli wartości właściwości są typu BOOL.

  • MembersSize jest niezerowe, jeśli po strukturze KSPROPERTY_MEMBERSHEADER następują deskryptory zakresu dla jednej lub więcej wartości właściwości.

W przypadku wartości właściwości typu BOOL nie jest wymagany deskryptor zakresu, ponieważ zakres jest niejawnie ograniczony do wartości TRUE i FALSE. Jednak deskryptory zakresu są potrzebne do określenia zakresów wartości właściwości z typami liczbowymi całkowitymi.

Na przykład żądanie podstawowego wsparcia dla właściwości KSPROPERTY_AUDIO_VOLUMELEVEL w węźle głośności (KSNODETYPE_VOLUME) pobiera minimalne i maksymalne ustawienia głośności dla tego węzła. W takim przypadku klient musi przydzielić bufor wartości, który jest wystarczająco duży, aby zawierał następujące struktury:

KSPROPERTY_DESCRIPTION

KSPROPERTY_MEMBERSLIST

KSPROPERTY_STEPPING_LONG

Trzy struktury są pakowane do sąsiednich lokalizacji w buforze według kolejności pokazanej na wcześniejszej liście. Podczas obsługi żądania sterownik miniportu zapisuje minimalne i maksymalne poziomy woluminu do elementu członkowskiego Bounds struktury KSPROPERTY_STEPPING_LONG.

Aby zapoznać się z przykładem podstawowego żądania pomocy technicznej z tablicą deskryptorów zakresu, zobacz rysunek w temacie Uwidacznianie węzłów wielokanałowych. Aby uzyskać więcej informacji na temat podstawowych żądań właściwości wspierających, zobacz KS Properties. Aby zapoznać się z przykładami kodu, zapoznaj się z implementacjami obsługi właściwości w przykładowych sterownikach audio w zestawie Sterowników systemu Microsoft Windows (WDK).