fonction WDF_WMI_BUFFER_APPEND_STRING (wdfwmi.h)
[S’applique uniquement à KMDF]
La fonction WDF_WMI_BUFFER_APPEND_STRING copie une chaîne Unicode spécifiée dans une mémoire tampon spécifiée au format requis par WMI.
Syntaxe
NTSTATUS WDF_WMI_BUFFER_APPEND_STRING(
[out] PVOID Buffer,
[in] ULONG BufferLength,
[in] PCUNICODE_STRING String,
[out] PULONG RequiredSize
);
Paramètres
[out] Buffer
Pointeur vers une mémoire tampon de destination qui reçoit la chaîne.
[in] BufferLength
Longueur, en octets, de la mémoire tampon de destination qui reçoit la chaîne.
[in] String
Pointeur vers une structure UNICODE_STRING qui contient la chaîne à copier.
[out] RequiredSize
Pointeur vers un emplacement qui reçoit le nombre d’octets requis pour stocker la chaîne spécifiée dans la mémoire tampon de destination.
Valeur de retour
WDF_WMI_BUFFER_APPEND_STRING retourne STATUS_SUCCESS si l’opération réussit. Si la mémoire tampon de destination est trop petite pour contenir la chaîne Unicode spécifiée par le paramètre String, la fonction retourne STATUS_BUFFER_TOO_SMALL.
Remarques
WMI exige que les chaînes qu’une EvtWmiInstanceQueryInstance fonction de rappel retourne être précédées d’un nombre d’octets. La fonction WDF_WMI_BUFFER_APPEND_STRING calcule le nombre d’octets, le stocke dans la mémoire tampon de destination, puis copie la chaîne de la structure UNICODE_STRING dans la mémoire tampon de destination.
Lorsque WDF_WMI_BUFFER_APPEND_STRING retourne, l’emplacement où RequiredSize points de paramètre pour contenir le nombre total d’octets écrits dans la mémoire tampon. Pour rechercher la première adresse de mémoire tampon qui suit la chaîne, votre pilote peut transmettre la valeur RequiredSize à la macro WDF_PTR_ADD_OFFSET définie dans Wdfcore.h.
Exemples
L’exemple de code suivant provient de l’exemple de pilote serial. Cet exemple est une fonction de rappel EvtWmiInstanceQueryInstance qui obtient le nom symbolique d’un appareil et copie le nom dans la mémoire tampon de sortie de la fonction de rappel.
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
);
}
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.0 |
d’en-tête | wdfwmi.h (include Wdf.h) |
bibliothèque | Aucun |