Funzione DevGetObjectPropertiesEx (devquery.h)
Recuperare in modo sincrono un set di proprietà per un oggetto specificato facoltativamente in base ai parametri estesi specificati.
Sintassi
HRESULT DevGetObjectPropertiesEx(
[in] DEV_OBJECT_TYPE ObjectType,
[in] PCWSTR pszObjectId,
[in] ULONG QueryFlags,
[in] ULONG cRequestedProperties,
[in] const DEVPROPCOMPKEY *pRequestedProperties,
[in] ULONG cExtendedParameterCount,
[in] const DEV_QUERY_PARAMETER *pExtendedParameters,
[out] PULONG pcPropertyCount,
[out] const DEVPROPERTY **ppProperties
);
Parametri
[in] ObjectType
Valore del DEV_OBJECT_TYPE che determina il tipo di oggetto per cui recuperare le proprietà.
[in] pszObjectId
Identità dell'oggetto per cui recuperare le proprietà.
[in] QueryFlags
Combinazione di valori DEV_QUERY_FLAGS combinati tramite un'operazione OR bit per bit. Non è valido passare DevQueryFlagUpdateResults o DevQueryFlagAsyncClose a questa funzione.
[in] cRequestedProperties
Numero di strutture di DEVPROPCOMPKEY fornite in pRequestedProperties. Se si specifica DevQueryFlagAllProperties, deve essere impostato su 0.
[in] pRequestedProperties
Fornisce una matrice di strutture DEVPROPCOMPKEY che specificano le proprietà che devono essere recuperate per l'oggetto specificato.
Il campo LocaleName della struttura DEVPROPCOMPKEY viene ignorato e deve essere impostato su NULL.
Se cRequestedProperties è 0, deve essere NULL.
[in] cExtendedParameterCount
Riservato per l'utilizzo del sistema. Deve essere impostato su 0.
[in] pExtendedParameters
Riservato per l'utilizzo del sistema. Deve essere impostato su NULL.
[out] pcPropertyCount
Numero di strutture
[out] ppProperties
Puntatore che riceve la matrice appena allocata di risultati DEVPROPERTY. I chiamanti devono liberare il puntatore usando DevFreeObjectProperties.
Valore restituito
S_OK viene restituito se la funzione ha valutato correttamente i criteri di ricerca e gli oggetti corrispondenti restituiti; in caso contrario, un valore di errore appropriato.
Osservazioni
Questa funzione è un modo efficiente per recuperare in modo sincrono un set di proprietà da un oggetto in base al tipo e all'identità. La matrice di proprietà restituite deve essere liberata usando DevFreeObjectProperties. Se una proprietà richiesta non esiste, ppProperties conterrà comunque una voce per tale proprietà, ma la voce avrà un tipo di DEVPROP_TYPE_EMPTY.
Esempio
Nell'esempio seguente viene illustrata la chiamata di
void
Example1(PCWSTR DeviceInstancePath)
{
HRESULT hr = S_OK;
const DEVPROPERTY* TempProperty = NULL;
ULONG PropertyCount = 0;
const DEVPROPERTY* PropertyList = NULL;
DEVPROPCOMPKEY RequestedProperties[] =
{
{ DEVPKEY_Device_HardwareIds, DEVPROP_STORE_SYSTEM, NULL },
{ DEVPKEY_Device_CompatibleIds, DEVPROP_STORE_SYSTEM, NULL }
};
hr = DevGetObjectPropertiesEx(DevObjectTypeDevice,
DeviceInstancePath,
DevQueryFlagNone,
RTL_NUMBER_OF(RequestedProperties),
RequestedProperties,
0,
NULL,
&PropertyCount,
&PropertyList);
if (FAILED(hr))
{
wprintf(L"Failed to retrieve properties. hr = 0x%08x\n", hr);
goto exit;
}
wprintf(L"Hardware IDs:\n");
TempProperty = DevFindProperty(&DEVPKEY_Device_HardwareIds,
DEVPROP_STORE_SYSTEM,
NULL,
PropertyCount,
PropertyList);
if ((TempProperty == NULL) ||
(TempProperty->Type == DEVPROP_TYPE_EMPTY) ||
(TempProperty->Buffer == NULL))
{
wprintf(L"<none>\n");
}
else if ((TempProperty->Type != DEVPROP_TYPE_STRING_LIST) ||
(TempProperty->BufferSize < sizeof(WCHAR)))
{
wprintf(L"Device '%ws' has a corrupted Hardware IDs property.\n",
DeviceInstancePath);
}
else
{
for (PCWSTR CurrentId = (PCWSTR)TempProperty->Buffer;
*CurrentId != L'\0';
CurrentId += wcslen(CurrentId) + 1)
{
wprintf(L"%ws\n", CurrentId);
}
}
wprintf(L"\nCompatible IDs:\n");
TempProperty = DevFindProperty(&DEVPKEY_Device_CompatibleIds,
DEVPROP_STORE_SYSTEM,
NULL,
PropertyCount,
PropertyList);
if ((TempProperty == NULL) ||
(TempProperty->Type == DEVPROP_TYPE_EMPTY) ||
(TempProperty->Buffer == NULL))
{
wprintf(L"<none>\n");
}
else if ((TempProperty->Type != DEVPROP_TYPE_STRING_LIST) ||
(TempProperty->BufferSize < sizeof(WCHAR)))
{
wprintf(L"Device '%ws' has a corrupted Compatible IDs property.\n",
DeviceInstancePath);
}
else
{
for (PCWSTR CurrentId = (PCWSTR)TempProperty->Buffer;
*CurrentId != L'\0';
CurrentId += wcslen(CurrentId) + 1)
{
wprintf(L"%ws\n", CurrentId);
}
}
exit:
if (PropertyList != NULL)
{
DevFreeObjectProperties(PropertyCount, PropertyList);
}
return;
}
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 10 versione 1809 |
server minimo supportato | Windows Server 2019 |
intestazione |
devquery.h |
libreria |
Onecore.lib |
dll | Cfgmgr32.dll |