Partilhar via


Função WdfDeviceAddQueryInterface (wdfqueryinterface.h)

[Aplica-se somente ao KMDF]

O método WdfDeviceAddQueryInterface cria uma interface definida pelo driver que outros drivers podem consultar e usar.

Sintaxe

NTSTATUS WdfDeviceAddQueryInterface(
  [in] WDFDEVICE                   Device,
  [in] PWDF_QUERY_INTERFACE_CONFIG InterfaceConfig
);

Parâmetros

[in] Device

Um identificador para um objeto de dispositivo de estrutura.

[in] InterfaceConfig

Um ponteiro para uma estrutura de WDF_QUERY_INTERFACE_CONFIG alocada pelo driver que descreve a interface.

Valor de retorno

WdfDeviceAddQueryInterface retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INVALID_DEVICE_REQUEST
O método foi chamado no IRQL errado.
STATUS_INVALID_PARAMETER
Um parâmetro de entrada (possivelmente incluindo membros da estrutura WDF_QUERY_INTERFACE_CONFIG) era inválido.
STATUS_INFO_LENGTH_MISMATCH
O tamanho da estrutura de WDF_QUERY_INTERFACE_CONFIG estava incorreto.
STATUS_INSUFFICIENT_RESOURCES
Não havia memória suficiente.
 

Para obter uma lista de valores retornados adicionais, consulte Erros de Criação de Objeto da Estrutura.

Esse método também pode retornar outros valores NTSTATUS .

Uma verificação de bugs do sistema ocorre se o driver fornece um identificador de objeto inválido.

Observações

Observação

WdfDeviceAddQueryInterface não pode ser chamado para um dispositivo de controle .

Os drivers que criam interfaces definidas pelo driver normalmente chamam WdfDeviceAddQueryInterface de dentro de um EvtDriverDeviceAdd ou EvtDevicePrepareHardware função de retorno de chamada.

Depois que um driver chama WdfDeviceAddQueryInterface para criar uma interface definida pelo driver, outro driver baseado em estrutura pode acessar a interface chamando WdfFdoQueryForInterface.

Para obter mais informações sobre interfaces definidas pelo driver, consulte Using Driver-Defined Interfaces.

Exemplos

O exemplo de código a seguir é do driver de ônibus de exemplo Toaster. Este exemplo cria uma interface definida pelo driver que usa a estrutura de TOASTER_INTERFACE_STANDARD do exemplo de torradeira.

typedef struct _TOASTER_INTERFACE_STANDARD {
 INTERFACE  InterfaceHeader;
  PTOASTER_GET_CRISPINESS_LEVEL  GetCrispinessLevel;
  PTOASTER_SET_CRISPINESS_LEVEL  SetCrispinessLevel;
  PTOASTER_IS_CHILD_PROTECTED  IsSafetyLockEnabled;
} TOASTER_INTERFACE_STANDARD, *PTOASTER_INTERFACE_STANDARD;

TOASTER_INTERFACE_STANDARD  ToasterInterface;
WDF_QUERY_INTERFACE_CONFIG  qiConfig;

//
// Initialize the ToasterInterface structure.
//
RtlZeroMemory(
              &ToasterInterface,
              sizeof(ToasterInterface)
              );

ToasterInterface.InterfaceHeader.Size = sizeof(ToasterInterface);
ToasterInterface.InterfaceHeader.Version = 1;
ToasterInterface.InterfaceHeader.Context = (PVOID)hChild;

ToasterInterface.InterfaceHeader.InterfaceReference =
        WdfDeviceInterfaceReferenceNoOp;
ToasterInterface.InterfaceHeader.InterfaceDereference =
        WdfDeviceInterfaceDereferenceNoOp;

ToasterInterface.GetCrispinessLevel = Bus_GetCrispinessLevel;
ToasterInterface.SetCrispinessLevel = Bus_SetCrispinessLevel;
ToasterInterface.IsSafetyLockEnabled = Bus_IsSafetyLockEnabled;

//
// Initialize the qiConfig structure.
//
WDF_QUERY_INTERFACE_CONFIG_INIT(
                                &qiConfig,
                                (PINTERFACE)&ToasterInterface,
                                &GUID_TOASTER_INTERFACE_STANDARD,
                                NULL
                                );

//
// Create the interface.
//
status = WdfDeviceAddQueryInterface(
                                    hChild,
                                    &qiConfig
                                    );
if (!NT_SUCCESS(status)) {
    return status;
}

Requisitos

Requisito Valor
da Plataforma de Destino Universal
versão mínima do KMDF 1.0
cabeçalho wdfqueryinterface.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (consulte o Controle de Versão da Biblioteca da Estrutura.)
IRQL PASSIVE_LEVEL
regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte também

EvtDevicePrepareHardware

EvtDriverDeviceAdd

WDF_QUERY_INTERFACE_CONFIG

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface