WMI_SET_DATABLOCK_CALLBACK función de devolución de llamada (wmilib.h)
El DpWmiSetDataBlock rutina cambia todos los elementos de datos en una sola instancia de un bloque de datos. Esta rutina es opcional.
Sintaxis
WMI_SET_DATABLOCK_CALLBACK WmiSetDatablockCallback;
NTSTATUS WmiSetDatablockCallback(
[in] PDEVICE_OBJECT DeviceObject,
[in] PIRP Irp,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[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 por su índice de base cero en la lista de GUID proporcionados por el controlador en la estructura de WMILIB_CONTEXT que pasó a WmiSystemControl.
[in] InstanceIndex
Si el bloque especificado por guidIndex tiene varias instancias, InstanceIndex especifica la instancia.
[in] BufferSize
Especifica el tamaño en bytes del búfer en Búfer.
[in] Buffer
Puntero a un búfer que contiene nuevos valores para la instancia.
Valor devuelto
DpWmiSetDataBlock devuelve STATUS_SUCCESS o un estado de error adecuado, como el siguiente:
Si el controlador no puede completar la solicitud inmediatamente, puede devolver STATUS_PENDING.
Observaciones
WMI llama a la rutina de DpWmiSetDataBlock de un controlador después de que el controlador llame a WmiSystemControl en respuesta a una solicitud de IRP_MN_CHANGE_SINGLE_INSTANCE.
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 Búfer y BufferSize describir un bloque de datos de tamaño válido, incluido cualquier relleno que exista entre elementos de datos y que el contenido del búfer sea válido para el bloque de datos.
- Compruebe que el bloque 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 bloques de datos destinados a ser de solo lectura.
Si un controlador implementa una rutina de DpWmiSetDataBlock, el controlador debe colocar la dirección de la rutina en el SetWmiDataBlock miembro de la estructura de WMILIB_CONTEXT que pasa a WmiSystemControl. Si un controlador no implementa una rutina de DpWmiSetDataBlock, debe establecer SetWmiDataBlock en NULL. En este último caso, WMI devuelve STATUS_READ_ONLY al autor de la llamada.
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. |