Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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_CALLBACKfonction 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
PcwCreateInstanceetPcwCloseInstancepour 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.
PcwCreateInstanceaffecte 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 |