Funzione PcwAddInstance (wdm.h)
La PcwAddInstance
funzione aggiunge l'istanza specificata del contatore al buffer consumer. La maggior parte degli sviluppatori userà una funzione AddXxx generata da CTRPP anziché chiamare direttamente questa funzione. Per altre informazioni, vedere Osservazioni riportate di seguito.
Sintassi
NTSTATUS PcwAddInstance(
[in] PPCW_BUFFER Buffer,
[in] PCUNICODE_STRING Name,
[in] ULONG Id,
[in] ULONG Count,
[in] PPCW_DATA Data
);
Parametri
[in] Buffer
Handle per il buffer gestito dal sistema a cui verrà aggiunta l'istanza del contatore. Quando il buffer proviene da una PcwCallbackEnumerateInstances
notifica, PcwAddInstance
registra solo il nome e l'ID dell'istanza. Quando il buffer proviene da una PcwCallbackCollectData
notifica, PcwAddInstance
registra il nome, l'ID e i dati (valori contatori) dell'istanza.
[in] Name
Puntatore alla stringa Unicode contenente il nome dell'istanza del contatore. Non deve essere NULL.
I valori di istanza Name
DEVONO essere stabili nel tempo (la stessa istanza logica deve usare lo stesso Name
valore per tutte le chiamate del callback) e DEVE essere univoco. Se il contatore viene registrato come istanza singola, l'istanza Name
deve essere vuota (0-length). Se il contatore registrato come istanza multipla, l'istanza Name
non deve essere vuota. La corrispondenza dei nomi dell'istanza non è distinzione tra maiuscole e minuscole, pertanto Name
i valori non devono essere diversi solo in base al caso.
[in] Id
Valore numerico che specifica l'oggetto (identificatore) associato all'istanza Id
del contatore.
Id
I valori di istanza DEVONO essere stabili nel tempo (la stessa istanza deve usare lo stesso Id
valore per tutte le chiamate del callback), deve essere univoco (ad esempio, non usare 0 per tutte le istanze) e deve essere minore di 0xFFFFFFFE (non usare PCW_ANY_INSTANCE_ID
per alcuna istanza). Se possibile, l'istanza Id
deve essere significativa (ad esempio, un contatore processo potrebbe usare un PID come Id
) anziché arbitrario (ad esempio un numero di sequenza).
[in] Count
Numero di descrittori forniti nel Data
parametro.
[in] Data
Matrice di descrittori per i blocchi di dati del provider che contengono i valori del contatore di questa istanza.
Valore restituito
PcwAddInstance
restituisce uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
STATUS_SUCCESS |
L'istanza è stata aggiunta correttamente al buffer. |
STATUS_INVALID_BUFFER_SIZE |
Uno dei blocchi di dati del provider è troppo piccolo. Si supponga, ad esempio, che durante la chiamata a PcwRegister, il provider specifica che il contatore X è in corrispondenza dell'offset 100 del primo blocco di dati di dimensioni 4 byte. Se la chiamata a PcwAddInstance specifica che il primo blocco di dati è di 50 byte, viene restituito lo stato di errore. |
Commenti
La PcwAddInstance
funzione deve essere chiamata dalla routine definita dal provider PCW_CALLBACK quando il tipo di notifica è PcwCallbackEnumerateInstances
o PcwCallbackCollectData
. L'oggetto Buffer
Info
da usare proviene dal parametro per la PCW_CALLBACK
routine, ad esempio Info->EnumerateInstances.Buffer
o Info->CollectData.Buffer
.
Quando viene chiamato per una PcwCallbackEnumerateInstances
notifica, PcwAddInstance
aggiunge i Name
valori e Id
al buffer. Quando viene chiamato per una PcwCallbackCollectData
notifica, aggiunge i Name
valori di PcwAddInstance
dati , Id
e contatore al buffer.
Funzione Add** generata da CTRPP
La maggior parte degli sviluppatori non deve chiamare PcwAddInstance
direttamente. Verranno invece compilati un manifesto con lo strumento CTRPP e useranno la funzione Add** dall'intestazione generata da CTRPP. La funzione generata avrà un aspetto simile al seguente:
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 funzione Add generate da CTRPP verrà denominata PrefixAddCounterset. Il prefisso è in genere vuoto, ma può essere presente se il -prefix
parametro è stato usato nella riga di comando CTRPP. Il contatore è il nome del contatore, come specificato nel manifesto. La funzione avrà parametri di dati in base alle strutture definite nel manifesto. La funzione esegue il wrapping dei blocchi di dati forniti dall'utente in una matrice di PCW_DATA
strutture e quindi chiama PcwAddInstance
.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows 7 e versioni successive di Windows. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |