IWDFDevice::CreateRequest 方法 (wudfddi.h)

[警告: UMDF 2 是最新版本的 UMDF,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

CreateRequest 方法创建未格式化的请求对象。

语法

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

参数

[in, optional] pCallbackInterface

指向 IUnknown 接口的指针,框架使用该指针来确定驱动程序在新创建的请求对象上订阅的对象相关事件回调函数。 此参数是可选的。 如果驱动程序不需要通知,驱动程序可以传递 NULL 。 如果驱动程序传递了有效的指针,框架将在 IObjectCleanup 接口的 IUnknown 接口上调用 QueryInterface。 如果框架获取驱动程序的 IObjectCleanup 接口,框架随后可以调用驱动程序的 IObjectCleanup::OnCleanup 方法,以通知驱动程序请求对象已清理。

[in, optional] pParentObject

指向所创建 I/O 请求对象的父对象的 IWDFObject 接口的指针。 如果 为 NULL,则设备对象将成为默认父对象。

[out] ppRequest

指向变量的指针,该变量接收指向新请求对象的 IWDFIoRequest 接口的指针。

返回值

如果操作成功,CreateRequest 将返回S_OK。 否则,此方法返回 Winerror.h 中定义的错误代码之一。

注解

在 UMDF 驱动程序使用 CreateRequest 创建的请求对象之前,驱动程序必须设置请求对象的格式。 若要设置 I/O 请求对象的格式,驱动程序会调用以下方法之一:

如果驱动程序调用 CreateRequest 来创建请求对象,则它不得为请求对象调用 IWDFIoRequest::Complete 。 相反,驱动程序必须在使用完请求对象后调用 IWDFObject::D eleteWdfObject 。 有关详细信息,请参阅 完成 I/O 请求

如果在 pParentObject 参数中指定 NULL,则设备对象将成为新创建的 I/O 请求对象的默认父对象。 如果 UMDF 驱动程序创建一个 I/O 请求对象,该驱动程序使用特定 I/O 队列对象或其他 I/O 请求对象,则驱动程序应将该队列或请求对象设置为所创建请求对象的父对象。 删除父对象时,将删除创建的请求对象。

示例

下面的代码示例演示如何创建请求、设置读取请求的格式以及发送请求。

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