Compartir a través de


Método IWDFDevice::CreateRequest (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 CreateRequest crea un objeto de solicitud sin formato.

Sintaxis

HRESULT CreateRequest(
  [in, optional] IUnknown      *pCallbackInterface,
  [in, optional] IWDFObject    *pParentObject,
  [out]          IWDFIoRequest **ppRequest
);

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 relacionadas con objetos a las que se suscribe el controlador en el objeto de solicitud recién creado. Este parámetro es opcional. El controlador puede pasar NULL si el controlador no requiere notificación. Si el controlador pasa un puntero válido, el marco llamará a QueryInterface en la interfaz IUnknown para la interfaz IObjectCleanup . Si el marco obtiene la interfaz IObjectCleanup del controlador, el marco puede llamar posteriormente al método IObjectCleanup::OnCleanup del controlador para notificar al controlador que se limpia el objeto de solicitud.

[in, optional] pParentObject

Puntero a la interfaz IWDFObject del objeto primario del objeto de solicitud de E/S creado. Si es NULL, el objeto de dispositivo se convierte en el elemento primario predeterminado.

[out] ppRequest

Puntero a una variable que recibe un puntero a la interfaz IWDFIoRequest del nuevo objeto de solicitud.

Valor devuelto

CreateRequest devuelve S_OK si la operación se realiza correctamente. De lo contrario, este método devuelve uno de los códigos de error definidos en Winerror.h.

Comentarios

Antes de que un controlador UMDF use el objeto de solicitud que crea CreateRequest , el controlador debe dar formato al objeto de solicitud. Para dar formato a un objeto de solicitud de E/S, el controlador llama a uno de los métodos siguientes:

Si un controlador llama a CreateRequest para crear un objeto de solicitud, no debe llamar a IWDFIoRequest::Complete para el objeto de solicitud. En su lugar, el controlador debe llamar a IWDFObject::D eleteWdfObject cuando haya terminado de usar el objeto de solicitud. Para obtener más información, consulte Finalización de solicitudes de E/S.

Si se especifica NULL en el parámetro pParentObject , el objeto device se convierte en el objeto primario predeterminado para el objeto de solicitud de E/S recién creado. Si un controlador UMDF crea un objeto de solicitud de E/S que el controlador usa con un objeto de cola de E/S específico u otro objeto de solicitud de E/S, el controlador debe establecer esa cola o objeto de solicitud como objeto primario del objeto de solicitud creado. Cuando se elimina el objeto primario, se elimina el objeto de solicitud creado.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear una solicitud, dar formato a la solicitud de lectura y enviar la solicitud.

HRESULT
CUmdfHidDevice::SendInterruptPipeRead(
    VOID
    )
{
    CComPtr<IWDFDevice> wdfDevice;

    HRESULT hr;

    IWDFFile *pTargetFile = NULL;

    // Allocate a new WDF request to send on the interrupt pipe.
    GetWdfDevice(&wdfDevice);
    hr = wdfDevice->CreateRequest(
                                  static_cast<IObjectCleanup*>(this), 
                                  wdfDevice, 
                                  &m_InterruptReadRequest
                                  );

    if (SUCCEEDED(hr))
    {
        m_InterruptPipe->GetTargetFile(&pTargetFile);
        hr = m_InterruptPipe->FormatRequestForRead(
                                                   m_InterruptReadRequest,
                                                   pTargetFile,
                                                   m_ReadMemory,
                                                   NULL,
                                                   NULL
                                                   );
    }

    // Issue the read to the pipe.
    if (SUCCEEDED(hr))
    {
        hr = m_InterruptReadRequest->Send(m_InterruptPipe, 0, 0);
    }

    return hr;
}

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

IWDFDevice

IWDFIoRequest

IWDFIoTarget::FormatRequestForIoctl

IWDFIoTarget::FormatRequestForRead

IWDFIoTarget::FormatRequestForWrite

IWDFObject