Share via


Accesso alle proprietà dell'istanza del dispositivo

In Windows Vista e versioni successive di Windows, applicazioni e programmi di installazione possono accedere alle proprietà dell'istanza del dispositivo che fanno parte del modello di proprietà unificata chiamando le funzioni seguenti.

Nota

SetupApi non è supportato in tutte le edizioni di Windows. Quando possibile, è consigliabile usare API di livello inferiore, ad esempio quelle disponibili tramite CfgMgr32.dll. Per suggerimenti, vedere Conversione da SetupApi a CfgMgr32 .

Per informazioni su come accedere alle proprietà del dispositivo in Windows Server 2003, Windows XP e Windows 2000, vedere Uso di SetupAPI e Configuration Manager per accedere alle proprietà del dispositivo.

Recupero delle proprietà

Le API delle proprietà, ad esempio CM_Get_DevNode_Property o SetupDiGetDeviceProperty , possono essere usate per recuperare una proprietà del dispositivo impostata per un'istanza del dispositivo. Ad esempio, ecco un esempio che recupera una proprietà che deve essere di tipo DEVPROP_TYPE_UINT32:

DEVPROPTYPE PropertyType = DEVPROP_TYPE_EMPTY;
ULONG PropertySize = 0;
ULONG SomeValue = 0;

PropertySize = sizeof(SomeValue);
cr = CM_Get_DevNode_Property(DevInst,
                             &DEVPKEY_CustomProperty,
                             &PropertyType,
                             (PBYTE)&SomeValue,
                             &PropertySize,
                             0);

if (cr == CR_NO_SUCH_VALUE) {
    printf("Property was not found\n");
} else if (cr != CR_SUCCESS) {
    printf("Error 0x%08x retrieving property.\n", cr);
} else if ((PropertyType != DEVPROP_TYPE_UINT32) || (PropertySize != sizeof(SomeValue))) {
    printf("Property data was not of the expected type or size\n");
} else {
    printf("Property value: 0x%08x\n", SomeValue);
}

Impostazione di proprietà

Le API delle proprietà, ad esempio CM_Set_DevNode_Property o SetupDiSetDeviceProperty , possono essere usate per impostare una proprietà del dispositivo per un'istanza di dispositivo. Ad esempio, ecco un esempio che imposta una proprietà di tipo DEVPROP_TYPE_UINT32:

ULONG SomeValue = 5;
cr = CM_Set_DevNode_Property(DevInst,
                             &DEVPKEY_CustomProperty,
                             DEVPROP_TYPE_UINT32,
                             (PBYTE)&SomeValue,
                             sizeof(SomeValue),
                             0);

if (cr != CR_SUCCESS) {
    printf("Error 0x%08x setting property.\n", cr);
}

Ottenere un elenco delle proprietà disponibili

Le API delle proprietà, ad esempio CM_Get_DevNode_Property_Keys o SetupDiGetDevicePropertyKeys , possono essere usate per recuperare una matrice delle chiavi delle proprietà del dispositivo che identificano le proprietà del dispositivo attualmente impostate per un'istanza del dispositivo. Questo può essere usato per determinare il set completo di proprietà impostate in un dispositivo. Tuttavia, l'uso di queste funzioni, in particolare per recuperare successivamente il valore di tutte le proprietà che queste funzioni indicano sono impostate nell'istanza del dispositivo, deve essere usato in modo spasimoso poiché il recupero dell'elenco di tutte le proprietà e i relativi valori può essere un'operazione costosa.