Метод IWDFDevice::CreateRequest (wudfddi.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.]

Метод CreateRequest создает объект неформатированного запроса.

Синтаксис

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

Параметры

[in, optional] pCallbackInterface

Указатель на интерфейс IUnknown , который платформа использует для определения функций обратного вызова событий, связанных с объектом, на которые драйвер подписывается во вновь созданном объекте запроса. Этот параметр является необязательным. Драйвер может передать значение NULL , если драйвер не требует уведомления. Если драйвер передает допустимый указатель, платформа вызывает QueryInterface в интерфейсе IUnknown для интерфейса IObjectCleanup . Если платформа получает интерфейс IObjectCleanup драйвера, платформа может впоследствии вызвать метод IObjectCleanup::OnCleanup драйвера, чтобы уведомить драйвер о том, что объект запроса очищен.

[in, optional] pParentObject

Указатель на интерфейс IWDFObject для родительского объекта созданного объекта запроса ввода-вывода. Если значение РАВНО NULL, объект устройства становится родительским по умолчанию.

[out] ppRequest

Указатель на переменную, которая получает указатель на интерфейс IWDFIoRequest для нового объекта запроса.

Возвращаемое значение

CreateRequest возвращает S_OK, если операция выполнена успешно. В противном случае этот метод возвращает один из кодов ошибок, определенных в Winerror.h.

Комментарии

Прежде чем драйвер UMDF использует объект запроса, создаваемый CreateRequest , драйвер должен отформатировать объект запроса. Чтобы отформатировать объект запроса ввода-вывода, драйвер вызывает один из следующих методов:

Если драйвер вызывает CreateRequest для создания объекта запроса, он не должен вызывать IWDFIoRequest::Complete для объекта запроса. Вместо этого драйвер должен вызвать IWDFObject::D eleteWdfObject после завершения работы с объектом запроса. Дополнительные сведения см. в разделе Завершение запросов ввода-вывода.

Если в параметре pParentObject указано значение NULL, объект device становится родительским объектом по умолчанию для вновь созданного объекта запроса ввода-вывода. Если драйвер UMDF создает объект запроса ввода-вывода, который драйвер использует с определенным объектом очереди ввода-вывода или другим объектом запроса ввода-вывода, драйвер должен задать этот объект очереди или запроса в качестве родительского объекта созданного объекта запроса. При удалении родительского объекта удаляется созданный объект запроса.

Примеры

В следующем примере кода показано, как создать запрос, отформатировать запрос на чтение и отправить запрос.

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;
}

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.5
Верхняя часть wudfddi.h (включая Wudfddi.h)
DLL WUDFx.dll

См. также раздел

IWDFDevice

IWDFIoRequest

IWDFIoTarget::FormatRequestForIoctl

IWDFIoTarget::FormatRequestForRead

IWDFIoTarget::FormatRequestForWrite

IWDFObject