您不應該直接使用登錄機碼來列舉裝置。 登錄機碼不包含列舉系統上已安裝裝置的必要資訊。 此資訊,例如裝置是否實際存在或是虛擬裝置 (未插入的裝置) ,由 隨插即用 (PnP) 管理員保留。 PnP 管理員也會執行登錄資訊的其他篩選。
若要安全地列舉已安裝的裝置,請遵循下列步驟。
使用 組態管理員 函式:
使用 CM_Get_Device_ID_List 擷取唯一 裝置執行個體識別碼 (ID) 字串的清單。 若要只擷取系統中存在之裝置的資訊,請在 ulFlags 參數中設定 CM_GETIDLIST_FILTER_PRESENT。
您可以搭配 CM_Locate_DevNode 使用唯一的裝置實例識別碼,以擷取代表要與其他組態管理員 API 搭配使用的裝置的 DEVINST 。
使用 SetupAPI 函式:
使用 SetupDiGetClassDevs 來擷取一組裝置的資訊。 若要只擷取系統中存在之裝置的資訊,請在 Flags 參數中設定 DIGCF_PRESENT。
使用 SetupDiEnumDeviceInfo 來列舉集合中的裝置。
您可以將 SetupDiEnumDeviceInfo 傳回的SP_DEVINFO_DATA與其他 SetupApi API 搭配使用,或使用 SetupDiGetDeviceInstanceId 擷取裝置的唯一裝置執行個體識別碼 (ID)。