Compartir a través de


Método IWDFDriver::CreateWdfMemory (wudfddi.h)

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los nuevos controladores UMDF deben escribirse mediante UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción a UMDF.]

El método CreateWdfMemory crea un de objeto de memoria de marco de y asigna, para el objeto de memoria, un búfer de datos del tamaño distinto de cero especificado.

Sintaxis

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

Parámetros

[in] BufferSize

Tamaño especificado distinto de cero, en bytes, de datos para el búfer de datos del objeto de memoria WDF recién creado.

[in, optional] pCallbackInterface

Puntero a la interfaz de IUnknown que usa el marco para determinar las funciones de devolución de llamada de eventos relacionadas con objetos a las que se suscribe el controlador en el objeto de memoria recién creado. Este parámetro es opcional. El controlador puede pasar NULL si el controlador no requiere notificación. La interfaz IUnknown se usa para la limpieza y eliminación de objetos. Si el controlador pasa un puntero válido, el marco llamará a QueryInterface en la interfaz de IUnknown para la interfaz IObjectCleanup. Si el marco obtiene la interfaz IObjectCleanup del controlador, el marco puede llamar posteriormente al método IObjectCleanup::OnCleanup del controlador para notificar al controlador que se limpia el objeto de memoria.

[in, optional] pParentObject

Puntero a la interfaz IWDFObject de para el objeto primario del objeto de memoria creado. Si NULL, el objeto driver se convierte en el elemento primario predeterminado.

[out] ppWdfMemory

Puntero a un búfer que recibe un puntero a la interfaz de IWDFMemory para el objeto de memoria WDF recién creado.

Valor devuelto

CreateWdfMemory devuelve S_OK si la operación se realiza correctamente. De lo contrario, este método devuelve uno de los códigos de error definidos en Winerror.h.

Observaciones

El método CreateWdfMemory asigna un búfer del tamaño que especifica el parámetro BufferSize y crea un objeto de memoria de marco que representa el búfer.

Si se especifica NULL en el parámetro pParentObject, el objeto driver se convierte en el objeto primario predeterminado para el objeto de memoria recién creado. Si un controlador UMDF crea un objeto de memoria que el controlador usa con un objeto de dispositivo específico, un objeto de solicitud u otro objeto de marco, el controlador debe establecer el objeto primario del objeto de memoria de forma adecuada. Cuando se elimina el objeto primario, se elimina el objeto de memoria y su búfer.

Un controlador UMDF también puede eliminar un objeto de memoria y su búfer llamando a IWDFObject::D eleteWdfObject.

Un controlador UMDF no puede crear un objeto de memoria con un búfer de tamaño especificado por cero. Si un controlador debe usar un búfer de tamaño especificado con cero, el controlador debe usar un NULL objeto de memoria en su lugar. Por ejemplo, si el controlador debe usar un búfer de tamaño especificado con cero en una solicitud de lectura, el controlador debe pasar NULL al parámetro pOutputMemory en una llamada al método IWDFIoTarget::FormatRequestForRead.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un objeto de memoria que pueda contener información que se lee desde un punto de conexión 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;
}

Requisitos

Requisito Valor
fin del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
de la plataforma de destino de Escritorio
versión mínima de UMDF 1.5
encabezado de wudfddi.h (incluya Wudfddi.h)
DLL de WUDFx.dll

Consulte también

IObjectCleanup

IObjectCleanup::OnCleanup

IWDFDriver

IWDFIoTarget::FormatRequestForRead

IWDFMemory

IWDFObject

IWDFObject::D eleteWdfObject