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 |
---|---|
|
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.
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) |