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

La rutina DpWmiSetDataItem 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 de 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 buffer.

[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:

Comentarios

WMI llama a la rutina 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 de modo usuario proporcionado por el sistema requiere esta funcionalidad. Si implementa una rutina DpWmiSetDataItem , el controlador debe colocar la dirección de la rutina en el miembro SetWmiDataItem de la estructura WMILIB_CONTEXT que pasa a WmiSystemControl. Si no implementa una rutina 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 está entre cero y GuidCount-1, en función del miembro GuidCount de la estructura 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 una estructura WMIGUIDREGINFO 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 valor instanceIndex está dentro del intervalo de índices de instancia admitidos por el controlador para el bloque de datos.
  • Compruebe que el valor dataItemId está dentro del intervalo de identificadores de elemento de datos admitidos por el controlador para el bloque de datos.
  • Compruebe que Buffer y BufferSize describen un elemento de datos de tamaño válido y que el contenido del búfer es 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 supongamos que el contexto del subproceso es el de la aplicación en modo de usuario iniciado, 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 Llamar a WmiSystemControl para controlar los IRP de WMI.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wmilib.h (incluya Wmilib.h)
IRQL Se llama en PASSIVE_LEVEL.

Consulte también

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl