PcwAddInstance, fonction (wdm.h)
La PcwAddInstance
fonction ajoute le instance spécifié du compteur à la mémoire tampon du consommateur. La plupart des développeurs utilisent une fonction AddXxx générée par CTRPP au lieu d’appeler cette fonction directement. Pour plus d’informations, voir Remarques ci-dessous.
Syntaxe
NTSTATUS PcwAddInstance(
[in] PPCW_BUFFER Buffer,
[in] PCUNICODE_STRING Name,
[in] ULONG Id,
[in] ULONG Count,
[in] PPCW_DATA Data
);
Paramètres
[in] Buffer
Handle à la mémoire tampon gérée par le système à laquelle les instance du compteur seront ajoutés. Lorsque la mémoire tampon provient d’une PcwCallbackEnumerateInstances
notification, PcwAddInstance
n’enregistre que le nom et l’ID du instance. Lorsque la mémoire tampon provient d’une PcwCallbackCollectData
notification, PcwAddInstance
enregistre le nom, l’ID et les données (valeurs de compteur) du instance.
[in] Name
Pointeur vers la chaîne Unicode qui contient le nom du compteur instance. Cette valeur ne doit pas être NULL.
Les valeurs d’instance Name
DOIVENT être stables dans le temps (la même instance logique doit utiliser la même Name
valeur pour tous les appels du rappel) et doivent être uniques. Si le compteur est inscrit en tant que instance unique, le instance Name
doit être vide (longueur 0). Si le compteur inscrit en tant que multi-instance, le instance Name
ne doit pas être vide. La correspondance de nom d’instance ne respecte pas la casse. Les valeurs ne doivent donc Name
pas différer uniquement selon la casse.
[in] Id
Valeur numérique qui spécifie l’identificateur Id
associé au compteur instance.
Les valeurs d’instance Id
DOIVENT être stables au fil du temps (la même instance doit utiliser la même Id
valeur pour tous les appels du rappel), doivent être uniques (par exemple, n’utilisez pas 0 pour toutes les instances) et doivent être inférieures à 0xFFFFFFFE (n’utilisez PCW_ANY_INSTANCE_ID
aucune instance). Dans la mesure du possible, le instance Id
doit être significatif (par exemple, un contre-ensemble de processus peut utiliser un PID comme Id
) au lieu d’arbitraire (par exemple, un numéro de séquence).
[in] Count
Nombre de descripteurs fournis dans le Data
paramètre.
[in] Data
Tableau de descripteurs pour les blocs de données du fournisseur qui contiennent les valeurs de compteur de cette instance.
Valeur retournée
PcwAddInstance
retourne l’une des valeurs suivantes :
Code de retour | Description |
---|---|
STATUS_SUCCESS |
Le instance a été correctement ajouté à la mémoire tampon. |
STATUS_INVALID_BUFFER_SIZE |
L’un des blocs de données du fournisseur est trop petit. Par exemple, supposons que lors de l’appel à PcwRegister, le fournisseur spécifie que le compteur X se trouve à un décalage de 100 du premier bloc de données de taille 4 octets. Si l’appel à PcwAddInstance spécifie que le premier bloc de données est de 50 octets, cette erreur status est retournée. |
Remarques
La PcwAddInstance
fonction doit être appelée par la routine PCW_CALLBACK définie par le fournisseur lorsque le type de notification est PcwCallbackEnumerateInstances
ou PcwCallbackCollectData
. Le Buffer
à utiliser provient du Info
paramètre de la PCW_CALLBACK
routine, par exemple Info->EnumerateInstances.Buffer
ou Info->CollectData.Buffer
.
Lorsqu’une PcwCallbackEnumerateInstances
notification est appelée, PcwAddInstance
ajoute les Name
valeurs et Id
à la mémoire tampon. En cas d’appel pour une PcwCallbackCollectData
notification, PcwAddInstance
ajoute les Name
valeurs de données de compteur , Id
et à la mémoire tampon.
Fonction Add*** générée par CTRPP
La plupart des développeurs n’ont pas besoin d’appeler PcwAddInstance
directement. Au lieu de cela, ils compilent un manifeste avec l’outil CTRPP et utilisent la fonction Add*** à partir de l’en-tête généré par CTRPP. La fonction générée se présente comme suit :
EXTERN_C __inline NTSTATUS
AddMyCounterset(
__in PPCW_BUFFER Buffer,
__in PCUNICODE_STRING Name,
__in ULONG Id,
__in_opt const MY_COUNTER_DATA *MyCounterData
)
{
PCW_DATA Data[1];
PAGED_CODE();
Data[0].Data = MyCounterData;
Data[0].Size = sizeof(MY_COUNTER_DATA);
return PcwAddInstance(Buffer,
Name,
Id,
1,
Data);
}
La fonction Add générée par CTRPP sera nommée PréfixeAddCounterset. Le préfixe est généralement vide, mais peut être présent si le -prefix
paramètre a été utilisé sur la ligne de commande CTRPP. Counterset est le nom du compteur, comme spécifié dans le manifeste. La fonction aura des paramètres de données basés sur les structures définies dans le manifeste. La fonction enveloppe les blocs de données fournis par l’utilisateur dans un tableau de PCW_DATA
structures, puis appelle PcwAddInstance
.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows 7 et versions ultérieures de Windows. |
Plateforme cible | Universal |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |