Compartir a través de


Función WdfDeviceMiniportCreate (wdfminiport.h)

[Solo se aplica a KMDF]

El método WdfDeviceMiniportCreate crea un objeto de dispositivo de marco que un controlador de miniporte puede usar.

Sintaxis

NTSTATUS WdfDeviceMiniportCreate(
  [in]           WDFDRIVER              Driver,
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           PDEVICE_OBJECT         DeviceObject,
  [in, optional] PDEVICE_OBJECT         AttachedDeviceObject,
  [in, optional] PDEVICE_OBJECT         Pdo,
  [out]          WDFDEVICE              *Device
);

Parámetros

[in] Driver

Identificador del objeto de controlador del marco de trabajo del controlador, obtenido por una llamada anterior a WdfDriverCreate.

[in, optional] Attributes

Puntero a una estructura de WDF_OBJECT_ATTRIBUTES asignada por el autor de la llamada que contiene atributos para el nuevo objeto. Este parámetro es opcional y puede ser WDF_NO_OBJECT_ATTRIBUTES.

[in] DeviceObject

Puntero a una estructura de DEVICE_OBJECT WDM que representa el objeto de dispositivo funcional (FDO) para el controlador de minipuerto.

[in, optional] AttachedDeviceObject

Puntero a una estructura de DEVICE_OBJECT WDM que representa el siguiente objeto de dispositivo inferior en la pila del dispositivo.

[in, optional] Pdo

Puntero a una estructura de DEVICE_OBJECT WDM que representa el objeto de dispositivo físico (PDO) del dispositivo.

[out] Device

Puntero a una ubicación que recibe un identificador para el nuevo objeto de dispositivo de marco.

Valor devuelto

Si el método WdfDeviceMiniportCreate no encuentra ningún error, devuelve STATUS_SUCCESS. Entre los valores devueltos adicionales se incluyen:

Código devuelto Descripción
STATUS_INSUFFICIENT_RESOURCES
No se pudo asignar un objeto de dispositivo.
 

Para obtener una lista de otros valores devueltos que WdfDeviceMiniportCreate puede devolver, vea Errores de creación de objetos de marco.

El método podría devolver otros valores NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

Si el controlador de minipuerto usa el marco, el controlador de minipuerto debe llamar a WdfDeviceMiniportCreate cuando su controlador de puerto le informa de que un dispositivo está disponible. Los controladores de minipuerto no llaman a WdfDeviceCreate.

El controlador de minipuerto puede recibir sus punteros DeviceObject, AttachedDeviceObject y PDO desde su controlador de puerto. Por ejemplo, un controlador de miniporte NDIS puede obtener estos punteros llamando a NdisMGetDeviceProperty.

Las restricciones siguientes se aplican a los objetos de dispositivo de marco que obtiene un controlador de minipuerto mediante una llamada a WdfDeviceMiniportCreate:

  • El dispositivo que representa el objeto de dispositivo debe admitir Plug and Play.
  • El objeto device no admite ninguna de las funciones de devolución de llamada de eventos del objeto de dispositivo. Por lo tanto, el controlador de puerto debe controlar todas las operaciones de administración de energía y Plug and Play (PnP).
  • El identificador de objeto de dispositivo no se puede pasar a WdfWmiProviderCreate, por lo que el controlador de puerto debe proporcionar cualquier compatibilidad necesaria con Instrumental de administración de Windows (WMI).
  • No se puede pasar el identificador de objeto de dispositivo a WdfIoQueueCreate, por lo que el marco no admite colas de E/S para controladores de miniport.
  • El identificador de objeto de dispositivo no se puede pasar a WdfInterruptCreate, por lo que el marco no admite objetos de interrupción para controladores de minipuerto.
  • El identificador de objeto de dispositivo no se puede pasar a ningún método de objeto de dispositivo de marco general, excepto WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice y WdfDeviceWdmGetPhysicalDevice.
  • El identificador de objeto de dispositivo no se puede pasar a ningún método FDO de marco , excepto WdfFdoQueryForInterface.
  • El identificador de objeto de dispositivo no se puede pasar a ningún método PDO de marco ni a WdfChildListCreate, por lo que el controlador de minipuerto no puede ser un controlador de bus.
  • El controlador debe llamar finalmente a WdfObjectDelete para eliminar el objeto de dispositivo que WdfDeviceMiniportCreate crea.
Los objetos de dispositivo de marco que WdfDeviceMiniportCreate create se pueden usar como objeto primario para cualquier objeto de marco creado posteriormente.

Para enviar solicitudes de E/S a destinos de E/S, el controlador de miniport puede pasar el identificador de objeto de dispositivo a WdfDeviceGetIoTarget, WdfIoTargetCreate o WdfUsbTargetDeviceCreateWithParameters.

El controlador de minipuerto puede pasar el identificador de objeto de dispositivo a WdfDmaEnablerCreate si el dispositivo admite operaciones DMA.

Para obtener más información sobre los controladores de minipuerto, consulte Uso de Kernel-Mode Driver Framework con controladores de minipuerto.

Ejemplos

En el ejemplo de código siguiente se llama a NdisMGetDeviceProperty para obtener punterosDeviceObject, AttachedDeviceObject y PDO ; inicializa el espacio de contexto del objeto de dispositivo y crea un objeto de dispositivo de minipuerto.

WDF_OBJECT_ATTRIBUTES  ObjectAttributes;

NdisMGetDeviceProperty(
                       MiniportAdapterHandle,
                       &Adapter->Pdo,
                       &Adapter->Fdo,
                       &Adapter->NextDeviceObject,
                       NULL,
                       NULL
                       );
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &ObjectAttributes,
                                        WDF_DEVICE_INFO
                                        );
ntStatus = WdfDeviceMiniportCreate(
                                   WdfGetDriver(),
                                   &ObjectAttributes,
                                   Adapter->Fdo,
                                   Adapter->NextDeviceObject,
                                   Adapter->Pdo,
                                   &Adapter->WdfDevice
                                   );
if (!NT_SUCCESS (ntStatus)) {
    Status = NDIS_STATUS_FAILURE;
    break;
}

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfminiport.h (incluya Wdfminiport.h)
Library Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload