IWDFDriver::CreateWdfMemory 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #D6E16C3C3ECF0436EBDAB0B3B3BB58EF6 上不支援 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