Compartir a través de


WMI_SET_DATAITEM_CALLBACK función de devolución de llamada (wmilib.h)

El DpWmiSetDataItem rutina cambia un único elemento de datos en una instancia de un bloque de datos. Esta rutina es opcional.

Sintaxis

WMI_SET_DATAITEM_CALLBACK WmiSetDataitemCallback;

NTSTATUS WmiSetDataitemCallback(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP Irp,
  [in] ULONG GuidIndex,
  [in] ULONG InstanceIndex,
  [in] ULONG DataItemId,
  [in] ULONG BufferSize,
  [in] PUCHAR Buffer
)
{...}

Parámetros

[in] DeviceObject

Puntero a la estructura DEVICE_OBJECT WDM del controlador.

[in] Irp

Puntero al IRP.

[in] GuidIndex

Especifica el bloque de datos proporcionando un índice de base cero en la lista de GUID que el controlador proporcionó en la estructura de WMILIB_CONTEXT que pasó a WmiSystemControl.

[in] InstanceIndex

Si el bloque especificado por guidIndex tiene varias instancias, instanceIndex es un valor de base cero que especifica la instancia.

[in] DataItemId

Especifica el identificador del elemento de datos que se va a establecer.

[in] BufferSize

Especifica el tamaño en bytes del búfer en Búfer.

[in] Buffer

Puntero a un búfer que contiene el nuevo valor del elemento de datos.

Valor devuelto

dpWmiSetDataItem devuelve STATUS_SUCCESS o un código de error adecuado, como el siguiente:

Observaciones

WMI llama a la rutina de DpWmiSetDataItem de un controlador después de que el controlador llame a WmiSystemControl en respuesta a una solicitud de IRP_MN_CHANGE_SINGLE_ITEM.

No implemente DpWmiSetDataItem a menos que esté seguro de que un componente proporcionado por el sistema requiere esta funcionalidad. Si implementa una rutina de DpWmiSetDataItem, el controlador debe colocar la dirección de la rutina en el miembro SetWmiDataItem del WMILIB_CONTEXT estructura que pasa a WmiSystemControl. Si no implementa una rutina de DpWmiSetDataItem, el controlador debe establecer SetWmiDataItem en NULL. En este último caso, WMI devuelve STATUS_READ_ONLY al autor de la llamada.

El controlador es responsable de validar todos los argumentos de entrada. En concreto, el controlador debe hacer lo siguiente:

  • Compruebe que el valor guidIndex de está entre cero y GuidCount-1, en función del miembro guidCount de de la estructura de WMILIB_CONTEXT.
  • Compruebe que el controlador no ha marcado el bloque de datos especificado para su eliminación. Si el controlador especificó recientemente la marca WMIREG_FLAG_REMOVE_GUID en un WMIGUIDREGINFO estructura contenida en una estructura de WMILIB_CONTEXT, es posible que llegue una solicitud establecida antes de que se produzca la eliminación.
  • Compruebe que el instanceIndex valor está dentro del intervalo de índices de instancia admitidos por el controlador para el bloque de datos.
  • Compruebe que el dataItemId valor está dentro del intervalo de identificadores de elementos de datos admitidos por el controlador para el bloque de datos.
  • Compruebe que Búfer y BufferSize describir un elemento de datos de tamaño válido y que el contenido del búfer sea válido para el elemento de datos.
  • Compruebe que el elemento de datos especificado es uno para el que el controlador permite modificaciones iniciadas por el autor de la llamada. En otras palabras, el controlador no debe permitir modificaciones en los elementos de datos que pretende que sean de solo lectura.
No suponga que el contexto del subproceso es el de la aplicación en modo de usuario que inicia, es posible que un controlador de nivel superior lo haya cambiado.

Esta rutina puede ser paginable.

Para obtener más información sobre la implementación de esta rutina, vea Llamada a WmiSystemControl para controlar irps de WMI.

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de wmilib.h (include Wmilib.h)
irQL Se llama en PASSIVE_LEVEL.

Consulte también

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl de