Funzione TdhEnumerateProviderFieldInformation (tdh.h)
Recupera i metadati del campo specificati per un determinato provider.
Sintassi
TDHSTATUS TdhEnumerateProviderFieldInformation(
[in] LPGUID pGuid,
[in] EVENT_FIELD_TYPE EventFieldType,
[out, optional] PPROVIDER_FIELD_INFOARRAY pBuffer,
[in, out] ULONG *pBufferSize
);
Parametri
[in] pGuid
GUID che identifica il provider di cui recuperare le informazioni.
[in] EventFieldType
Specificare il tipo di campo per cui si desidera recuperare le informazioni. Per i valori possibili, vedere l'enumerazione EVENT_FIELD_TYPE .
[out, optional] pBuffer
Buffer allocato dall'utente per ricevere le informazioni sul campo. Per informazioni dettagliate, vedere la struttura PROVIDER_FIELD_INFOARRAY .
[in, out] pBufferSize
Dimensioni, in byte, del buffer pBuffer . Se la funzione ha esito positivo, questo parametro riceve le dimensioni del buffer usato. Se il buffer è troppo piccolo, la funzione restituisce ERROR_INSUFFICIENT_BUFFER e imposta questo parametro sulle dimensioni del buffer necessarie. Se la dimensione del buffer è zero nell'input, nel buffer non vengono restituiti dati e questo parametro riceve le dimensioni del buffer necessarie.
Valore restituito
Restituisce ERROR_SUCCESS in caso di esito positivo. In caso contrario, questa funzione restituisce uno dei codici restituiti seguenti oltre ad altri.
Codice restituito | Descrizione |
---|---|
|
Le dimensioni del buffer pBuffer sono troppo piccole. Usare il set di dimensioni del buffer richiesto in pBufferSize per allocare un nuovo buffer. |
|
Il tipo di campo richiesto non è valido. |
|
Il manifesto o la classe MOF non è stata trovata o non contiene informazioni per il tipo di campo richiesto. |
|
Uno o più parametri non sono validi. |
|
L'attributo resourceFileName nel manifesto contiene il percorso del file binario del provider. Quando si registra il manifesto, il percorso viene scritto nel Registro di sistema. TDH non è riuscito a trovare il file binario in base alla posizione registrata. |
Commenti
Questa funzione usa il manifesto XML o la classe MOF WMI per recuperare le informazioni.
Esempio
Nell'esempio seguente viene illustrato come enumerare le informazioni contenute nel manifesto o nella classe MOF per il campo richiesto.
#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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | tdh.h |
Libreria | Tdh.lib |
DLL | Tdh.dll |