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:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

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)

Vedi anche

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously