Zugreifen auf Geräteinstanzeigenschaften

In Windows Vista und höheren Versionen von Windows können Anwendungen und Installationsprogramme auf Geräteeigenschaften instance zugreifen, die Teil des einheitlichen Eigenschaftenmodells sind, indem sie die folgenden Funktionen aufrufen.

Hinweis

SetupApi wird nicht in allen Editionen von Windows unterstützt. Wenn möglich, sollten Sie APIs der unteren Ebene verwenden, z. B. die APIs, die über CfgMgr32.dllverfügbar sind. Tipps finden Sie unter Portieren von SetupApi zu CfgMgr32 .

Informationen zum Zugreifen auf Geräteeigenschaften unter Windows Server 2003, Windows XP und Windows 2000 finden Sie unter Verwenden von SetupAPI und Configuration Manager für den Zugriff auf Geräteeigenschaften.

Abrufen von Eigenschaften

Eigenschaften-APIs wie CM_Get_DevNode_Property oder SetupDiGetDeviceProperty können verwendet werden, um eine Geräteeigenschaft abzurufen, die für ein Gerät instance festgelegt ist. Hier sehen Sie beispielsweise ein Beispiel, das eine Eigenschaft abruft, die vom Typ DEVPROP_TYPE_UINT32 erwartet wird:

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);
}

Festlegen von Eigenschaften

Eigenschaften-APIs wie CM_Set_DevNode_Property oder SetupDiSetDeviceProperty können verwendet werden, um eine Geräteeigenschaft für ein Gerät instance festzulegen. Beispiel: Festlegen einer Eigenschaft vom Typ 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);
}

Abrufen einer Liste der verfügbaren Eigenschaften

Eigenschaften-APIs wie CM_Get_DevNode_Property_Keys oder SetupDiGetDevicePropertyKeys können verwendet werden, um ein Array der Geräteeigenschaftenschlüssel abzurufen, die die Geräteeigenschaften identifizieren, die derzeit für ein Gerät instance festgelegt sind. Dies kann verwendet werden, um den vollständigen Satz von Eigenschaften zu bestimmen, die auf einem Gerät festgelegt sind. Die Verwendung dieser Funktionen sollte jedoch sparsam verwendet werden, insbesondere um anschließend den Wert aller Eigenschaften abzurufen, von denen diese Funktionen angeben, dass sie auf dem Gerät instance festgelegt sind, da der Abruf der Liste aller Eigenschaften und deren Werte ein kostspieliger Vorgang sein kann.