Condividi tramite


funzione WDF_WMI_BUFFER_APPEND_STRING (wdfwmi.h)

[Si applica solo a KMDF]

La funzione WDF_WMI_BUFFER_APPEND_STRING copia una stringa Unicode specificata in un buffer specificato nel formato richiesto da WMI.

Sintassi

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

Parametri

[out] Buffer

Puntatore a un buffer di destinazione che riceve la stringa.

[in] BufferLength

Lunghezza, in byte, del buffer di destinazione che riceve la stringa.

[in] String

Puntatore a una struttura UNICODE_STRING che contiene la stringa da copiare.

[out] RequiredSize

Puntatore a una posizione che riceve il numero di byte necessari per archiviare la stringa specificata nel buffer di destinazione.

Valore restituito

WDF_WMI_BUFFER_APPEND_STRING restituisce STATUS_SUCCESS se l'operazione ha esito positivo. Se il buffer di destinazione è troppo piccolo per contenere la stringa Unicode specificata dal parametro string, la funzione restituisce STATUS_BUFFER_TOO_SMALL.

Osservazioni

WMI richiede che le stringhe restituite da un EvtWmiInstanceQueryInstance funzione di callback siano precedute da un conteggio di byte. La funzione WDF_WMI_BUFFER_APPEND_STRING calcola il numero di byte, la archivia nel buffer di destinazione e quindi copia la stringa dalla struttura UNICODE_STRING nel buffer di destinazione.

Quando WDF_WMI_BUFFER_APPEND_STRING restituisce, il percorso a cui punta il parametro RequiredSize contiene il numero totale di byte scritti nel buffer. Per trovare il primo indirizzo del buffer che segue la stringa, il driver può passare il valore RequiredSize alla macro WDF_PTR_ADD_OFFSET definita in Wdfcore.h.

Esempi

L'esempio di codice seguente proviene dal driver di esempio seriale. Questo esempio è un EvtWmiInstanceQueryInstance funzione di callback che ottiene il nome simbolico di un dispositivo e copia il nome nel buffer di output della funzione di callback.

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

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
versione minima di KMDF 1.0
intestazione wdfwmi.h (include Wdf.h)
libreria Nessuno

Vedere anche

EvtWmiInstanceQueryInstance

UNICODE_STRING