função WDF_WMI_BUFFER_APPEND_STRING (wdfwmi.h)
[Aplica-se somente ao KMDF]
A função WDF_WMI_BUFFER_APPEND_STRING copia uma cadeia de caracteres Unicode especificada em um buffer especificado no formato exigido pelo WMI.
Sintaxe
NTSTATUS WDF_WMI_BUFFER_APPEND_STRING(
[out] PVOID Buffer,
[in] ULONG BufferLength,
[in] PCUNICODE_STRING String,
[out] PULONG RequiredSize
);
Parâmetros
[out] Buffer
Um ponteiro para um buffer de destino que recebe a cadeia de caracteres.
[in] BufferLength
O comprimento, em bytes, do buffer de destino que recebe a cadeia de caracteres.
[in] String
Um ponteiro para uma estrutura de UNICODE_STRING que contém a cadeia de caracteres a ser copiada.
[out] RequiredSize
Um ponteiro para um local que recebe o número de bytes necessários para armazenar a cadeia de caracteres especificada no buffer de destino.
Valor de retorno
WDF_WMI_BUFFER_APPEND_STRING retornará STATUS_SUCCESS se a operação for bem-sucedida. Se o buffer de destino for muito pequeno para manter a cadeia de caracteres Unicode especificada pelo parâmetro cadeia de caracteres, a função retornará STATUS_BUFFER_TOO_SMALL.
Observações
O WMI requer que as cadeias de caracteres que uma função de retorno de chamada EvtWmiInstanceQueryInstance retorne seja precedida por uma contagem de bytes. A função WDF_WMI_BUFFER_APPEND_STRING calcula a contagem de bytes, armazena-a no buffer de destino e copia a cadeia de caracteres da estrutura UNICODE_STRING para o buffer de destino.
Quando WDF_WMI_BUFFER_APPEND_STRING retorna, o local que o parâmetro RequiredSize aponta para conter o número total de bytes que foram gravados no buffer. Para localizar o primeiro endereço de buffer que segue a cadeia de caracteres, o driver pode passar o valor RequiredSize para a macro WDF_PTR_ADD_OFFSET definida em Wdfcore.h.
Exemplos
O exemplo de código a seguir é do driver de exemplo serial. Este exemplo é uma função de retorno de chamada EvtWmiInstanceQueryInstance que obtém o nome simbólico de um dispositivo e copia o nome no buffer de saída da função de retorno de chamada.
NTSTATUS
EvtWmiQueryPortName(
IN WDFWMIINSTANCE WmiInstance,
IN ULONG OutBufferSize,
IN PVOID OutBuffer,
OUT PULONG BufferUsed
)
{
WDFDEVICE device;
PSERIAL_DEVICE_EXTENSION pDevExt;
WCHAR pRegName[SYMBOLIC_NAME_LENGTH];
UNICODE_STRING string;
USHORT nameSize = sizeof(pRegName);
NTSTATUS status;
PAGED_CODE();
device = WdfWmiInstanceGetDevice(WmiInstance);
pDevExt = SerialGetDeviceExtension(device);
status = SerialReadSymName(
device,
pRegName,
&nameSize
);
if (!NT_SUCCESS(status)) {
return status;
}
RtlInitUnicodeString(
&string,
pRegName
);
return WDF_WMI_BUFFER_APPEND_STRING(
OutBuffer,
OutBufferSize,
&string,
BufferUsed
);
}
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
versão mínima do KMDF | 1.0 |
cabeçalho | wdfwmi.h (inclua Wdf.h) |
biblioteca | Nenhum |