Función WdfWmiInstanceCreate (wdfwmi.h)

[Solo se aplica a KMDF]

El método WdfWmiInstanceCreate crea un objeto de instancia de WMI que representa una instancia de un proveedor de datos WMI.

Sintaxis

NTSTATUS WdfWmiInstanceCreate(
  [in]            WDFDEVICE                Device,
  [in]            PWDF_WMI_INSTANCE_CONFIG InstanceConfig,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES   InstanceAttributes,
  [out, optional] WDFWMIINSTANCE           *Instance
);

Parámetros

[in] Device

Identificador de un objeto de dispositivo de marco que representa el dispositivo para el que se está creando la instancia. El objeto de dispositivo no puede ser un objeto de dispositivo de control.

[in] InstanceConfig

Puntero a una estructura de WDF_WMI_INSTANCE_CONFIG inicializada por el autor de la llamada, que contiene información de configuración para una instancia de un proveedor de datos WMI.

[in, optional] InstanceAttributes

Puntero a una estructura de WDF_OBJECT_ATTRIBUTES asignada por el autor de la llamada que contiene atributos de objeto proporcionados por el controlador para el nuevo objeto de instancia de WMI. (El miembro ParentObject de la estructura debe ser NULL). Este parámetro es opcional y se puede WDF_NO_OBJECT_ATTRIBUTES.

[out, optional] Instance

Puntero a una ubicación que recibe un identificador para el nuevo objeto de instancia de WMI. Este parámetro es opcional y puede ser NULL.

Valor devuelto

WdfWmiInstanceCreate devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:

Código devuelto Descripción
STATUS_INVALID_PARAMETER
Se ha detectado un parámetro no válido.
STATUS_INFO_LENGTH_MISMATCH
El tamaño de la estructura WDF_WMI_INSTANCE_CONFIG a la que apunta el parámetro InstanceConfig era incorrecto.
STATUS_INSUFFICIENT_RESOURCES
No había memoria suficiente.
STATUS_INTEGER_OVERFLOW
El controlador establece el miembro UseContextForQuery de la estructura WDF_WMI_INSTANCE_CONFIG en TRUE, pero especificó un tamaño de espacio de contexto mayor que ULONG_MAX en la estructura WDF_OBJECT_ATTRIBUTES del parámetro InstanceAttributes.
 

Para obtener una lista de otros valores devueltos que podría devolver el método WdfWmiInstanceCreate , vea Errores de creación de objetos de marco.

Este método también 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 un controlador crea varias instancias de un proveedor, el controlador debe llamar a WdfWmiProviderCreate para crear un objeto de proveedor antes de llamar a WdfWmiInstanceCreate. El controlador pasa el identificador del objeto de proveedor a WdfWmiInstanceCreate colocando el identificador en una estructura de WDF_WMI_INSTANCE_CONFIG . (Si el controlador proporciona un identificador de objeto de proveedor, no se usa el parámetro Device y puede ser NULL).

Si el controlador crea una única instancia de un proveedor, no tiene que llamar a WdfWmiInstanceCreate antes de llamar a WdfWmiInstanceCreate. En este caso, WdfWmiInstanceCreate también crea un objeto de proveedor WMI. Por lo tanto, la estructura de WDF_WMI_INSTANCE_CONFIG del controlador debe incluir un puntero a una estructura de WDF_WMI_PROVIDER_CONFIG que describa el proveedor de datos WMI.

El marco indica a WMI que cree un nombre de instancia dinámico, que las aplicaciones pueden usar, desde el identificador de instancia de dispositivo del objeto de dispositivo físico (PDO) del controlador. (El marco de trabajo no admite nombres de instancia estáticos que los controladores del modelo de controlador de Windows (WDM) establecen en una estructura de IRP_MN_REGINFO o IRP_MN_REGINFO_EX ).

El objeto primario del objeto de instancia de WMI es el objeto de proveedor WMI. El controlador no puede cambiar este elemento primario y el miembro ParentObject o la estructura WDF_OBJECT_ATTRIBUTES debe ser NULL.

Una vez que el controlador llama a WdfWmiInstanceCreate, puede llamar a WdfWmiInstanceGetProvider para obtener un identificador para el objeto de proveedor primario y WdfWmiInstanceGetDevice para obtener un identificador para el dispositivo del proveedor.

Para obtener más información sobre el método WdfWmiInstanceCreate , vea Compatibilidad con WMI en controladores de Framework-Based.

Si el miembro Register de la estructura de WDF_WMI_INSTANCE_CONFIG que InstanceConfig apunta es TRUE, WdfWmiInstanceCreate registra la instancia del proveedor de forma sincrónica (es decir, antes de devolver) si se llama a este método en IRQL = PASSIVE_LEVEL y de forma asincrónica si se llama a irQL > PASSIVE_LEVEL.

Ejemplos

El ejemplo de código siguiente procede del controlador de ejemplo PCIDRV . En este ejemplo se registra un nombre de recurso MOF para un dispositivo, se inicializa una estructura de WDF_WMI_PROVIDER_CONFIG y una estructura de WDF_WMI_INSTANCE_CONFIG y se llama a WdfWmiInstanceCreate.

NTSTATUS
PciDrvWmiRegistration(
    WDFDEVICE  Device
    )
{
    WDF_WMI_PROVIDER_CONFIG  providerConfig;
    WDF_WMI_INSTANCE_CONFIG  instanceConfig;
    NTSTATUS  status;
    DECLARE_CONST_UNICODE_STRING(mofRsrcName, MOFRESOURCENAME);

    status = WdfDeviceAssignMofResourceName(
                                            Device,
                                            &mofRsrcName
                                            );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    WDF_WMI_PROVIDER_CONFIG_INIT(
                                 &providerConfig,
                                 &PCIDRV_WMI_STD_DATA_GUID
                                 );
    providerConfig.MinInstanceBufferSize = sizeof(PCIDRV_WMI_STD_DATA);

    WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG(
                                                 &instanceConfig,
                                                 &providerConfig
                                                 );
    instanceConfig.Register = TRUE;
    instanceConfig.EvtWmiInstanceQueryInstance = EvtWmiDeviceInfoQueryInstance;
    instanceConfig.EvtWmiInstanceSetInstance = EvtWmiDeviceInfoSetInstance;

    status = WdfWmiInstanceCreate(
                                  Device,
                                  &instanceConfig,
                                  WDF_NO_OBJECT_ATTRIBUTES,
                                  WDF_NO_HANDLE
                                  );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    return status;
}

Requisitos

   
Plataforma de destino Universal
Versión mínima de KMDF 1,0
Header wdfwmi.h (incluya Wdf.h)
Library Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

IRP_MN_REGINFO

WDF_OBJECT_ATTRIBUTES

WDF_WMI_INSTANCE_CONFIG

WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG

WDF_WMI_PROVIDER_CONFIG

WDF_WMI_PROVIDER_CONFIG_INIT

WdfDeviceAssignMofResourceName

WdfWmiInstanceGetDevice

WdfWmiInstanceGetProvider

WdfWmiProviderCreate