EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST funzione di callback (wdfqueryinterface.h)
[Si applica solo a KMDF]
La funzione di callback di un driver EvtDeviceProcessQueryInterfaceRequest esamina la richiesta di accesso a un'interfaccia definita dal driver di un altro driver, prima che il framework passi l'interfaccia al driver richiedente.
Sintassi
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtWdfDeviceProcessQueryInterfaceRequest;
NTSTATUS EvtWdfDeviceProcessQueryInterfaceRequest(
[in] WDFDEVICE Device,
[in] LPGUID InterfaceType,
[in, out] PINTERFACE ExposedInterface,
[in, out] PVOID ExposedInterfaceSpecificData
)
{...}
Parametri
[in] Device
Handle per un oggetto dispositivo framework.
[in] InterfaceType
Puntatore al GUID che identifica l'interfaccia definita dal driver.
[in, out] ExposedInterface
Puntatore a una struttura INTERFACE che descrive l'interfaccia definita dal driver e fornita dal driver che richiede l'accesso all'interfaccia.
[in, out] ExposedInterfaceSpecificData
Puntatore a informazioni aggiuntive, facoltative, definite dal driver e specifiche dell'interfaccia. I driver basati su framework specificano questo valore specificando un valore nullNULLInterfaceSpecificData valore del parametro quando si chiama WdfFdoQueryForInterface.
Valore restituito
Se l'EvtDeviceProcessQueryInterfaceRequest funzione di callback riceve un GUID supportato e, se la funzione non rileva errori, deve restituire STATUS_SUCCESS o un altro valore di stato per il quale NT_SUCCESS(stato) è uguale a TRUE. Il framework continua a passare la richiesta verso il basso dello stack per verificare se anche altri driver supportano l'interfaccia.
La EvtDeviceProcessQueryInterfaceRequest funzione di callback deve restituire STATUS_NOT_SUPPORTED se determina che, per un caso specifico, non verrà usata l'interfaccia. Il framework continua a passare la richiesta verso il basso dello stack per verificare se un altro driver supporta l'interfaccia. Per altre informazioni su questa situazione, vedere la sezione Osservazioni seguente.
Se la funzione di callback rileva un errore, deve restituire un valore di stato per il quale NT_SUCCESS(stato) è uguale a FALSE. Il framework non riesce la richiesta dell'altro driver per l'interfaccia e non passa la richiesta allo stack.
Osservazioni
I driver basati su framework registrano una funzione di callback degli eventi evtDeviceProcessQueryInterfaceRequest chiamando WdfDeviceAddQueryInterface.
Se l'interfaccia definita dal driver supporta solo la comunicazione unidirezionale e imposta il membro ImportInterface della struttura di WDF_QUERY_INTERFACE_CONFIG che descrive l'interfaccia per FALSE, l'EvtDeviceProcessQueryInterfaceRequest funzione di callback è facoltativa. Quando un altro driver chiama WdfFdoQueryForInterface, il framework copia i valori di interfaccia definiti dal driver nella struttura INTERFACE del driver richiedente e quindi chiama la funzione di callback. Per la comunicazione unidirezionale, è necessario fornire una funzione di callback solo se si vuole che il driver esamini ed eventualmente modifichi, i valori dell'interfaccia prima che il framework li restituisca al driver richiedente.
Il driver deve fornire un
La funzione di callback può modificare l'interfaccia. In particolare, può:
- Modificare qualsiasi valore in qualsiasi membro dell'interfaccia.
-
Allocare un contesto specifico dell'istanza dinamica modificando il membro context
della struttura INTERFACE di .
Per altre informazioni sulle interfacce definite dal driver, vedere Using Driver-Defined Interfaces.
Esempi
Per definire un EvtDeviceProcessQueryInterfaceRequest funzione di callback, è prima necessario fornire una dichiarazione di funzione che identifica il tipo di funzione di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione di callback consente di
Ad esempio, per definire un EvtDeviceProcessQueryInterfaceRequest funzione di callback denominata MyDeviceProcessQueryInterfaceRequest, usare il tipo di EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST come illustrato nell'esempio di codice seguente:
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST MyDeviceProcessQueryInterfaceRequest;
Implementare quindi la funzione di callback come segue:
_Use_decl_annotations_
NTSTATUS
MyDeviceProcessQueryInterfaceRequest (
WDFDEVICE Device,
LPGUID InterfaceType,
PINTERFACE ExposedInterface,
PVOID ExposedInterfaceSpecificData
)
{...}
Il tipo di funzione EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST viene definito nel file di intestazione WdfQueryInterface.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations assicura che vengano utilizzate le annotazioni applicate al tipo di funzione EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite i tipi di ruolo della funzione per i driver KMDF. Per informazioni su Use_decl_annotations, vedere l'annotazione del comportamento della funzione.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
versione minima di KMDF | 1.0 |
intestazione |
wdfqueryinterface.h (include Wdf.h) |
IRQL | PASSIVE_LEVEL |