функция WDF_WMI_BUFFER_APPEND_STRING (wdfwmi.h)

[Относится только к KMDF]

Функция WDF_WMI_BUFFER_APPEND_STRING копирует указанную строку Юникода в указанный буфер в формате, который требуется WMI.

Синтаксис

NTSTATUS WDF_WMI_BUFFER_APPEND_STRING(
  [out] PVOID            Buffer,
  [in]  ULONG            BufferLength,
  [in]  PCUNICODE_STRING String,
  [out] PULONG           RequiredSize
);

Параметры

[out] Buffer

Указатель на буфер назначения, который получает строку.

[in] BufferLength

Длина в байтах буфера назначения, получающего строку.

[in] String

Указатель на структуру UNICODE_STRING , содержащую копируемые строки.

[out] RequiredSize

Указатель на расположение, которое получает количество байтов, необходимых для хранения указанной строки в буфере назначения.

Возвращаемое значение

WDF_WMI_BUFFER_APPEND_STRING возвращает STATUS_SUCCESS, если операция выполнена успешно. Если буфер назначения слишком мал для хранения строки Юникода, указанной параметром String , функция возвращает STATUS_BUFFER_TOO_SMALL.

Комментарии

WMI требует, чтобы строки, возвращаемые функцией обратного вызова EvtWmiInstanceQueryInstance , были предшествуют числу байтов. Функция WDF_WMI_BUFFER_APPEND_STRING вычисляет число байтов, сохраняет его в буфере назначения, а затем копирует строку из структуры UNICODE_STRING в целевой буфер.

Когда WDF_WMI_BUFFER_APPEND_STRING возвращается, расположение, на которое указывает параметр RequiredSize , содержит общее количество байтов, записанных в буфер. Чтобы найти первый адрес буфера, следующий за строкой, драйвер может передать значение RequiredSize в макрос WDF_PTR_ADD_OFFSET, определенный в Wdfcore.h.

Примеры

Следующий пример кода получен из примера драйвера Serial . В этом примере показана функция обратного вызова EvtWmiInstanceQueryInstance , которая получает символьное имя устройства и копирует его в выходной буфер функции обратного вызова.

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
                                        );
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Верхняя часть wdfwmi.h (включая Wdf.h)
Библиотека None

См. также раздел

EvtWmiInstanceQueryInstance

UNICODE_STRING