IWDFDriver::CreateWdfMemory 方法 (wudfddi.h)

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

CreateWdfMemory 方法创建框架内存对象,并为内存对象分配指定非零大小的数据缓冲区。

语法

HRESULT CreateWdfMemory(
  [in]           SIZE_T     BufferSize,
  [in, optional] IUnknown   *pCallbackInterface,
  [in, optional] IWDFObject *pParentObject,
  [out]          IWDFMemory **ppWdfMemory
);

参数

[in] BufferSize

新创建的 WDF 内存对象的数据缓冲区的数据的非零指定大小(以字节为单位)。

[in, optional] pCallbackInterface

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

[in, optional] pParentObject

指向所创建内存对象的父对象的 IWDFObject 接口的指针。 如果 为 NULL,驱动程序对象将成为默认父对象。

[out] ppWdfMemory

指向缓冲区的指针,该缓冲区接收指向新创建的 WDF 内存对象的 IWDFMemory 接口的指针。

返回值

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

注解

CreateWdfMemory 方法分配 BufferSize 参数指定大小的缓冲区,并创建表示缓冲区的框架内存对象。

如果在 pParentObject 参数中指定 NULL,则驱动程序对象将成为新创建的内存对象的默认父对象。 如果 UMDF 驱动程序创建了驱动程序与特定设备对象、请求对象或其他框架对象一起使用的内存对象,则驱动程序应相应地设置内存对象的父对象。 删除父对象时,将删除内存对象及其缓冲区。

UMDF 驱动程序还可以通过调用 IWDFObject::D eleteWdfObject 来删除内存对象及其缓冲区。

UMDF 驱动程序无法创建具有零指定大小缓冲区的内存对象。 如果驱动程序必须使用零指定的大小缓冲区,则驱动程序应改用 NULL 内存对象。 例如,如果驱动程序必须在读取请求中使用零指定的大小缓冲区,则驱动程序必须在调用 IWDFIoTarget::FormatRequestForRead 方法时将 NULL 传递给 pOutputMemory 参数。

示例

下面的代码示例演示如何创建一个内存对象,该对象可以保存从 USB 终结点读取的信息。

HRESULT
CUmdfHidDevice::PrepareReader(
    VOID
    )
{
    CComPtr<IWDFDevice> wdfDevice;
    CComPtr<IWDFDriver> wdfDriver;
    CComPtr<IWDFIoRequest> wdfRequest;

    HRESULT hr;

    GetWdfDevice(&wdfDevice);
    wdfDevice->GetDriver(&wdfDriver);

    // Open the interrupt pipe.
    hr = m_HidInterface->RetrieveUsbPipeObject(
                         USB_HID_INTERRUPT_PIPE_INDEX,
                         &m_InterruptPipe
                         );

    // Allocate a memory object to hold information that 
    // is read from the interrupt pipe. 
    // This memory object will be reused.
    if (SUCCEEDED(hr))
    {
        hr = wdfDriver->CreateWdfMemory(m_ReadBufferSize,
                                        NULL,
                                        wdfDevice,
                                        &m_ReadMemory);
    }

    return hr;
}

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.5
标头 wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另请参阅

IObjectCleanup

IObjectCleanup::OnCleanup

IWDFDriver

IWDFIoTarget::FormatRequestForRead

IWDFMemory

IWDFObject

IWDFObject::D eleteWdfObject