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 do 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 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.
Retornar valor
DpWmiSetDataBlock retorna STATUS_SUCCESS ou um erro apropriado status como o seguinte:
Se o driver não puder concluir a solicitação imediatamente, ele poderá retornar STATUS_PENDING.
Comentários
O WMI chama a rotina DpWmiSetDataBlock de um 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 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 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 BufferSize descrevem 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 uma rotina DpWmiSetDataBlock , ele deverá definir SetWmiDataBlock como 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 com IRPs WMI.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wmilib.h (inclua Wmilib.h) |
IRQL | Chamado em PASSIVE_LEVEL. |