Udostępnij przez


Dostęp do właściwości instancji urządzenia

W systemie Windows Vista i nowszych wersjach systemu Windows aplikacje i instalatory mogą uzyskiwać dostęp do właściwości wystąpienia urządzenia , które są częścią ujednoliconego modelu właściwości , wywołując następujące funkcje.

Uwaga

InstalatorApi nie jest obsługiwany we wszystkich wersjach systemu Windows. Jeśli to możliwe, należy użyć interfejsów API niższej warstwy, takich jak te dostępne za pośrednictwem CfgMgr32.dll. Aby uzyskać porady, zobacz Przenoszenie z setupApi do CfgMgr32 .

Aby uzyskać informacje o sposobie uzyskiwania dostępu do właściwości urządzenia w systemach Windows Server 2003, Windows XP i Windows 2000, zobacz Using SetupAPI and Configuration Manager to Access Device Properties (Używanie interfejsu SetupAPI i programu Configuration Manager do uzyskiwania dostępu do właściwości urządzenia).

Pobieranie właściwości

Interfejsy API właściwości, takie jak CM_Get_DevNode_Property lub SetupDiGetDeviceProperty, mogą służyć do pobierania właściwości urządzenia ustawionej dla instancji urządzenia. Na przykład poniżej przedstawiono przykład pobierania właściwości, która ma być typu 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);
}

Ustawianie właściwości

Interfejsy API dotyczące właściwości, takie jak CM_Set_DevNode_Property lub SetupDiSetDeviceProperty, mogą być używane do ustawiania właściwości urządzenia dla wystąpienia urządzenia. Oto przykład ustawiający właściwość typu 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);
}

Pobieranie listy dostępnych właściwości

API właściwości, takie jak CM_Get_DevNode_Property_Keys lub SetupDiGetDevicePropertyKeys, mogą służyć do pobierania tablicy kluczy, które identyfikują właściwości aktualnie ustawione dla wystąpienia urządzenia. Może to służyć do określania pełnego zestawu właściwości ustawionych na urządzeniu. Jednak użycie tych funkcji, zwłaszcza w celu późniejszego pobrania wartości wszystkich właściwości określonych jako ustawione na wystąpieniu urządzenia, powinno być ograniczone do minimum, ponieważ pobieranie listy wszystkich właściwości i ich wartości może być kosztowną operacją.