Estrutura KSPROPERTY

A estrutura KSPROPERTY especifica uma única propriedade de streaming de kernel dentro de um conjunto de propriedades.

As estruturas KSEVENT, KSMETHOD e KSPROPERTY são aliases para a estrutura KSIDENTIFIER . Dessa forma, suas definições são idênticas.

Sintaxe

struct KSPROPERTY {
  GUID Set;
  ULONG Id;
  ULONG Flags;
};

Membros

Set

Especifica um GUID que identifica um conjunto de propriedades de streaming de kernel. Para obter mais informações sobre GUIDs de conjunto de propriedades, consulte a seção Comentários abaixo.

Id

Especifica o membro do conjunto de propriedades.

Flags

Especifica o tipo de solicitação. Se você estiver escrevendo um minidriver de classe de fluxo, consulte também KSPROPERTY_ITEM para obter informações de sinalizador específicas da classe.

Os sinalizadores devem ser um dos valores listados na tabela a seguir. Alguns dos sinalizadores podem ser combinados usando uma operação OR bit a bit.

Valor Descrição
KSPROPERTY_TYPE_GET Recupera o valor do item de propriedade especificado.
KSPROPERTY_TYPE_SET Define o valor do item de propriedade especificado.
KSPROPERTY_TYPE_SETSUPPORT Consulta se o driver dá suporte a esse conjunto de propriedades.
KSPROPERTY_TYPE_BASICSUPPORT Consulta os tipos de solicitação que o driver manipula para esse item de propriedade. Retorna KSPROPERTY_TYPE_GET ou KSPROPERTY_TYPE_SET ou ambos. Todos os conjuntos de propriedades devem dar suporte a esse sinalizador.
KSPROPERTY_TYPE_DEFAULTVALUES Consulta os valores padrão para o item de propriedade especificado. Retorna uma estrutura do tipo KSPROPERTY_VALUES.
KSPROPERTY_TYPE_RELATIONS Consulta todas as propriedades com dependências na configuração atual dessa propriedade. Especifica que a lista de relações de propriedade deve ser retornada ou a quantidade de sala de buffer exigida por essa lista se o buffer de retorno for do tamanho de um ULONG. Cada elemento está em FILE_QUAD_ALIGNMENT, precedido por uma estrutura KSMULTIPLE_ITEM . Isso não é válido ao consultar o suporte da propriedade definida em geral. Todos os conjuntos de propriedades devem dar suporte a esse sinalizador.
KSPROPERTY_TYPE_SERIALIZESET Serialize o conjunto de propriedades usando as estruturas de KSPROPERTY_SERIALHDR padrão e KSPROPERTY_SERIAL .
KSPROPERTY_TYPE_UNSERIALIZESET Deserialize o conjunto de propriedades usando as estruturas de KSPROPERTY_SERIALHDR padrão e KSPROPERTY_SERIAL .
KSPROPERTY_TYPE_SERIALIZESIZE Retorna um ULONG especificando o tamanho dos dados da propriedade quando serializado como parte de uma solicitação de KSPROPERTY_TYPE_SERIALIZESET . Um tamanho de zero indica que uma propriedade não precisa ser serializada.
KSPROPERTY_TYPE_SERIALIZERAW Especifica que as propriedades nesse conjunto devem ser serializadas pelo manipulador de suporte do conjunto de propriedades, se houver. Caso contrário, a chamada falhará. O formato de serialização é privado. Essa operação deve ser o inverso de KSPROPERTY_TYPE_UNSERIALIZERAW.
KSPROPERTY_TYPE_TOPOLOGY A propriedade passada é do tipo KSP_NODE, em que NodeId indica a ID numérica do nó de topologia. Não defina esse sinalizador por conta própria; em vez disso, OU com outros sinalizadores nesta tabela.
KSPROPERTY_TYPE_UNSERIALIZERAW Especifica que o buffer fornecido contém um grupo de propriedades que pertencem a esse conjunto que devem ser nãoializadas pelo manipulador de suporte do conjunto de propriedades, se houver. Caso contrário, a chamada falhará. O formato de serialização é privado. Essa operação deve ser o inverso de KSPROPERTY_TYPE_SERIALIZERAW.

Comentários

