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


структура 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, поле 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) Указывает, что эта регистрация должна быть видна потребителям во всех серверных оси. По умолчанию регистрация отображается только для потребителей в сервере silo, активной при создании регистрации (т. е. регистрации, присоединенной к потоку при вызове PcwRegister).

Замечания

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

Функция InitRegistrationInformationXx, созданная 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 будет называться префиксомInitRegistrationInformationсчетчиков. префикс обычно пуст, но может присутствовать, если параметр -prefix использовался в командной строке CTRPP. набор счетчиков — это имя набора счетчиков, как указано в манифесте. Созданная функция InitRegistrationInformation инициализирует предоставленную PCW_REGISTRATION_INFORMATION структуру со значениями из параметров функции и манифеста.

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

Требования

Требование Ценность
заголовка wdm.h (include Wdm.h, Ntddk.h)

См. также

PCW_COUNTER_DESCRIPTOR структура

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

функция PcwRegister

CTRPP