SetupDiGetClassDevs函式詳解

零點零一發表於2019-02-28

SetupDiGetClassDevs函式

SetupDiGetClassDevs 函式返回一個包含本機上所有被請求的裝置資訊的裝置資訊集控制程式碼。

語法

//C++:
HDEVINFO SetupDiGetClassDevs(
  _In_opt_ const GUID   *ClassGuid,
  _In_opt_       PCTSTR Enumerator,
  _In_opt_       HWND   hwndParent,
  _In_           DWORD  Flags
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

引數

ClassGuid[輸入引數,可選的] 
一個指向GUID的指標,此GUID可標識一個裝置安裝類或一個裝置介面類。這個指標是可選的,並且可以為NULL。更多關於ClassGuid賦值問題,請參考備註部分。

Enumerator[輸入引數,可選的] 
一個指向以空字元結束的字串的指標,指定了:

  • 即插即用裝置列舉樹的ID,此ID既可以是全域性唯一識別符號(GUID)也可以是符號名稱。比如:“PCI”可以用於指定PCI的PnP值,符號名稱則包括像“USB”,“PCMCIA”和“SCSI”這樣的Pnp值。

  • 一個PnP裝置控制程式碼ID。當指定了一個PnP裝置控制程式碼ID時,DIGCF_DEVICEINTERFACE必須在Flag引數上被設定。

hwndParent[輸入引數,可選的] 
用於與在裝置資訊集中安裝裝置例項相關聯的使用者介面的頂級視窗控制程式碼。該控制程式碼是可選的,並且可以為NULL。

Flags[輸入引數] 
Flags是一個DWORD型別的變數,通過此引數來過濾指定的裝置資訊集中的裝置。此引數可以是以下標誌位中的一個或多個的按位或組合,更多有關標誌位組合的資訊,請參考備註部分。

DIGCF_ALLCLASSES 
  返回所有已安裝裝置的列表或所有裝置介面類。

DIGCF_DEVICEINTERFACE 
  返回支援指定裝置介面類的裝置。如果Enumerators引數制定了裝置的例項ID,那麼必須在Flags引數中設定此標誌位。

DIGCF_DEFAULT 
  對於指定的裝置介面類,只返回與系統預設裝置介面相關聯的裝置(如果已設定的話)。

DIGCF_PRESENT 
  只返回當前系統中存在的(已連線)裝置。

DIGCF_PROFILE 
  只返回當前硬體列表中的一部分裝置。

返回值

如果呼叫成功,SetupDiGetClassDevs將返回一個裝置資訊集的控制程式碼,該控制程式碼包含了與所提供引數所匹配的所有裝置。如果呼叫失敗,函式返回INVALID_HANDLE_VALUE。要進一步獲取錯誤資訊,請呼叫GetLastError

備註

當呼叫完此函式並處理完相應資料後,必須呼叫SetupDiDestroyDeviceInfoList函。

呼叫SetupDiGetClassDevsEx來檢索遠端計算機上的裝置。

裝置安裝類控制選項 
使用以下過濾選項來控制SetupDiGetClassDevs是否返回所有裝置:

  • 要返回所有裝置,設定標誌位DIGCF_ALLCLASSES,並將ClassGuid設定為NULL。
  • 如果只是返回指定裝置,不要動DIGCF_ALLCLASSES標誌位,而是應該使用CLassGuid提供的Guid。

此外,還可以通過下面的組合來進一步控制裝置的過濾條件:

  • 設定DIGCF_PRESENT標誌位來返回系統中當前已連線裝置。
  • 設定DIGCF_PROFILE標誌位來返回當前硬體列表配置檔案中的裝置。
  • 要想返回一個PnP列舉裝置,使用Enumerator引數,並提供其GUID或符號名稱。如果Enumerator為NULL,SetupDiGetClassDevs返回所有PnP列舉裝置。

裝置介面類控制選項 
使用以下過濾選項來控制SetupDiGetClassDevs是否返回支援任何裝置介面類的裝置或僅返回支援指定裝置介面類的裝置:

  • 要返回支援任何類介面的裝置,請同時設定DIGCF_DEVICEINTERFACE和DIGCF_ALLCLASSES標誌位,並將ClassGuid設定為NULL。該函式將裝置資訊設定為表示這種裝置的裝置資訊元素,然後向裝置資訊元素新增包含裝置支援的所有裝置介面的裝置介面列表。

相關文章