O tamanho do buffer de saída passado determina quais dados são retornados de uma solicitação de KSPROPERTY_TYPE_BASICSUPPORT. Se o buffer de saída for do tamanho de um ULONG, somente os sinalizadores de acesso serão retornados. Se o buffer de saída for o tamanho da estrutura KSPROPERTY_DESCRIPTION , a estrutura será preenchida com os sinalizadores de acesso, o tamanho inclusivo das informações de valores inteiros, as informações de tipo de valor da propriedade e o número de listas de membros que correspondem à estrutura.

Para uma solicitação de KSPROPERTY_TYPE_RELATIONS, os dados retornados também dependem do tamanho do buffer de saída. Se o tamanho do buffer de saída for zero, o tamanho necessário para retornar as propriedades relacionadas será retornado em BytesReturned com um aviso status de STATUS_BUFFER_OVERFLOW. Se o buffer for do tamanho de uma estrutura KSMULTIPLE_ITEM , o tamanho do byte e a contagem de relações serão retornados. Caso contrário, espera-se que o buffer seja longo o suficiente para retornar a estrutura KSMULTIPLE_ITEM e todos os identificadores de propriedade relacionados, que é retornado como uma lista de estruturas KSIDENTIFIER .

KSPROPERTY_TYPE_SERIALIZESET e solicitações de KSPROPERTY_TYPE_UNSERIALIZESET permitem a interação com várias propriedades com uma única chamada do cliente. Se o manipulador de streaming de kernel estiver sendo usado para processar solicitações de propriedade, elas serão divididas em várias chamadas pela função KsPropertyHandler . Ao usar esse manipulador, a definição do conjunto de propriedades controla quais propriedades devem ser serializadas.

Para solicitações de serialização, o membro SerializedSize da estrutura de KSPROPERTY_ITEM relevante é verificado quanto a um valor diferente de zero que indica o tamanho, em bytes, da propriedade . Se o valor do membro SerializedSize for 1, ele será desconhecido e deverá ser consultado (todas as propriedades desconhecidas começam com uma estrutura KSMULTIPLE_ITEM que pode ser consultada separadamente). Para consultar o tamanho total que uma serialização levaria, o cliente passa um buffer de comprimento zero na chamada para DeviceIoControl. BytesReturned retorna o tamanho, em bytes, que o buffer deve ser para serializar o conjunto e um aviso status de STATUS_BUFFER_OVERFLOW. Um buffer alocado com esse tamanho pode ser preenchido com os dados serializados.

O formato do buffer de serialização é um KSPROPERTY_SERIALHDR, seguido por propriedades serializadas. Cada propriedade a seguir contém um cabeçalho (KSPROPERTY_SERIAL), seguido pelos dados da propriedade, com o início de cada propriedade em FILE_LONG_ALIGNMENT. Observe que a estrutura do cabeçalho serial é definida como em FILE_LONG_ALIGNMENT.

KSPROPERTY_TYPE_SERIALIZERAW e KSPROPERTY_TYPE_UNSERIALIZERAW têm suporte se houver um manipulador de item de propriedade. A função KsPropertyHandler invoca o manipulador fornecido pelo minidriver. O tamanho do buffer necessário para serialização também pode ser consultado passando um buffer de comprimento zero para uma solicitação bruta de serialização. Como os manipuladores são anexados a itens de propriedade em vez do conjunto de propriedades, um item específico dentro do conjunto de propriedades deve ser especificado no parâmetro Property . Esse manipulador pode lidar com várias propriedades dentro do conjunto.

A Microsoft fornece vários GUIDs de conjunto de propriedades definidos pelo sistema. Os minidrivers especificam um desses GUIDs no membro Set . Os conjuntos de propriedades de streaming de kernel normalmente começam com um KSPROPSETID ou um prefixo PROPSETID . Os conjuntos de propriedades de streaming de kernel são definidos em ks.h, ksmedia.h, bdamedia.h e possivelmente em outros arquivos de cabeçalho.

Para obter mais informações sobre eventos de streaming de kernel, consulte Propriedades, eventos e métodos do KS.

Requisitos

Cabeçalho: ks.h (inclua Ks.h)

Confira também

KSEVENT

KSMETHOD

KSIDENTIFIER

KSMETHOD_ITEM

KSE_NODE

KSPROPERTY_DESCRIPTION

KSPROPERTY_ITEM

KSMULTIPLE_ITEM

KsPropertyHandler

KSPROPERTY_SERIALHDR

KSPROPERTY_SERIAL