Compartir a través de


estructura PCW_REGISTRATION_INFORMATION (wdm.h)

La estructura PCW_REGISTRATION_INFORMATION proporciona detalles sobre el proveedor y el conjunto de contadores. La mayoría de los desarrolladores usarán las funciones CTRPPgeneradas por RegisterXxx o InitRegistrationInformationXxx en lugar de usar esta estructura directamente.

Sintaxis

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;

Miembros

Version

Valor numérico que especifica la versión de contadores de rendimiento para Windows (PCW) que requiere el proveedor.

Cuando se ejecuta en Windows antes de la versión 10.0.19645 (NTDDI_VERSION < NTDDI_VERSION_MN), el campo Version debe establecerse en PCW_VERSION_1 (0x100). Cuando se ejecuta en Windows 10.0.19645 y versiones posteriores (NTDDI_VERSION >= NTDDI_VERSION_MN), se puede establecer en PCW_VERSION_1 (0x100) o PCW_VERSION_2 (0x200). Si el campo Version se establece en un valor no reconocido, PcwRegister devolverá STATUS_INVALID_PARAMETER_2.

Al usar las funciones RegisterXxx o InitRegistrationInformationXxx generadas por CTRPP, el campo Version se establecerá en PCW_CURRENT_VERSION, que es equivalente a uno de los valores siguientes, en función del valor en tiempo de compilación de NTDDI_VERSION:

Condición PCW_CURRENT_VERSION valor
NTDDI_VERSION < NTDDI_WIN10_FE PCW_VERSION_1 (0x0100)
NTDDI_VERSION >= NTDDI_WIN10_FE PCW_VERSION_2 (0x0200)

Si el código se compila con NTDDI_VERSION >= NTDDI_WIN10_FE pero debe ejecutarse en una versión anterior de Windows, deberá establecer Version = PCW_VERSION_1 tal como se describe en la documentación de PcwRegister.

Name

Puntero a la cadena que contiene el nombre del conjunto de contadores que se va a registrar. Esta cadena no debe ser NULL ni en blanco.

Tenga en cuenta que las comparaciones de nombres de conjunto de contadores no distinguen mayúsculas de minúsculas. Si se usa el mismo nombre de conjunto de contadores en dos registros de conjuntos de contadores, los consumidores recopilarán datos de ambos registros.

CounterCount

Número de descriptores proporcionados en el parámetro Counters.

Counters

Matriz de descriptores para los contadores de este conjunto de contadores. La información de los descriptores se usará al extraer valores de contador de bloques de datos proporcionados por llamadas a PcwCreateInstance o PcwAddInstance.

Callback

Puntero a la función de devolución de llamada opcional PCW_CALLBACK que notifica al proveedor los eventos relacionados con este conjunto de contadores. Este campo puede ser NULL si la devolución de llamada no es necesaria (es decir, si las instancias del conjunto de contadores se administrarán a través de PcwCreateInstance y PcwCloseInstance).

CallbackContext

Valor de puntero que se pasará a la función de devolución de llamada definida por el proveedor PCW_CALLBACK cada vez que se invoca.

Flags

El campo Flags solo está disponible cuando NTDDI_VERSION >= NTDDI_WIN10_MN.

El campo Flags se omitirá si el campo de Version es menor que PCW_VERSION_2.

El campo Flags habilita un comportamiento especial de PcwRegister. Establezca en una combinación de uno o varios valores de PCW_REGISTRATION_FLAGS:

PCW_REGISTRATION_FLAGS Significado
PcwRegistrationNone (0x0) Valor predeterminado (no se requieren comportamientos especiales).
PcwRegistrationSiloNeutral (0x1) Indica que este registro debe ser visible para los consumidores en todos los silos de servidor. De forma predeterminada, un registro solo es visible para los consumidores del silo de servidor que estaba activo cuando se creó el registro (es decir, el registro que se adjuntó al subproceso cuando se llamó a PcwRegister).

Observaciones

La función PcwRegister toma un parámetro Info que es un puntero a esta estructura.

Función InitRegistrationInformationXxx generada por CTRPP

La mayoría de los desarrolladores no necesitan usar PCW_REGISTRATION_INFORMATION directamente. En su lugar, compilarán un manifiesto con la herramienta CTRPP y usarán las funciones RegisterXxx o InitRegistrationInformationXxx desde el encabezado generado por CTRPP. La función Register generada llama a InitRegistrationInformation y, a continuación, llama a PcwRegister (consulte PcwRegister para obtener más información). La función InitRegistrationInformation generada tendrá este aspecto:

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

La función InitRegistrationInformation generada por CTRPP se denominará PrefixInitRegistrationInformationCounterset. prefijo suele estar en blanco, pero puede estar presente si se usó el parámetro -prefix en la línea de comandos de CTRPP. counterset es el nombre del conjunto de contadores, tal como se especifica en el manifiesto. La función InitRegistrationInformation generada inicializará la estructura PCW_REGISTRATION_INFORMATION proporcionada con valores de los parámetros de función y el manifiesto.

La función InitRegistrationInformation generada por CTRPP puede comprobar opcionalmente que los tamaños de los miembros de la estructura coinciden con los tamaños declarados en el manifiesto. De forma predeterminada, CTRPP_VERIFY_COUNTER_SIZES está establecido en 0, deshabilitando esta comprobación. Para habilitar esta comprobación, #define CTRPP_VERIFY_COUNTER_SIZES 1 antes de incluir el encabezado generado por CTRPP. Si la comprobación está habilitada, una discrepancia de tamaño desencadenará un error de compilación debido a un error de C_ASSERT condición.

Requisitos

Requisito Valor
encabezado de wdm.h (include Wdm.h, Ntddk.h)

Consulte también

estructura dePCW_COUNTER_DESCRIPTOR

PCW_CALLBACK función de devolución de llamada

función PcwRegister

CTRPP