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。 如果驱动程序传递有效的指针,则框架将在 IUnknown 接口上为 IObjectCleanup 接口调用 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