PCW_REGISTRATION_INFORMATION Struktur (wdm.h)
Die PCW_REGISTRATION_INFORMATION Struktur liefert Details zum Anbieter und zum Gegensatz. Die meisten Entwickler verwenden die funktionen CTRPP-generated RegisterXxx oder InitRegistrationInformationXxx anstelle dieser Struktur direkt zu verwenden.
Syntax
typedef struct _PCW_REGISTRATION_INFORMATION {
ULONG Version;
PCUNICODE_STRING Name;
ULONG CounterCount;
PPCW_COUNTER_DESCRIPTOR Counters;
PPCW_CALLBACK Callback;
PVOID CallbackContext;
PCW_REGISTRATION_FLAGS Flags;
} PCW_REGISTRATION_INFORMATION, *PPCW_REGISTRATION_INFORMATION;
Angehörige
Version
Der numerische Wert, der die Version der Leistungsindikatoren für Windows (PCW) angibt, die der Anbieter benötigt.
Unter Windows vor 10.0.19645 (NTDDI_VERSION < NTDDI_VERSION_MN
) muss das feld Version
auf PCW_VERSION_1 (0x100) festgelegt werden. Unter Windows 10.0.19645 und höher (NTDDI_VERSION >= NTDDI_VERSION_MN
) kann dies auf PCW_VERSION_1 (0x100) oder PCW_VERSION_2 (0x200) festgelegt werden. Wenn das feld Version
auf einen unbekannten Wert festgelegt ist, gibt PcwRegister
STATUS_INVALID_PARAMETER_2 zurück.
Bei Verwendung der vom CTRPP generierten RegisterXxx- oder InitRegistrationInformationXxx-Funktionen wird das Version
Feld auf PCW_CURRENT_VERSION
festgelegt, was einem der folgenden Werte entspricht, abhängig vom Kompilierungswert von NTDDI_VERSION
:
Zustand | wert PCW_CURRENT_VERSION |
---|---|
NTDDI_VERSION < NTDDI_WIN10_FE |
PCW_VERSION_1 (0x0100) |
NTDDI_VERSION >= NTDDI_WIN10_FE |
PCW_VERSION_2 (0x0200) |
Wenn Ihr Code mit NTDDI_VERSION >= NTDDI_WIN10_FE
erstellt, aber auf einer früheren Version von Windows ausgeführt werden muss, müssen Sie Version = PCW_VERSION_1
wie in der Dokumentation für PcwRegister-beschrieben festlegen.
Name
Ein Zeiger auf die Zeichenfolge, die den Namen des zu registrierenden Zählers enthält. Diese Zeichenfolge darf nicht NULL oder leer sein.
Beachten Sie, dass Vergleiche von Gegenmengennamen nicht zwischen Groß- und Kleinschreibung unterschieden werden. Wenn derselbe Gegensatzname in zwei Gegensätzeregistrierungen verwendet wird, sammeln Verbraucher Daten aus beiden Registrierungen.
CounterCount
Die Anzahl der im parameter Counters
bereitgestellten Deskriptoren.
Counters
Ein Array von Deskriptoren für die Zähler dieser Zählermenge. Die Informationen aus den Deskriptoren werden verwendet, wenn Zählerwerte aus Datenblöcken extrahiert werden, die von Aufrufen von PcwCreateInstance
oder PcwAddInstance
bereitgestellt werden.
Callback
Ein Zeiger auf die optionale PCW_CALLBACK Rückruffunktion, die den Anbieter über Ereignisse im Zusammenhang mit dieser Gegenmenge benachrichtigt. Dieses Feld kann NULL sein, wenn der Rückruf nicht erforderlich ist (d. h. wenn die Gegensatzinstanzen über PcwCreateInstance
und PcwCloseInstance
verwaltet werden).
CallbackContext
Ein Zeigerwert, der bei jedem Aufruf an die vom Anbieter definierte PCW_CALLBACK
Rückruffunktion übergeben wird.
Flags
Das feld Flags
ist nur verfügbar, wenn NTDDI_VERSION >= NTDDI_WIN10_MN
.
Das feld Flags
wird ignoriert, wenn das feld Version
kleiner als PCW_VERSION_2
ist.
Das feld Flags
ermöglicht ein spezielles Verhalten von PcwRegister
. Wird auf eine Kombination aus einem oder mehreren PCW_REGISTRATION_FLAGS
Werten festgelegt:
PCW_REGISTRATION_FLAGS | Bedeutung |
---|---|
PcwRegistrationNone (0x0) | Standard (keine speziellen Verhaltensweisen erforderlich). |
PcwRegistrationSiloNeutral (0x1) | Gibt an, dass diese Registrierung für Verbraucher in allen Serversilos sichtbar sein sollte. Standardmäßig ist eine Registrierung nur für Verbraucher im Serversilos sichtbar, die beim Erstellen der Registrierung aktiv war (d. h. die Registrierung, die an den Thread angefügt wurde, als PcwRegister aufgerufen wurde). |
Bemerkungen
Die PcwRegister--Funktion verwendet einen Info
Parameter, der ein Zeiger auf diese Struktur ist.
CTRPP-generierte InitRegistrationInformationXxx-Funktion
Die meisten Entwickler müssen PCW_REGISTRATION_INFORMATION nicht direkt verwenden. Stattdessen kompilieren sie ein Manifest mit dem CTRPP-Tool und verwenden die Funktionen RegisterXxx oder InitRegistrationInformationXxx aus dem vom CTRPP generierten Header. Die generierte Register-Funktion ruft InitRegistrationInformation auf und ruft dann PcwRegister
auf (details finden Sie unter PcwRegister-). Die generierte InitRegistrationInformation-Funktion sieht wie folgt aus:
EXTERN_C FORCEINLINE VOID
InitRegistrationInformationMyCounterset(
__in_opt PPCW_CALLBACK Callback,
__in_opt PVOID CallbackContext,
__out PCW_REGISTRATION_INFORMATION* RegInfo
)
{
static const UNICODE_STRING Name = RTL_CONSTANT_STRING(L"My Counterset Name");
static const PCW_COUNTER_DESCRIPTOR Descriptors[] = {
{ 0, 0, FIELD_OFFSET(MY_COUNTER_DATA, MyData1), RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData1)},
{ 1, 0, FIELD_OFFSET(MY_COUNTER_DATA, MyData2), RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData2)},
};
#if CTRPP_VERIFY_COUNTER_SIZES
//
// Verify that structure member size matches manifest counter size.
//
C_ASSERT(RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData1) == sizeof(ULONGLONG));
C_ASSERT(RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData2) == sizeof(ULONG));
#endif // CTRPP_VERIFY_COUNTER_SIZES
PAGED_CODE();
RtlZeroMemory(RegInfo, sizeof(*RegInfo));
RegInfo->Version = PCW_CURRENT_VERSION;
RegInfo->Name = &Name;
RegInfo->CounterCount = RTL_NUMBER_OF(Descriptors);
RegInfo->Counters = (PCW_COUNTER_DESCRIPTOR*)Descriptors;
RegInfo->Callback = Callback;
RegInfo->CallbackContext = CallbackContext;
}
Die CTRPP-generierte InitRegistrationInformation-Funktion wird PräfixInitRegistrationInformationCounterset-benannt.
Präfix- ist in der Regel leer, kann aber vorhanden sein, wenn der parameter -prefix
in der Befehlszeile CTRPP verwendet wurde.
Counterset- ist der Name des Zählers, wie im Manifest angegeben. Die generierte InitRegistrationInformation-Funktion initialisiert die bereitgestellte PCW_REGISTRATION_INFORMATION
Struktur mit Werten aus den Funktionsparametern und dem Manifest.
Die ctRPP-generierte InitRegistrationInformation-Funktion kann optional überprüfen, ob die Größen der Strukturmember den im Manifest deklarierten Größen entsprechen. Standardmäßig ist CTRPP_VERIFY_COUNTER_SIZES
auf 0 festgelegt und deaktiviert diese Überprüfung. Um diese Überprüfung zu aktivieren, #define CTRPP_VERIFY_COUNTER_SIZES 1
vor dem Einschließen des vom CTRPP generierten Headers. Wenn die Überprüfung aktiviert ist, löst ein Größenkonflikt einen Kompilierungsfehler aufgrund eines Fehlers der C_ASSERT Bedingung aus.
Anforderungen
Anforderung | Wert |
---|---|
Header- | wdm.h (include Wdm.h, Ntddk.h) |