Поделиться через


структура PCW_REGISTRATION_INFORMATION (wdm.h)

Структура PCW_REGISTRATION_INFORMATION предоставляет сведения о поставщике и наборе счетчиков. Большинство разработчиков будут использовать созданные CTRPP функции RegisterXxx или InitRegistrationInformationXxx вместо использования этой структуры напрямую.

Синтаксис

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;

Члены

Version

Числовое значение, указывающее версию счетчиков производительности для Windows (PCW), необходимую поставщику.

При работе в Windows до версии 10.0.19645 (NTDDI_VERSION < NTDDI_VERSION_MN) Version поле должно иметь значение PCW_VERSION_1 (0x100). При выполнении в Windows 10.0.19645 и более поздних версиях (NTDDI_VERSION >= NTDDI_VERSION_MN) может быть задано значение PCW_VERSION_1 (0x100) или PCW_VERSION_2 (0x200). Если для Version поля задано нераспознанное значение, PcwRegister возвращается STATUS_INVALID_PARAMETER_2.

При использовании функций RegisterXxx или InitRegistrationInformationXxx, созданных CTRPP, Version для поля будет задано значение PCW_CURRENT_VERSION, которое эквивалентно одному из следующих значений в зависимости от значения времени компиляции NTDDI_VERSION:

Условие значение PCW_CURRENT_VERSION
NTDDI_VERSION < NTDDI_WIN10_FE PCW_VERSION_1 (0x0100)
NTDDI_VERSION >= NTDDI_WIN10_FE PCW_VERSION_2 (0x0200)

Если ваш код выполняет сборку с NTDDI_VERSION >= NTDDI_WIN10_FE помощью , но должен выполняться в более ранней версии Windows, необходимо задать, Version = PCW_VERSION_1 как описано в документации по PcwRegister.

Name

Указатель на строку, содержащую имя регистрируемого набора счетчиков. Эта строка не должна иметь значение NULL или пустое значение.

Обратите внимание, что при сравнении имен счетчиков регистр не учитывается. Если одно и то же имя набора счетчиков используется в двух регистрациях счетчиков, потребители будут собирать данные из обеих регистраций.

CounterCount

Количество дескрипторов, указанных в параметре Counters .

Counters

Массив дескрипторов для счетчиков этого набора счетчиков. Сведения из дескрипторов будут использоваться при извлечении значений счетчиков из блоков данных, предоставляемых вызовами PcwCreateInstance или PcwAddInstance.

Callback

Указатель на необязательную функцию обратного вызова PCW_CALLBACK , уведомляющую поставщика о событиях, связанных с этим набором счетчиков. Это поле может иметь значение NULL, если обратный вызов не требуется (т. е. если экземплярами набора счетчиков будет управляться с помощью PcwCreateInstance и PcwCloseInstance).

CallbackContext

Значение указателя, которое будет передаваться в определяемую PCW_CALLBACK поставщиком функцию обратного вызова при каждом вызове.

Flags

Поле Flags доступно только при .NTDDI_VERSION >= NTDDI_WIN10_MN

Поле Flags будет игнорироваться, если Version оно меньше PCW_VERSION_2.

Поле Flags обеспечивает особое поведение PcwRegister. Задайте сочетание одного или нескольких PCW_REGISTRATION_FLAGS значений:

PCW_REGISTRATION_FLAGS Значение
PcwRegistrationNone (0x0) По умолчанию (никаких особых действий не требуется).
PcwRegistrationSiloNeutral (0x1) Указывает, что эта регистрация должна быть видимой для потребителей во всех разрозненных серверах. По умолчанию регистрация видна только потребителям в серверном хранилище, который был активен при создании регистрации (т. е. регистрация, присоединенная к потоку при PcwRegister вызове).

Комментарии

Функция PcwRegister принимает Info параметр, который является указателем на эту структуру.

Функция InitRegistrationInformationXxx, созданная CTRPP

Большинству разработчиков не нужно использовать PCW_REGISTRATION_INFORMATION напрямую. Вместо этого они компилируют манифест с помощью средства CTRPP и используют функции RegisterXxx или InitRegistrationInformationXxx из заголовка, созданного CTRPP. Созданная функция Register вызывает InitRegistrationInformation, а затем вызывает PcwRegister (дополнительные сведения см. в разделе PcwRegister ). Созданная функция InitRegistrationInformation будет выглядеть следующим образом:

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;
}

Функция InitRegistrationInformation, созданная CTRPP, будет называться PrefixInitRegistrationInformationCounterset. Префикс обычно пуст, но может присутствовать, если -prefix параметр использовался в командной строке CTRPP. Counterset — это имя набора счетчиков, как указано в манифесте. Созданная функция InitRegistrationInformation инициализирует предоставленную PCW_REGISTRATION_INFORMATION структуру значениями из параметров функции и манифеста.

Функция InitRegistrationInformation, созданная CTRPP, может при необходимости проверять, соответствуют ли размеры элементов структуры размерам, объявленным в манифесте. По умолчанию CTRPP_VERIFY_COUNTER_SIZES для параметра задано значение 0, что отключит этот проверка. Чтобы включить эту проверка перед #define CTRPP_VERIFY_COUNTER_SIZES 1 включением заголовка, созданного CTRPP. Если проверка включен, несоответствие размера вызовет ошибку компиляции из-за сбоя условия C_ASSERT.

Требования

Требование Значение
Заголовок wdm.h (включая Wdm.h, Ntddk.h)

См. также раздел

структура PCW_COUNTER_DESCRIPTOR

функция обратного вызова PCW_CALLBACK

Функция PcwRegister

CTRPP