Condividi tramite


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:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

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)

Vedi anche

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously