IOCTL_EMI_GET_MEASUREMENT IOCTL (emi.h)
O código de controle IOCTL_EMI_GET_MEASUREMENT recupera a medida de energia atual e a hora em que a medida foi tomada.
Buffer de entrada
Nenhum.
Comprimento do buffer de entrada
Nenhum.
Buffer de saída
O membro AssociatedIrp.SystemBuffer especifica o endereço de um buffer alocado pelo chamador que contém os dados de medida do driver de dispositivo do provedor.
Comprimento do buffer de saída
O tamanho do buffer de saída deve ser o tamanho de EMI_MEASUREMENT_DATA_V1 ou EMI_MEASUREMENT_DATA_V2 multiplicar por número de canais, ele é especificado no membro Parameters.DeviceIoControl.OutputBufferLength .
Comentários
Para a EMI versão 1 e 2, os dados de medição de EMI relatados de cada canal devem ser acumulados e convertidos para a unidade especificada pelo canal em cada solicitação, pois a interface EMI de qualquer dispositivo deve ser compartilhada em todo o sistema, portanto, a frequência com que os contadores estão sendo amostrados e acumulados depende da frequência com que cada uma de suas solicitações de consumidor e também da implementação do driver.
Para a EMI versão 2, vários canais são expostos pelo mesmo dispositivo devem ser amostrados ao mesmo tempo em cada solicitação, portanto, o chamador deve usar o ChannelCount no EMI_METADATA_V2 para percorrer os canais, por exemplo:
status = DeviceIoControl(DeviceHandle,
IOCTL_EMI_GET_MEASUREMENT,
NULL,
NULL,
Data,
ChannelDataSize,
BytesReturned,
NULL);
EMI_CHANNEL_V2* Channel = &MetaData->Channels[0];
for (int i = 0 ; i < MetaData->ChannelCount && status ; i++) {
//
// Get energy measurement for each energy counter.
//
AbsoluteEnergy = Measurement->ChannelData[i].AbsoluteEnergy;
AbsoluteTime = Measurement->ChannelData[i].AbsoluteTime;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 10. |
Cabeçalho | emi.h (inclua Emi.h) |
Confira também
EMI_METADATA_V2
EMI_MEASUREMENT_DATA_V2
Interface de medição de energia