日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

SetupDiGetClassDevs函数详解

發(fā)布時(shí)間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SetupDiGetClassDevs函数详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SetupDiGetClassDevs函數(shù)
SetupDiGetClassDevs 函數(shù)返回一個(gè)包含本機(jī)上所有被請(qǐng)求的設(shè)備信息的設(shè)備信息集句柄。

語(yǔ)法

//C++: HDEVINFO SetupDiGetClassDevs(_In_opt_ const GUID *ClassGuid,_In_opt_ PCTSTR Enumerator,_In_opt_ HWND hwndParent,_In_ DWORD Flags );

參數(shù)
ClassGuid[輸入?yún)?shù),可選的]
一個(gè)指向GUID的指針,此GUID可標(biāo)識(shí)一個(gè)設(shè)備安裝類(lèi)或一個(gè)設(shè)備接口類(lèi)。這個(gè)指針是可選的,并且可以為NULL。更多關(guān)于ClassGuid賦值問(wèn)題,請(qǐng)參考備注部分。

Enumerator[輸入?yún)?shù),可選的]
一個(gè)指向以空字符結(jié)束的字符串的指針,指定了:

即插即用設(shè)備枚舉樹(shù)的ID,此ID既可以是全局唯一標(biāo)識(shí)符(GUID)也可以是符號(hào)名稱(chēng)。比如:“PCI”可以用于指定PCI的PnP值,符號(hào)名稱(chēng)則包括像“USB”,“PCMCIA”和“SCSI”這樣的Pnp值。

一個(gè)PnP設(shè)備句柄ID。當(dāng)指定了一個(gè)PnP設(shè)備句柄ID時(shí),DIGCF_DEVICEINTERFACE必須在Flag參數(shù)上被設(shè)置。

hwndParent[輸入?yún)?shù),可選的]
用于與在設(shè)備信息集中安裝設(shè)備實(shí)例相關(guān)聯(lián)的用戶(hù)界面的頂級(jí)窗口句柄。該句柄是可選的,并且可以為NULL。

Flags[輸入?yún)?shù)]
Flags是一個(gè)DWORD類(lèi)型的變量,通過(guò)此參數(shù)來(lái)過(guò)濾指定的設(shè)備信息集中的設(shè)備。此參數(shù)可以是以下標(biāo)志位中的一個(gè)或多個(gè)的按位或組合,更多有關(guān)標(biāo)志位組合的信息,請(qǐng)參考備注部分。

DIGCF_ALLCLASSES
  返回所有已安裝設(shè)備的列表或所有設(shè)備接口類(lèi)。

DIGCF_DEVICEINTERFACE
  返回支持指定設(shè)備接口類(lèi)的設(shè)備。如果Enumerators參數(shù)制定了設(shè)備的實(shí)例ID,那么必須在Flags參數(shù)中設(shè)置此標(biāo)志位。

DIGCF_DEFAULT
  對(duì)于指定的設(shè)備接口類(lèi),只返回與系統(tǒng)默認(rèn)設(shè)備接口相關(guān)聯(lián)的設(shè)備(如果已設(shè)置的話)。

DIGCF_PRESENT
  只返回當(dāng)前系統(tǒng)中存在的(已連接)設(shè)備。

DIGCF_PROFILE
  只返回當(dāng)前硬件列表中的一部分設(shè)備。

返回值
如果調(diào)用成功,SetupDiGetClassDevs將返回一個(gè)設(shè)備信息集的句柄,該句柄包含了與所提供參數(shù)所匹配的所有設(shè)備。如果調(diào)用失敗,函數(shù)返回INVALID_HANDLE_VALUE。要進(jìn)一步獲取錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError。

備注
當(dāng)調(diào)用完此函數(shù)并處理完相應(yīng)數(shù)據(jù)后,必須調(diào)用SetupDiDestroyDeviceInfoList函。

調(diào)用SetupDiGetClassDevsEx來(lái)檢索遠(yuǎn)程計(jì)算機(jī)上的設(shè)備。
如果SetupDiGetClassDevs使用完,不釋放掉的話,就會(huì)一直增長(zhǎng)句柄數(shù),內(nèi)存也大大的增加。。
解決方法:

BOOL WINAPI SetupDiDestroyDeviceInfoList(__in HDEVINFO DeviceInfoSet);

設(shè)備安裝類(lèi)控制選項(xiàng)
使用以下過(guò)濾選項(xiàng)來(lái)控制SetupDiGetClassDevs是否返回所有設(shè)備:

要返回所有設(shè)備,設(shè)置標(biāo)志位DIGCF_ALLCLASSES,并將ClassGuid設(shè)置為NULL。
如果只是返回指定設(shè)備,不要?jiǎng)覦IGCF_ALLCLASSES標(biāo)志位,而是應(yīng)該使用CLassGuid提供的Guid。
此外,還可以通過(guò)下面的組合來(lái)進(jìn)一步控制設(shè)備的過(guò)濾條件:

設(shè)置DIGCF_PRESENT標(biāo)志位來(lái)返回系統(tǒng)中當(dāng)前已連接設(shè)備。
設(shè)置DIGCF_PROFILE標(biāo)志位來(lái)返回當(dāng)前硬件列表配置文件中的設(shè)備。
要想返回一個(gè)PnP枚舉設(shè)備,使用Enumerator參數(shù),并提供其GUID或符號(hào)名稱(chēng)。如果Enumerator為NULL,SetupDiGetClassDevs返回所有PnP枚舉設(shè)備。
設(shè)備接口類(lèi)控制選項(xiàng)
使用以下過(guò)濾選項(xiàng)來(lái)控制SetupDiGetClassDevs是否返回支持任何設(shè)備接口類(lèi)的設(shè)備或僅返回支持指定設(shè)備接口類(lèi)的設(shè)備:

要返回支持任何類(lèi)接口的設(shè)備,請(qǐng)同時(shí)設(shè)置DIGCF_DEVICEINTERFACE和DIGCF_ALLCLASSES標(biāo)志位,并將ClassGuid設(shè)置為NULL。該函數(shù)將設(shè)備信息設(shè)置為表示這種設(shè)備的設(shè)備信息元素,然后向設(shè)備信息元素添加包含設(shè)備支持的所有設(shè)備接口的設(shè)備接口列表。

總結(jié)

以上是生活随笔為你收集整理的SetupDiGetClassDevs函数详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。