WMI_SET_DATABLOCK_CALLBACK função de retorno de chamada (wmilib.h)
A rotina DpWmiSetDataBlock altera todos os itens de dados em uma única instância de um bloco de dados. Essa rotina é opcional.
Sintaxe
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
Ponteiro para a estrutura de DEVICE_OBJECT WDM do driver.
[in] Irp
Ponteiro para o IRP.
[in] GuidIndex
Especifica o bloco de dados por seu índice baseado em zero na lista de GUIDs fornecidos pelo driver na estrutura de WMILIB_CONTEXT passada para WmiSystemControl.
[in] InstanceIndex
Se o bloco especificado por GuidIndex tiver várias instâncias, InstanceIndex especificar a instância.
[in] BufferSize
Especifica o tamanho em bytes do buffer em buffer.
[in] Buffer
Ponteiro para um buffer que contém novos valores para a instância.
Valor de retorno
DpWmiSetDataBlock retorna STATUS_SUCCESS ou um status de erro apropriado, como o seguinte:
Se o driver não puder concluir a solicitação imediatamente, ele poderá retornar STATUS_PENDING.
Observações
O WMI chama a rotina de DpWmiSetDataBlock do driver depois que o driver chama WmiSystemControl em resposta a uma solicitação de IRP_MN_CHANGE_SINGLE_INSTANCE.
O driver é responsável por validar todos os argumentos de entrada. Especificamente, o driver deve fazer o seguinte:
- Verifique se o guidIndex valor está entre zero e GuidCount-1, com base no GuidCount membro da estrutura WMILIB_CONTEXT.
- Verifique se o driver não sinalizou o bloco de dados especificado para remoção. Se o driver especificou 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 com suporte do driver para o bloco de dados.
- Verifique se buffer e o BufferSize descrever um bloco de dados de tamanho válido, incluindo qualquer preenchimento existente entre itens de dados e se o conteúdo do buffer é válido para o bloco de dados.
- Verifique se o bloco 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 blocos de dados que você pretendia ser somente leitura.
Se um driver implementar uma rotina DpWmiSetDataBlock, o driver deverá colocar o endereço da rotina no membro SetWmiDataBlock da estrutura WMILIB_CONTEXT que ele passa para WmiSystemControl. Se um driver não implementar um rotina de DpWmiSetDataBlock, ele deverá definir SetWmiDataBlock para NULL. No último caso, o WMI retorna STATUS_READ_ONLY ao chamador.
Essa rotina pode ser paginável.
Para obter mais informações sobre como implementar essa rotina, consulte Chamando WmiSystemControl para lidar comde IRPs WMI.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Área de trabalho |
cabeçalho | wmilib.h (inclua Wmilib.h) |
IRQL | Chamado no PASSIVE_LEVEL. |