Compartir a través de


Método IWDFDevice::CreateIoQueue (wudfddi.h)

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.

El método CreateIoQueue configura la cola de E/S predeterminada asociada a un dispositivo o crea una cola de E/S secundaria para el dispositivo.

Sintaxis

HRESULT CreateIoQueue(
  [in, optional] IUnknown                   *pCallbackInterface,
  [in]           BOOL                       bDefaultQueue,
  [in]           WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
  [in]           BOOL                       bPowerManaged,
  [in]           BOOL                       bAllowZeroLengthRequests,
  [out]          IWDFIoQueue                **ppIoQueue
);

Parámetros

[in, optional] pCallbackInterface

Puntero a la interfaz IUnknown que usa el marco para determinar las funciones de devolución de llamada de eventos a las que se suscribe el controlador en la cola. Estas son las funciones a las que llama el marco cuando se producen los eventos pertinentes.

Para las versiones 1.9 y posteriores de UMDF, este parámetro es necesario para las colas de E/S que usan el método de envío secuencial o paralelo, y es opcional (puede ser NULL) para las colas de E/S que usan el método de distribución manual. Para las versiones de UMDF anteriores a la 1.9, este parámetro es necesario para todos los métodos de distribución.

[in] bDefaultQueue

Valor BOOL que especifica si se debe configurar la cola de E/S predeterminada o crear una cola de E/S secundaria para el dispositivo. TRUE indica que se va a configurar la cola de E/S predeterminada; FALSE indica que se va a crear una cola de E/S secundaria.

[in] DispatchType

Valor WDF_IO_QUEUE_DISPATCH_TYPE tipo que identifica cómo el controlador debe recibir solicitudes de la cola de E/S.

[in] bPowerManaged

Valor BOOL que especifica si la cola de E/S está administrada por energía. TRUE indica que el marco coordina automáticamente la distribución de la cola de E/S con Plug and Play (PnP) y el estado de alimentación del dispositivo; FALSE indica que no hay distribución coordinada automáticamente.

[in] bAllowZeroLengthRequests

Valor BOOL que especifica si el marco coloca solicitudes de E/S de longitud cero directamente en la cola de E/S para que el controlador controle. TRUE indica que el controlador debe recibir solicitudes de lectura y escritura que tienen búferes de longitud cero, es decir, el marco coloca automáticamente estos tipos de solicitud directamente en la cola de E/S para el controlador. FALSE indica que el marco completa las solicitudes de E/S de longitud cero en lugar de colocarlas en la cola de E/S.

[out] ppIoQueue

Puntero a una variable que recibe un puntero a la interfaz IWDFIoQueue del objeto de cola de E/S recién creado o del objeto de cola de E/S predeterminado.

Valor devuelto

CreateIoQueue devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK
La cola de E/S se creó correctamente.
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
La cola de E/S se configura de una de las siguientes maneras:
  • El parámetro DispatchType especifica una cola nomanual y ninguna de las interfaces de devolución de llamada de cola de E/S especificadas en la sección Comentarios se admiten mediante el parámetro pCallbackInterface .
  • El parámetro DispatchType especifica una cola manual y una o varias de las interfaces de devolución de llamada de cola de E/S especificadas en la sección Comentarios se admiten mediante el parámetro pCallbackInterface .
Para obtener más información sobre estas configuraciones, vea la sección Comentarios.
 

CreateIoQueue también podría devolver otros valores HRESULT.

Comentarios

La interfaz IUnknown que el controlador proporciona para el parámetro pCallbackInterface puede admitir varias funciones de devolución de llamada de cola. El marco llama al método QueryInterface en la interfaz IUnknown proporcionada varias veces para recuperar los métodos de interfaz que admite el controlador. Cuando las aplicaciones realizan acciones relacionadas con los métodos de las interfaces admitidas (por ejemplo, una solicitud de lectura de E/S), el marco llama a los métodos (por ejemplo, el método IQueueCallbackRead::OnRead ) para notificar al controlador. El marco llama a QueryInterface para las interfaces siguientes:

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead

IQueueCallbackWrite

Cuando el controlador pasa WdfIoQueueDispatchSequential o WdfIoQueueDispatchParallel para el parámetro DispatchType de CreateIoQueue para crear una cola nomanual, CreateIoQueue solo puede devolver S_OK si el objeto de devolución de llamada de cola del controlador implementa al menos una de las interfaces anteriores e indica la compatibilidad de dichas interfaces a través de la interfaz IUnknown a la que apunta pCallbackInterface .

Cuando el controlador pasa WdfIoQueueDispatchManual para DispatchType para crear una cola manual, CreateIoQueue solo puede devolver S_OK si el objeto de devolución de llamada de cola del controlador no implementa ni indica compatibilidad con ninguna de las interfaces de devolución de llamada anteriores. Para obtener más información sobre los objetos de devolución de llamada del controlador, vea Crear objetos de devolución de llamada.

Nota El controlador no puede usar el mismo objeto de devolución de llamada para una cola manual que el controlador usa para una cola secuencial o paralela. Es decir, si el controlador pasa un puntero determinado a una interfaz IUnknown en una llamada a CreateIoQueue para crear una cola manual, el controlador no puede pasar posteriormente el puntero idéntico a IUnknown en una llamada a CreateIoQueue para crear una cola secuencial o paralela.
 
Para obtener más información sobre cómo configurar el modo de distribución, consulte Configuración del modo de distribución para una cola de E/S.

El marco también llama a QueryInterface en la interfaz IUnknown proporcionada para determinar si el controlador admite cualquiera de las interfaces siguientes:

IObjectCleanup

IQueueCallbackIoResume

IQueueCallbackIoStop

El marco también llama a QueryInterface en la interfaz IUnknown proporcionada para determinar si el controlador admite la interfaz IQueueCallbackStateChange . Opcionalmente, el objeto de devolución de llamada de cola del controlador puede implementar e indicar la compatibilidad con IQueueCallbackStateChange solo para una cola manual. El objeto de devolución de llamada de cola del controlador no debe implementar e indicar la compatibilidad de IQueueCallbackStateChange para una cola secuencial o paralela.

Ejemplos

Para obtener un ejemplo de código de cómo usar el método CreateIoQueue , vea IWDFDriver::CreateDevice.

Requisitos

Requisito Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1.5
Encabezado wudfddi.h (incluya Wudfddi.h)
Archivo DLL WUDFx.dll

Consulte también

IObjectCleanup

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE