Propriedades do KS
Uma Propriedade representa uma configuração de capacidade ou estado de controle que pertence a um objeto de streaming de kernel, como um filtro ou pin. Os clientes de um minidriver de streaming de kernel podem enviar solicitações de propriedade get e set (KSPROPERTY_TYPE_GET e KSPROPERTY_TYPE_SET) para os filtros e pinos que o minidriver instanciou. Um grupo de propriedades relacionadas é conhecido como um conjunto de propriedades.
Para obter ou definir propriedades individuais, os clientes de modo de usuário chamam a função Win32 DeviceIoControl com o parâmetro dwIoControlCode definido como IOCTL_KS_PROPERTY. DeviceIoControl é descrito na documentação do SDK do Microsoft Windows. Os clientes no modo kernel devem chamar KsSynchronousDeviceControl.
O buffer de entrada é uma estrutura KSPROPERTY ou um wrapper que contém uma estrutura KSPROPERTY e outras informações relevantes para a solicitação. Em resposta a essa chamada, o sistema operacional envia um IRP para o driver de classe.
Quando o driver de classe recebe o IRP resultante, ele chama KsPropertyHandler. O driver de classe inclui como um parâmetro de chamada o endereço da estrutura KSPROPERTY que identifica as especificidades da solicitação de propriedade. A solicitação de propriedade é manipulada automaticamente no nível do driver de classe ou por um manipulador fornecido por minidriver. Consulte Conjuntos de Propriedades de Streaming de Kernel para obter informações de referência, incluindo quais conjuntos de propriedades são manipulados pelo driver de classe e que exigem manipuladores fornecidos por minidriver. Um minidriver pode substituir ou aumentar o manipulador de driver de classe fornecendo retornos de chamada para uma propriedade que é manipulada por padrão pelo driver de classe.
Se o minidriver tiver fornecido manipuladores para essa propriedade, KsPropertyHandler , por sua vez, desativa a solicitação para o retorno de chamada fornecido pelo minidriver apropriado.
Um minidriver fornece ponteiros para seus retornos de chamada de suporte de propriedade em uma estrutura do tipo KSPROPERTY_ITEM. Um minidriver agrupa uma matriz de estruturas de KSPROPERTY_ITEM relacionadas em uma estrutura KSPROPERTY_SET . Modelos de driver de classe diferentes têm métodos ligeiramente diferentes para o minidriver disponibilizar dados do conjunto de propriedades para o driver de classe. Você pode encontrar informações específicas do driver de classe seguindo os links no Kernel Streaming.
O minidriver também fornece um ponteiro para uma estrutura KSPROPERTY_VALUES em uma estrutura KSPROPERTY_ITEM. A estrutura KSPROPERTY_VALUES, por sua vez, contém uma matriz de estruturas KSPROPERTY_MEMBERSLIST . É aqui que o minidriver especifica o tamanho e o tipo de valores aceitáveis para a propriedade. Cada estrutura KSPROPERTY_MEMBERSLIST contém um membro de cabeçalho: consulte KSPROPERTY_MEMBERSHEADER Para obter informações sobre como especificar intervalos ou valores legais para uma propriedade compatível com o minidriver. Você também pode encontrar uma implementação desse mecanismo no exemplo testcap no WDK (Microsoft Windows Driver Kit).
Para relatar o tamanho e o tipo de valores aceitáveis para uma propriedade, o driver de classe retorna uma estrutura KSPROPERTY_DESCRIPTION em resposta a uma solicitação de KSPROPERTY_TYPE_BASICSUPPORT do cliente.
O driver de classe pode acrescentar uma lista de estruturas KSPROPERTY_MEMBERSHEADER à estrutura KSPROPERTY_DESCRIPTION.