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 contenente 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.

Commenti

WMI richiede che le stringhe che una funzione di callback EvtWmiInstanceQueryInstance venga preceduta da un conteggio byte. La funzione WDF_WMI_BUFFER_APPEND_STRING calcola il conteggio dei 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.

Esempio

L'esempio di codice seguente è dal driver di esempio seriale . Questo esempio è una funzione di callback EvtWmiInstanceQueryInstance 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
                                        );
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Intestazione wdfwmi.h (include Wdf.h)
Libreria Nessuno

Vedi anche

EvtWmiInstanceQueryInstance

UNICODE_STRING