função de retorno de chamada WMI_SET_DATAITEM_CALLBACK (wmilib.h)

A rotina DpWmiSetDataItem altera um único item de dados em uma instância de um bloco de dados. Essa rotina é opcional.

Sintaxe

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

Ponteiro para a estrutura de DEVICE_OBJECT do WDM do driver.

[in] Irp

Ponteiro para o IRP.

[in] GuidIndex

Especifica o bloco de dados fornecendo um índice baseado em zero na lista de GUIDs que o driver forneceu na estrutura de WMILIB_CONTEXT que ele passou para WmiSystemControl.

[in] InstanceIndex

Se o bloco especificado por GuidIndex tiver várias instâncias, InstanceIndex será um valor baseado em zero que especifica a instância.

[in] DataItemId

Especifica a ID do item de dados a ser definido.

[in] BufferSize

Especifica o tamanho em bytes do buffer em Buffer.

[in] Buffer

Ponteiro para um buffer que contém o novo valor do item de dados.

Retornar valor

DpWmiSetDataItem retorna STATUS_SUCCESS ou um código de erro apropriado, como o seguinte:

Comentários

A WMI chama a rotina DpWmiSetDataItem de um driver depois que o driver chama WmiSystemControl em resposta a uma solicitação de IRP_MN_CHANGE_SINGLE_ITEM .

Não implemente DpWmiSetDataItem , a menos que você tenha certeza de que um componente de modo de usuário fornecido pelo sistema requer essa funcionalidade. Se você implementar uma rotina DpWmiSetDataItem , o driver deverá colocar o endereço da rotina no membro SetWmiDataItem da estrutura WMILIB_CONTEXT que ele passa para WmiSystemControl. Se você não implementar uma rotina DpWmiSetDataItem , o driver deverá definir SetWmiDataItem como NULL. No último caso, o WMI retorna STATUS_READ_ONLY para o chamador.

O driver é responsável por validar todos os argumentos de entrada. Especificamente, o driver deve fazer o seguinte:

  • Verifique se o valor guidIndex está entre zero e GuidCount-1, com base no membro GuidCount da estrutura WMILIB_CONTEXT .
  • Verifique se o driver não sinalizou o bloco de dados especificado para remoção. Se o driver tiver especificado recentemente o sinalizador WMIREG_FLAG_REMOVE_GUID em uma estrutura WMIGUIDREGINFO contida em uma estrutura WMILIB_CONTEXT , é possível que uma solicitação definida chegue antes da remoção ocorrer.
  • Verifique se o valor InstanceIndex está dentro do intervalo de índices de instância compatíveis com o driver do bloco de dados.
  • Verifique se o valor DataItemId está dentro do intervalo de identificadores de item de dados com suporte do driver para o bloco de dados.
  • Verifique se Buffer e BufferSize descrevem um item de dados de tamanho válido e se o conteúdo do buffer é válido para o item de dados.
  • Verifique se o item de dados especificado é aquele para o qual o driver permite modificações iniciadas pelo chamador. Em outras palavras, o driver não deve permitir modificações em itens de dados que você pretendia ser somente leitura.
Não suponha que o contexto do thread seja o do aplicativo de modo de usuário iniciado — um driver de nível superior pode tê-lo alterado.

Essa rotina pode ser paginável.

Para obter mais informações sobre como implementar essa rotina, consulte Chamando WmiSystemControl para lidar com IRPs WMI.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho wmilib.h (inclua Wmilib.h)
IRQL Chamado em PASSIVE_LEVEL.

Confira também

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl