EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL funzione di callback (wdfio.h)
[Si applica a KMDF e UMDF]
La funzione di callback dell'evento EvtIoInternalDeviceControl di un driver elabora una richiesta di I/O contenente un codice di controllo I/O interno del dispositivo (IOCTL).
Sintassi
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtWdfIoQueueIoInternalDeviceControl;
void EvtWdfIoQueueIoInternalDeviceControl(
[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 del 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
IOCTL definito dal driver o definito dal sistema associato alla richiesta.
Valore restituito
nessuno
Osservazioni
Un driver registra una funzione di callback EvtIoInternalDeviceControl quando chiama il metodo WdfIoQueueCreate . Per altre informazioni sulla chiamata a WdfIoQueueCreate, vedere Creazione di code di I/O.
Se un driver ha registrato una funzione di callback EvtIoInternalDeviceControl per la coda di I/O di un dispositivo, la funzione di callback riceve ogni richiesta di controllo di I/O interna (IRP_MJ_INTERNAL_DEVICE_CONTROL) dalla coda. Per altre informazioni, vedere Gestori di richieste.
La funzione di callback EvtIoInternalDeviceControl 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 di I/O interne quando un altro driver crea una richiesta chiamando WdfIoTargetSendInternalIoctlSynchronously o WdfIoTargetFormatRequestForInternalIoctl.
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 IOCTL, vedere Uso dei codici di controllo di I/O.
La maggior parte delle operazioni di controllo di I/O interne 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 di 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 di I/O.
La funzione di callback EvtIoInternalDeviceControl può essere chiamata in IRQL <= DISPATCH_LEVEL, a meno che il membro ExecutionLevel della struttura WDF_OBJECT_ATTRIBUTES del dispositivo o del driver sia impostato su WdfExecutionLevelPassive. Se il driver si trova all'inizio dello stack di driver, la funzione di callback viene chiamata in IRQL = PASSIVE_LEVEL.
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 di richieste, vedere Uso della sincronizzazione automatica.
La funzione di callback EvtIoInternalDeviceControl 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 (include Wdf.h) |
IRQL | <= DISPATCH_LEVEL (vedere la sezione Osservazioni) |