función WDF_WMI_BUFFER_APPEND_STRING (wdfwmi.h)
[Solo se aplica a KMDF]
La función WDF_WMI_BUFFER_APPEND_STRING copia una cadena Unicode especificada en un búfer especificado en el formato que requiere WMI.
Sintaxis
NTSTATUS WDF_WMI_BUFFER_APPEND_STRING(
[out] PVOID Buffer,
[in] ULONG BufferLength,
[in] PCUNICODE_STRING String,
[out] PULONG RequiredSize
);
Parámetros
[out] Buffer
Puntero a un búfer de destino que recibe la cadena.
[in] BufferLength
Longitud, en bytes, del búfer de destino que recibe la cadena.
[in] String
Puntero a una estructura UNICODE_STRING que contiene la cadena que se va a copiar.
[out] RequiredSize
Puntero a una ubicación que recibe el número de bytes necesarios para almacenar la cadena especificada en el búfer de destino.
Valor devuelto
WDF_WMI_BUFFER_APPEND_STRING devuelve STATUS_SUCCESS si la operación se realiza correctamente. Si el búfer de destino es demasiado pequeño para contener la cadena Unicode que especifica el parámetro String , la función devuelve STATUS_BUFFER_TOO_SMALL.
Comentarios
WMI requiere que las cadenas que devuelve una función de devolución de llamada EvtWmiInstanceQueryInstance van precedidas de un recuento de bytes. La función WDF_WMI_BUFFER_APPEND_STRING calcula el recuento de bytes, lo almacena en el búfer de destino y, a continuación, copia la cadena de la estructura UNICODE_STRING en el búfer de destino.
Cuando WDF_WMI_BUFFER_APPEND_STRING devuelve, la ubicación a la que apunta el parámetro RequiredSize contiene el número total de bytes escritos en el búfer. Para buscar la primera dirección del búfer que sigue a la cadena, el controlador puede pasar el valor RequiredSize a la macro WDF_PTR_ADD_OFFSET que se define en Wdfcore.h.
Ejemplos
El ejemplo de código siguiente es del controlador de ejemplo serie . Este ejemplo es una función de devolución de llamada EvtWmiInstanceQueryInstance que obtiene el nombre simbólico de un dispositivo y copia el nombre en el búfer de salida de la función de devolución de llamada.
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 | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Encabezado | wdfwmi.h (incluir Wdf.h) |
Library | None |