WDF_WMI_BUFFER_APPEND_STRING-Funktion (wdfwmi.h)
[Gilt nur für KMDF]
Die WDF_WMI_BUFFER_APPEND_STRING-Funktion kopiert eine angegebene Unicode-Zeichenfolge in einen angegebenen Puffer im Format, das WMI erfordert.
Syntax
NTSTATUS WDF_WMI_BUFFER_APPEND_STRING(
[out] PVOID Buffer,
[in] ULONG BufferLength,
[in] PCUNICODE_STRING String,
[out] PULONG RequiredSize
);
Parameter
[out] Buffer
Ein Zeiger auf einen Zielpuffer, der die Zeichenfolge empfängt.
[in] BufferLength
Die Länge des Zielpuffers in Bytes, der die Zeichenfolge empfängt.
[in] String
Ein Zeiger auf eine UNICODE_STRING Struktur, die die zu kopierende Zeichenfolge enthält.
[out] RequiredSize
Ein Zeiger auf einen Speicherort, der die Anzahl der Bytes empfängt, die zum Speichern der angegebenen Zeichenfolge im Zielpuffer erforderlich sind.
Rückgabewert
WDF_WMI_BUFFER_APPEND_STRING gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Wenn der Zielpuffer zu klein ist, um die vom String-Parameter festgelegte Unicode-Zeichenfolge zu enthalten, gibt die Funktion STATUS_BUFFER_TOO_SMALL zurück.
Hinweise
WMI erfordert, dass Zeichenfolgen, die eine EvtWmiInstanceQueryInstance-Rückruffunktion zurückgibt, eine Byteanzahl vorangestellt werden. Die WDF_WMI_BUFFER_APPEND_STRING-Funktion berechnet die Byteanzahl, speichert sie im Zielpuffer und kopiert dann die Zeichenfolge aus der UNICODE_STRING-Struktur in den Zielpuffer.
Wenn WDF_WMI_BUFFER_APPEND_STRING zurückgibt, enthält der Speicherort, auf den der RequiredSize-Parameter zeigt, die Gesamtanzahl der Bytes, die in den Puffer geschrieben wurden. Um die erste Pufferadresse zu finden, die auf die Zeichenfolge folgt, kann Ihr Treiber den RequiredSize-Wert an das WDF_PTR_ADD_OFFSET Makro übergeben, das in Wdfcore.h definiert ist.
Beispiele
Das folgende Codebeispiel stammt aus dem Seriellen Beispieltreiber. Dieses Beispiel ist eine EvtWmiInstanceQueryInstance-Rückruffunktion , die den symbolischen Namen eines Geräts abruft und den Namen in den Ausgabepuffer der Rückruffunktion kopiert.
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
);
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
Kopfzeile | wdfwmi.h (einschließen von Wdf.h) |
Bibliothek | Keine |