Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
[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 |
|---|---|
|
O método foi chamado no IRQL errado. |
|
Um parâmetro de entrada (possivelmente incluindo membros da estrutura WDF_QUERY_INTERFACE_CONFIG) era inválido. |
|
O tamanho da estrutura de WDF_QUERY_INTERFACE_CONFIG estava incorreto. |
|
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
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
WDF_QUERY_INTERFACE_CONFIG_INIT
WdfDeviceInterfaceDereferenceNoOp