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