EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL funzione di callback (wdfio.h)
[Si applica a KMDF e UMDF]
La funzione di callback dell'evento EvtIoDeviceControl di un driver elabora una richiesta di controllo I/O del dispositivo specificata.
Sintassi
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;
void EvtWdfIoQueueIoDeviceControl(
[in] WDFQUEUE Queue,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
Parametri
[in] Queue
Handle per l'oggetto coda del framework associato alla richiesta di I/O.
[in] Request
Handle per un oggetto richiesta framework.
[in] OutputBufferLength
Lunghezza, in byte, del buffer di output della richiesta, se è disponibile un buffer di output.
[in] InputBufferLength
Lunghezza, in byte, del buffer di input della richiesta, se è disponibile un buffer di input.
[in] IoControlCode
Codice di controllo I/O definito dal driver o definito dal sistema (IOCTL) associato alla richiesta.
Valore restituito
nessuno
Osservazioni
Un driver registra una funzione di callback EvtIoDeviceControl quando chiama WdfIoQueueCreate. Per altre informazioni sulla chiamata a WdfIoQueueCreate, vedere Creazione di code di I/O.
Se un driver ha registrato una funzione di callback EvtIoDeviceControl per la coda di I/O di un dispositivo, la funzione di callback riceve ogni richiesta di controllo I/O (IRP_MJ_DEVICE_CONTROL) dalla coda. Per altre informazioni, vedere Gestori richieste.
La funzione di callback EvtIoDeviceControl deve elaborare ogni richiesta di I/O ricevuta in qualche modo. Per altre informazioni, vedere Elaborazione delle richieste di I/O.
I driver ricevono richieste di controllo I/O quando un'applicazione utente chiama DeviceIoControl (descritta nella documentazione di Microsoft Windows SDK) o quando un altro driver crea una richiesta chiamando WdfIoTargetSendIoctlSynchronously o WdfIoTargetFormatRequestForIoctl.
Il tipo di operazione da eseguire dipende dal valore del parametro IoControlCode . È necessario determinare il set di valori IoControlCode che le applicazioni e altri driver possono inviare al driver. Per altre informazioni sugli IOCTLs, vedere Uso dei codici di controllo I/O.
La maggior parte delle operazioni di controllo I/O del dispositivo richiede un buffer di input, un buffer di output o entrambi. Per informazioni su come il driver può accedere ai buffer di una richiesta, vedere Accesso ai buffer dei dati in Framework-Based Driver.
Le tecniche che il driver può usare per accedere ai buffer di input e output della richiesta (se esistenti) dipendono dal campo TransferType dell'IOCTL. Il valore del campo TransferType di IOCTL può essere METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT o METHOD_NEITHER. Per altre informazioni sul campo TransferType , vedere Definizione dei codici di controllo I/O.
La funzione di callback EvtIoDeviceControl può essere chiamata in IRQL <= DISPATCH_LEVEL, a meno che il membro ExecutionLevel della struttura di WDF_OBJECT_ATTRIBUTES del dispositivo o del driver sia impostato su WdfExecutionLevelPassive.
Se IRQL è PASSIVE_LEVEL, il framework chiama la funzione di callback all'interno di un'area critica.
Per altre informazioni sui livelli IRQL per i gestori delle richieste, vedere Uso della sincronizzazione automatica.
La funzione di callback EvtIoDeviceControl di un driver non deve chiamare i metodi dell'oggetto coda seguenti:
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.0 |
Versione UMDF minima | 2,0 |
Intestazione | wdfio.h (includere Wdf.h) |
IRQL | <= DISPATCH_LEVEL (vedere sezione Osservazioni) |