функция обратного вызова WMI_SET_DATABLOCK_CALLBACK (wmilib.h)
DpWmiSetDataBlock изменяет все элементы данных в одном экземпляре блока данных. Эта подпрограмма является необязательной.
Синтаксис
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
)
{...}
Параметры
[in] DeviceObject
Указатель на структуру WDM драйвера DEVICE_OBJECT.
[in] Irp
Указатель на IRP.
[in] GuidIndex
Задает блок данных по отсчитываемой от нуля индексу в список идентификаторов GUID, предоставляемых драйвером в структуре WMILIB_CONTEXT, переданной в WmiSystemControl.
[in] InstanceIndex
Если блок, указанный GuidIndex , содержит несколько экземпляров, InstanceIndex указывает экземпляр.
[in] BufferSize
Задает размер буфера в байтах в буфере.
[in] Buffer
Указатель на буфер, содержащий новые значения для экземпляра.
Возвращаемое значение
DpWmiSetDataBlock возвращает STATUS_SUCCESS или соответствующее состояние ошибки, например следующее:
Если драйвер не может немедленно завершить запрос, он может вернуть STATUS_PENDING.
Замечания
WMI вызывает драйвера DpWmiSetDataBlock после вызова драйвера WmiSystemControl в ответ на запрос IRP_MN_CHANGE_SINGLE_INSTANCE.
Драйвер отвечает за проверку всех входных аргументов. В частности, драйвер должен выполнить следующие действия:
- Убедитесь, что значение guidIndex находится в диапазоне от нуля до GuidCount-1 на основе элемента GuidCount структуры WMILIB_CONTEXT.
- Убедитесь, что драйвер не помечает указанный блок данных для удаления. Если драйвер недавно указал флаг WMIREG_FLAG_REMOVE_GUID в структуре WMIGUIDREGINFO, содержащейся в структуре WMILIB_CONTEXT, то перед удалением можно прибыть запрос на набор.
- Убедитесь, что значение InstanceIndex находится в диапазоне индексов экземпляров, поддерживаемых драйвером блока данных.
- Убедитесь, что буферных и BufferSize описывать блок данных допустимого размера, включая любые блоки данных, имеющиеся между элементами данных, и что содержимое буфера допустимо для блока данных.
- Убедитесь, что указанный блок данных является одним из них, для которого драйвер разрешает изменения, инициированные вызывающим. Другими словами, драйвер не должен разрешать изменения блоков данных, предназначенных только для чтения.
Если драйвер реализует подпрограмму DpWmiSetDataBlock, драйвер должен поместить адрес подпрограммы в элемент SetWmiDataBlock структуры WMILIB_CONTEXT, которую он передает WmiSystemControl. Если драйвер не реализует подпрограмму DpWmiSetDataBlock, необходимо задать SetWmiDataBlock значение NULL. В последнем случае WMI возвращает STATUS_READ_ONLY вызывающей объекту.
Эта подпрограмма может быть страничной.
Дополнительные сведения о реализации этой подпрограммы см. в вызове WmiSystemControl для обработкиIRP WMI.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | wmilib.h (include Wmilib.h) |
IRQL | Звонил в PASSIVE_LEVEL. |