WDF_WMI_BUFFER_APPEND_STRING 函数 (wdfwmi.h)
[仅适用于 KMDF]
WDF_WMI_BUFFER_APPEND_STRING 函数以 WMI 所需的格式将指定的 Unicode 字符串复制到指定的缓冲区中。
语法
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 参数指定的 Unicode 字符串,则函数将返回STATUS_BUFFER_TOO_SMALL。
注解
WMI 要求 EvtWmiInstanceQueryInstance 回调函数返回的字符串前面有字节计数。 WDF_WMI_BUFFER_APPEND_STRING 函数计算字节计数,将其存储在目标缓冲区中,然后将字符串从UNICODE_STRING结构复制到目标缓冲区。
当WDF_WMI_BUFFER_APPEND_STRING返回时,RequiredSize 参数指向的位置包含写入缓冲区的字节总数。 若要查找字符串后面的第一个缓冲区地址,驱动程序可以将 RequiredSize 值传递给 Wdfcore.h 中定义的WDF_PTR_ADD_OFFSET宏。
示例
以下代码示例来自 串行 示例驱动程序。 此示例是一个 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) |
Library | 无 |