PcwCreateInstance, fonction (wdm.h)
La PcwCreateInstance
fonction crée un instance de compteur. La plupart des développeurs utilisent une fonction CreateXxx générée par CTRPP au lieu d’appeler cette fonction directement.
Syntaxe
NTSTATUS PcwCreateInstance(
[out] PPCW_INSTANCE *Instance,
[in] PPCW_REGISTRATION Registration,
[in] PCUNICODE_STRING Name,
[in] ULONG Count,
[in] PPCW_DATA Data
);
Paramètres
[out] Instance
Pointeur pour recevoir le instance nouvellement créé. Le instance doit être fermé à l’aide de PcwCloseInstance.
[in] Registration
Pointeur vers l’inscription de l’ensemble de compteurs qui possède ce instance. L’inscription est créée à l’aide de PcwRegister.
[in] Name
Pointeur vers la chaîne Unicode qui contient le nom du instance du compteur. 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] 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. Les blocs de données référencés par les descripteurs sont accessibles à tout moment et doivent rester valides jusqu’à ce que le instance soit fermé par PcwCloseInstance
ou PcwUnregister
.
Valeur retournée
PcwCreateInstance
retourne l’une des valeurs suivantes :
Code de retour | Description |
---|---|
STATUS_SUCCESS |
Le instance a été créé. |
STATUS_INVALID_PARAMETER_4 |
Le nombre de structures, spécifié par Count , n’est pas valide pour le fournisseur inscrit. |
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 à PcwCreateInstance spécifie que le premier bloc de données est de 50 octets, cette erreur status est retournée. |
STATUS_INTEGER_OVERFLOW |
La taille de la structure, spécifiée par Count , dépasse la mémoire tampon de données. |
Remarques
Les fournisseurs de contre-ensembles peuvent fournir des informations au consommateur par le biais de deux systèmes différents :
- Le fournisseur peut fournir une
PCW_CALLBACK
fonction qui sera appelée par la bibliothèque de compteurs de performances en fonction des besoins pour collecter des données. Pour plus d’informations sur ce système, reportez-vous à la documentation pour PCW_CALLBACK. - Le fournisseur peut utiliser
PcwCreateInstance
etPcwCloseInstance
pour gérer une liste d’instances disponibles et les données de compteur correspondantes. Ce système est simple à implémenter, mais sa flexibilité est limitée.
Avant que le fournisseur utilise cette fonction, le fournisseur doit appeler la PcwRegister
fonction pour créer une inscription.
Lorsqu’une nouvelle instance arrive (par exemple, lorsqu’un appareil est branché), le fournisseur doit allouer et initialiser un bloc de données pour le instance, appeler PcwCreateInstance
avec le nom et le bloc de données pour le instance, puis conserver les valeurs du bloc de données mises à jour avec les valeurs de compteur pour le instance. Lorsque le instance devient non valide (par exemple, lorsqu’un appareil est débranché), le fournisseur doit appelerPcwCloseInstance
, puis supprimer le bloc de données.
Le fournisseur doit conserver les blocs de données (généralement dans un pool paginé ou non paginé) contenant les valeurs de compteur actuelles pour chaque instance.
PcwCreateInstance
affecte automatiquement un ID unique pour le instance. Pour fournir des valeurs spécifiques pour l’ID instance, implémentez une PCW_CALLBACK
fonction au lieu d’utiliser PcwCreateInstance
.
Utilisez la fonction PcwCloseInstance pour fermer le instance.
Fonction CreateXxx générée par CTRPP
La plupart des développeurs n’ont pas besoin d’appeler PcwCreateInstance
directement. Au lieu de cela, ils compilent un manifeste avec l’outil CTRPP et utilisent la fonction CreateXxx à 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
CreateMyCounterset(
__deref_out PPCW_INSTANCE *Instance,
__in PCUNICODE_STRING Name,
__in const MY_COUNTER_DATA *MyCounterData
)
{
PCW_DATA Data[1];
PAGED_CODE();
Data[0].Data = MyCounterData;
Data[0].Size = sizeof(MY_COUNTER_DATA);
return PcwCreateInstance(Instance,
MyCounterset,
Name,
1,
Data);
}
La fonction Create générée par CTRPP sera nommée PréfixeCreateCounterset. 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 PcwCreateInstance
. Notez que la fonction fait référence à une variable Counterset (MyCounterset
dans l’exemple), qui est une variable globale qui contient le handle d’inscription de compteur initialisé par la fonction RegisterXxx générée par CTRPP.
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 |