存取裝置實例屬性
在 Windows Vista 和更新版本的 Windows 中,應用程式和安裝程式可以藉由呼叫下列函式來存取屬於統一屬性模型的裝置實例屬性。
注意
Windows 的所有版本都不支援 SetupApi。 可能的話,您應該使用較低層 API,例如透過 CfgMgr32.dll取得的 API。 如需秘訣,請參閱 從 SetupApi 移植到 CfgMgr32 。
如需如何在 Windows Server 2003、Windows XP 和 Windows 2000 上存取裝置屬性的相關資訊,請參閱使用 SetupAPI 和Configuration Manager存取裝置屬性。
擷取屬性
屬性 API,例如 CM_Get_DevNode_Property 或 SetupDiGetDeviceProperty 可用來擷取為裝置實例設定的裝置屬性。 例如,以下是擷取預期為類型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);
}
設定屬性
屬性 API,例如 CM_Set_DevNode_Property 或 SetupDiSetDeviceProperty 可用來設定裝置實例的裝置屬性。 例如,以下是設定類型為 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);
}
取得可用屬性的清單
屬性 API,例如 CM_Get_DevNode_Property_Keys 或 SetupDiGetDevicePropertyKeys 可用來擷取裝置屬性索引鍵的陣列,以識別目前為裝置實例設定的裝置屬性。 這可用來判斷裝置上設定的完整屬性集。 不過,使用這些函式,特別是接著擷取這些函式指出在裝置實例上設定之所有屬性的值,應該謹慎使用,因為擷取所有屬性的清單及其值可能是昂貴的作業。