Función TdhEnumerateProviderFieldInformation (tdh.h)
Recupera los metadatos de campo especificados para un proveedor determinado.
Sintaxis
TDHSTATUS TdhEnumerateProviderFieldInformation(
[in] LPGUID pGuid,
[in] EVENT_FIELD_TYPE EventFieldType,
[out, optional] PPROVIDER_FIELD_INFOARRAY pBuffer,
[in, out] ULONG *pBufferSize
);
Parámetros
[in] pGuid
GUID que identifica el proveedor cuya información desea recuperar.
[in] EventFieldType
Especifique el tipo de campo para el que desea recuperar información. Para conocer los valores posibles, consulte la enumeración EVENT_FIELD_TYPE .
[out, optional] pBuffer
Búfer asignado por el usuario para recibir la información del campo. Para obtener más información, consulte la estructura PROVIDER_FIELD_INFOARRAY .
[in, out] pBufferSize
Tamaño, en bytes, del búfer de pBuffer . Si la función se realiza correctamente, este parámetro recibe el tamaño del búfer usado. Si el búfer es demasiado pequeño, la función devuelve ERROR_INSUFFICIENT_BUFFER y establece este parámetro en el tamaño de búfer necesario. Si el tamaño del búfer es cero en la entrada, no se devuelve ningún dato en el búfer y este parámetro recibe el tamaño de búfer necesario.
Valor devuelto
Devuelve ERROR_SUCCESS si se ejecuta correctamente. De lo contrario, esta función devuelve uno de los siguientes códigos de retorno además de otros.
Código devuelto | Descripción |
---|---|
|
El tamaño del búfer de pBuffer es demasiado pequeño. Use el tamaño de búfer necesario establecido en pBufferSize para asignar un nuevo búfer. |
|
El tipo de campo solicitado no es válido. |
|
No se encontró el manifiesto o la clase MOF o no contiene información para el tipo de campo solicitado. |
|
Uno o varios de los parámetros no son válidos. |
|
El atributo resourceFileName del manifiesto contiene la ubicación del binario del proveedor. Al registrar el manifiesto, la ubicación se escribe en el Registro. TDH no pudo encontrar el binario en función de la ubicación registrada. |
Comentarios
Esta función usa el manifiesto XML o la clase MOF de WMI para recuperar la información.
Ejemplos
En el ejemplo siguiente se muestra cómo enumerar la información contenida en el manifiesto o la clase MOF para el campo solicitado.
#include <windows.h>
#include <stdio.h>
#include <wmistr.h>
#include <evntrace.h>
#include <tdh.h>
#pragma comment(lib, "tdh.lib")
DWORD EnumFieldInfo(LPGUID pProvider, EVENT_FIELD_TYPE fieldType);
// GUID of the provider whose metadata you want to enumerate.
EXTERN_C __declspec(selectany) const GUID ProviderGuid = {0xd8909c24, 0x5be9, 0x4502, {0x98, 0xca, 0xab, 0x7b, 0xdc, 0x24, 0x89, 0x9d}};
void wmain(void)
{
DWORD status = ERROR_SUCCESS;
// Retrieve the keyword information.
wprintf(L"Retrieve EventKeywordInformation\n");
status = EnumFieldInfo((LPGUID)&ProviderGuid, EventKeywordInformation);
if (ERROR_SUCCESS != status)
{
wprintf(L"Failed to retrieve EventKeywordInformation (%lu).\n\n", status);
}
}
// Prints the information associated with the specified field type.
DWORD EnumFieldInfo(LPGUID pProvider, EVENT_FIELD_TYPE fieldType)
{
DWORD status = ERROR_SUCCESS;
PROVIDER_FIELD_INFOARRAY* penum = NULL;
DWORD bufferSize = 0;
// Retrieve the required buffer size. If the status is ERROR_INSUFFICIENT_BUFFER,
// use bufferSize to allocate the buffer.
status = TdhEnumerateProviderFieldInformation(pProvider, fieldType, penum, &bufferSize);
if (ERROR_INSUFFICIENT_BUFFER == status)
{
penum = (PROVIDER_FIELD_INFOARRAY*) malloc(bufferSize);
if (penum == NULL)
{
wprintf(L"Allocation failed (size=%lu).\n", bufferSize);
status = ERROR_OUTOFMEMORY;
goto cleanup;
}
// Retrieve the information for the field type.
status = TdhEnumerateProviderFieldInformation(pProvider, fieldType, penum, &bufferSize);
}
// The first call can fail with ERROR_NOT_FOUND if none of the provider's event
// descriptions contain the requested field type information.
if (ERROR_SUCCESS == status)
{
// Loop through the list of field information and print the field's name,
// description (if it exists), and value.
for (DWORD i = 0; i < penum->NumberOfElements; i++)
{
wprintf(L"Field name: %s\nDescription: %s\nValue: %I64u\n\n",
(PWCHAR)((PBYTE)(penum) + penum->FieldInfoArray[i].NameOffset),
(penum->FieldInfoArray[i].DescriptionOffset) ?
(PWCHAR)((PBYTE)(penum) + penum->FieldInfoArray[i].DescriptionOffset): L"",
penum->FieldInfoArray[i].Value);
}
}
else
{
if (ERROR_NOT_FOUND == status)
{
wprintf(L"Requested field type not found.\n");
}
else
{
wprintf(L"TdhEnumerateProviderFieldInformation failed with %lu.\n", status);
}
goto cleanup;
}
cleanup:
if (penum)
{
free(penum);
penum = NULL;
}
return status;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | tdh.h |
Library | Tdh.lib |
Archivo DLL | Tdh.dll |